Cumartesi, Aralık 21, 2013

inetd ve xinetd

Linux kullanan bilgisayarlar genelde sunucu olarak kullanılırlar, diğer bilgisayarların çoğu da en azından internet bağlantısına sahiptir. Böyle sistemlerde ağ güvenliği çok önemlidir çünkü yanlış yapılandırma sisteminize girişin yolunu açabilir.

Süper Sunucular (Super server): Çoğu ağ sunucusu ağ portlarını açar ve bağlantılar için bu portları dinler. Bazı programlar bu işi yapması için süper sunucuları kullanırlar. Süper sunucu başka programlar için ağ bağlantılarını dinler ve bağlantı sağlandığında kontrolü esas programa verir. Bunu avantajları şu şekildedir:

*Bellekte daha az yer kaplar.
*Güvenlik. Süper sunucuya güvenlik seçenekleri atanabilir.

İki tane önemli süper sunucu vardır: inetd ve xinetd. inetd'nin güvenlik seçenekleri TCPWrappers isimli bir paket yardımı ile yapılırken xinetd'nin güvenlik özellikleri kendi bünyesinde bulunur.

inetd'yi Yapılandırmak
Bilgisayarınızda hangi süper sunucunun çalıştığını öğrenmek için ps aux | grep inetd komutunu kullanabilirsiniz. bu komut inetd ya da xinetd içeren bir satır döndürür ekrana.

 inetd'yi Ayarlamak

inetd aracılığı ile çalışan sunucuları /etc/inetd.conf ya da /etc/inetd.d aracılığı ile kontrol edersiniz. /etc/inetd.conf dosyası satırlardan oluşan bir dosyadır ve her satır bir sunucuya karşılık gelir.

ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd -l

Tek bir /etc/inetd.conf dosyası kullanmak yerine inetd'nin son versiyonları yapılandırma dosyalarını /etc/inetd.d dizinin altında birden fazla dosyada tutmanıza izin verir. Böyle yapmak bir sunucuyu ekleme, değiştirme ya da silme işleminde direkt o dosyayı kullanmanızı sağlayarak kolaylık sağlar.

Her satır bir ya da daha fazla boşluktan oluşan alanlardan oluşur. Bu alanların anlamları aşağıdaki gibidir.

Servis adı İlk alan (örnekteki ftp) /etc/services dosyasında bulunduğu gibi servisin adıdır.

Soket tipi Soket tipi sistemin ne çeşit bağlantı tipi beklediğini gösterir - güvenilir iki yönlü bağlantı (stream), daha az ek yükü olan daha az güvenilir bağlantı (dgram), ağa alt seviye bağlantı (raw) ya da bunu gibi şeyler. Bu tipler arasındaki farklar oldukça teknik olduğu için bunu yazarken dikkat edilecek şey sunucunun belgelendirmesinde yazılan doğru değeri buraya girmektir.

Protokol ​ Bu satır kullanılan TCP/IP protokolünden hangisinin kullandığını belirtir, genelde tcp ya da udp.
 ​
Wait/no wait ​ dgram soket tipleri için bu girdi sunucunun istemciye bağlanıp soketi serbest bırakmasını (nowait) ya da bütün paketleri işleyip sonra serbest bırakmasını (wait) belirler. Diğer soket tiplerini kullanan sunucularda bu alan nowait olarak belirlenmelidir.

Kullanıcı Bu sunucuyu çalıştıracak kullanıcıdır. root ya da nobody kullanıcıları yaygın seçeneklerdir ama diğer seçenlerde kullanılabilir. Genel bir kural olarak uygun olduğu her durumda sunucuları olabilecek en düşük haklara sahip kullanıcı ile çalıştırmanız güvenlik önlemi olarak işe yarar. Bazı sunucular root erişimini talep edebilir, bunun için sunucunun belgelendirmesini kontrol etmeniz gerekir.

Sunucu adı Bu sunucunun dosya adıdır. Bizim örneğimizde bu /usr/sbin/tcpd yani TCP Wrappers programının konumudur. Programları inetd aracılığıyla çalıştırmak güvenlik için önemlidir.

Parametreler Sunucu adından sonra gelen her şey sunucuya gönderilen parametreleri içerir. Eğer TCP Wrappers kullanıyorsanız bu kısımda diğer parametrelerle birlikte gerçek hedef sunucuyu da buraya eklemeniz gerekir. (/usr/sbin/in.ftpd)

# sembolü /etc/inetd.conf için yorum satırını ifade eder. Bu sebeple eğer inetd ile çalışan bir sunucuyu devre dışı bırakmak isterseniz satır başına # eklemeniz gerekmektedir. Eğer bir sunucuyu inetd.conf dosyasına eklemek istiyorsanız bunun için bir girdi oluşturmanız gerekir. Çoğu sunucu belgelendirmesinde örnek bir inetd girdisini bulundurur. inetd ile gelen çoğu dağıtım yaygın sunucuların girdilerini inetd.conf dosyasına koymuştur ama çoğu yorum satırı olarak bulunur, sunucuları başlatmak için # işaretini kaldırıp sunucuyu aktive edebilirsiniz.

inetd.conf dosyasını değiştirdikten sonra inetd süper sunucunu tekrar çalıştırmanız gerekir. Bu süper sunucu normalde standart SysV sunucusu gibi çalışır bu sebeple şöyle bir şey yazarak tekrar başlatabilirsiniz:

# /etc/rc.d/init.d/inetd restart

Buna alternatif olarak sunucuyu yeniden başlatmak yerine inetd'ye yapılandırma dosyasını yeniden okumasını söyleyebilirsiniz. (SysV startup betiği ile) Yeniden başlatma sunucuyu kapatıp tekrar başlatır. Yeniden yüklemede ise sunucu çalışmayı durdurmaz sadece yapılandırma dosyasını tekrar okur ve değişiklikleri uygulamaya koyar. Pratik olarak ikisi birbirine benzer. Yeniden başlatma seçeneği genelde değişiklikleri daha doğru şekilde uygulamaya koyarken aynı zamanda var olan bağlantıların bölünmesine sebep olabilir.
SysV startup betiğini kullanmak yerine kill ya da killall komutlarını SIGHUP sinyaliyle birlikte inetd için kullanabilirsiniz. Bu sinyal inetd'de dahil olmak üzere çoğu sunucuya yapılandırma dosyalarını yeniden okumaları işine yarar.
kill -HUP pid (eğer süreç id'sini biliyorsanız)
killall -HUP inetd

TCP Wrappers Aracılığı ile Erişimi Kontrol Etmek

TCP Wrappers paketi tcpd olarak bilinen bir programı sunar. inetd'nin sunucuyu direkt çağırması yerine inetd tcpd'yi çağırır ve bu da iki şey yapar: İstemcinin sunucuya erişmek için yetkisinin olup olmadığını kontrol eder ve eğer istemcinin yetkisi varsa tcpd sunucu programını çağırır.

TCP Wrappers iki dosya aracılığı ile yapılandırılır: /etc/hosts.allow ve /etc/hosts.deny

Bunların ilki sisteme bir şekilde erişimine izin verilen bilgisayarları belirler, burada listelenmeyen sistemlerin erişiminin yasaklandığı anlamına gelir. Diğer dosya ise sisteme erişimin izin verilmediği bilgisayarları listeler, diğer herkes siteme erişebilir. Eğer bir bilgisayar her iki dosyada listelenmişse hosts.allow önceliklidir.
İki dosyada aynı basit biçimi kullanır. Dosyalar aşağıdaki biçimdeki satırları içerir:

daemon-list : client-list

daemon-list sunucuların bir listesidir, /etc/services dosyasında bulunan sunucu isimlerini kullanır. ALL gibi bazı özel biçimleri de kullanılabilir.
client-list belirli daemonlar için erişimin izin verildiği ya da reddedildiği bilgisayarların listesidir. Bilgisayarları isimlere ya da IP adreslerine göre yazabilirsiniz ve ağları belirtirken . işaretini kullanabilirsiniz. Örneğin;

.luna.edu satırı luna.edu alan adında olan tüm bilgisayarları reddeder.
192.168.7. satırı 192.168.7.0/24 ağındaki tüm bilgisayarları reddeder.

Client-list'te ALL gibi kelimeler kullanılabilir. EXCEPT istisna oluşturmaya yarar. Örneğin;

ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

Satırı terminal.foobar.edu dışındaki tüm .foobar.edu alan adını kabul eder.

Daha fazla bilgi edinmek için hosts.allow ve hosts.deny'ın man sayfalarına bakabilirsiniz. (Bunlar aynı man sayfasıdır.)

xinetd'yi Yapılandırmak

xinetd programı genişletilmiş bir süper sunucudur. inetd'nin fonksiyonelliğini ve buna ek olarak TCP Wrappers'a benzeye güvenlik seçenekleri sunar.
xinetd'yi Ayarlamak

/etc/xinetd.conf dosyası xinetd'yi kontrol eder. xinetd'yi varsayılan olarak kullanan dağıtımlarda bu dosya sadece global varsayılan seçenekleri ve /etc/xinetd.d içine dosyaları eklemek için bir talimat içerir. xinetd aracılığı ile çalışması gereken sunucu kendi yapılandırma seçeneklerini içeren dosyayı /etc/xinetd.d dizinine eklemelidir.
Sunucunun yapılandırma seçenekleri ister /etc/xinetd.conf dosyasında ister /etc/xinetd.d dizini altında olsun, bu seçenekler inetd.conf dosyasında bulunanlara benzer bilgiler içerir. Ama xinetd yapılandırma dosyası bilgileri birden fazla satıra yayar ve daha ayrıntılı şekilde etiketler.
inetd.conf dosyasında bulunan satırın xinetd.conf karşılığı:

service ftp
{
socket_type        = stream
protocol        = tcp
wait            = no
user            = root
server            = /usr/sbin/in.ftpd
server_args        = -l
}

xinetd.conf dosyasında fazladan önemli bir parametre bulunur: disable. Eğer disable=yes satırını eklerseniz xinetd bu girdiyi yoksayar. Bazı sunucular startup dosyalarını /xinetd.d içine yükler ve varsayılan olarak disable=yes seçeneğini atar. Bu sunucuyu çalıştırmak için satırı disable=no olarak değiştirmeniz gerekir. Ayrıca bir dizi sunucuyu aynı anda ana xinetd.conf dosyasının içindeki defaul bölümünün içinde disabled satırına ekleyerek devre dışı bırakabilirsiniz.
inetd'de olduğu gibi xinetd'de de yapılandırmada değişiklik yaptığınızda süper sunucuyu tekrar başlatmanız gerekir.

# /etc/rc.d/init.d/xinetd restart

inetd'de olduğu gibi betik yardımıyla xinetd'nin yapılandırma dosyasını yeniden okumasını sağlayabilir ya da kill ve killall komutlarına SIGHUP sinyalini göndererek aynı işi yaptırabilirsiniz.

xinetd ile Erişimi Kontrol Etmek
Güvenlik /etc/xinetd.conf ya da sunucu-spesifik yapılandırma dosyalarında kullanılan yapılandırma parametreleriyle sunucu-sunucu temeliyle halledilir.

Ağ arayüzü bind seçeneği servis için xinetd'ye sadece bir ağ arayüzünden dinlemesini söyler. Bunu bir sunucuyu sadece loopback arayüzüne bağlayarak, sunucuyu sadece yerel olarak kullanılabili hale getirebilirsiniz.

Kabul edilen IP ya da ağ adresleri only_from seçeneğine IP adreslerini, ağları (192.168.78.0/24 gibi) ya da bilgisayar isimlerini yazarak xinetd'nin sadece bu adreslerden erişimi kabul etmesini sağlayabilirsiniz, TCP Wrappers'ın hosts.allow'da yaptığı gibi.

Kabul edilmeyen IP ya da ağ adresleri no_access seçeneği only_from'un tersidir; kara listeye eklemek istediğiniz bilgisayar ve ağları buraya yazarsınız. TCP Wrappers'ın hosts.deny dosyasına benzerdir.

Erişim zamanları access_times seçeneği hangi kullanıcıların sunucuya erişebileceği zamanı atar. Zaman aralığı şu şekilde belirlenir: saat:dakika-saat:dakika, 24 saatlik saate göre. Bu seçenek sadece hangi sunucunun o zaman aralığında yanıt vereceğini belirler. Eğer xinetd access_time seçeneği 8:00-17:00 olarak atanmışsa 16:59'da sisteme login olan birisi sistemin cevap verme süresinin dolduğu 17:00 saatinden sonra da kullanmaya devam edebilir.

Bu seçenekleri /etc/xinetd.d dizininde bulunan ve korumak istediğiniz sunucuya ait olan dosyaya girmelisiniz. Satırları service{} arasındaki yere yerleştirmelisiniz. Eğer bütün xinetd tarafından kontrol edilen sunucularınızı korumak istiyorsanız bu satırları /etc/xinetd.conf dosyasına yerleştirebilirsiniz.

Yerelleştirme ve Internationalization Yapılandırması

Linux kendi içinde UTC zaman ayarını kullanır ama muhtemelen kendi bilgisayarımızda yerel saati kullanıyor oluruz. Bu ikisi arasında dönüşüm yapılması gerekir. Bu dönüşümü yapabilmek için Linux kullanıcının yerel saatini /etc/localtime (Debian ve türevlerinde düz metin formatında /etc/timezone altında ikincil bir dosya bulunur, bu dosyanın Fedora ve onun gibi dağıtımlardaki adı /etc/sysconfig/clock tur) tutar ve gerektiğinde buraya bakar. localtime dosyası düz metin formatında olmayan az sayıdaki yapılandırma dosyalarından biridir. Bilgisayarınızın kullandığı saat dilimini görmek için date komutunu kullanabilirsiniz.

$ date
Cts Ara 21 18:23:16 EET 2013


EET özel bir üç harfli zaman kodudur ve bulunduğunuz konuma göre değişir.

$ cat /etc/timezone
Europe/Istanbul


Bu dosyada gördüğünüz gibi kullandığım yerel saatin nereye göre olduğu yazıyor. Zaman dilimlerine bakmak için /usr/share/zoneinfo/Ulke/Bolge ya da Sehir şeklinde istediğiniz yeri arayabilirsiniz. Bu dosya hızlıca zaman diliminize bakmanıza izin verir.

Locale'inizi Sorgulamak ve Ayarlamak

Bilgisayarınızı yerelleştirmek için locale nedir ne değildir bilmeniz gerekir. Locale dil, ülke ve bu gibi bilgileri tutar. Bilgisayarınızda bu bilgiyi öğrenmek için locale komutunu kullanmanız yeterlidir. Kullanılabilir bütün locale değişkenlerini öğrenmek için locale -a komutunu kullanırsınız.

Locale değişkenlerinin içinde şu bilgiler bulunur:
[dil[_ülke][.kodlamastandardı][@modifier]]

Bizim ülkemiz için bu örnek olarak tr_TR.UTF-8 şeklindedir.

Kodlama standartları (codeset) ASCII, ISO-8859 ya da UTF-8 olabilir. ASCII az sayıda dili destekler. ISO-8859 ASCII'nin geliştirilmiş halidir ama diller için ayrı alt bölümler sunar. (ISO-8859-1 gibi) Bu sebeple alt bölümler istediğiniz diğer dilleri desteklemeyebilir. UTF-8 geniş bir dil desteği sunar.

Geçiçi olarak locale değişkenlerini değiştirmek için LANG ve LC_ALL çevre değişkenlerini değiştirmeniz yeterlidir. Ama bunları değiştirdiğinizde bu değişiklik sadece o oturum için ve o konsoldan açılan programlar için geçerli olacaktır ve halihazırda açık olan programları etkilemeyecektir. Bunu yapmak için .bashrc ya da /etc/profile dosyasını düzenlemeniz gerekir. X'in yapılandırma dosyası klavyenin InputDevice bölümünde XkbLayout seçeneği ile locale değişkeninizi değiştirebilmeyi sağlar ama orada hepsini küçük harfle girmeniz gerekir. (tr_TR.UTF-8 yerine tr_tr.utf-8 gibi) Bu değişikliğin geçerli olabilmesi için X'i yeniden başlatmanız gerekir.

Bazen bilgisayarınızda sistemin ürettiği bir dosyanın kodlaması dosyayı işleyecek başka bir program tarafından desteklenmeyebilir. (Kullandığınız metin editörü UTF-8 i destekleyip ISO-8859 u desteklemeyebilir.) Bu problemi aşmak için iconv komutu kullanılır.

iconv -f encoding [-t encoding] [inputfile]...

-f ve -t kaynak ve istenilen kodlama standartlarını belirtir. Eğer istenilen kodlama standartını belirtmezseniz iconv yerel ayarlarınızda bulunan seçeneği alır.

iconv -f iso-8859-1 -t UTF-8 dosya_iso.txt > dosya_utf.txt


Cuma, Aralık 20, 2013

Linux Sistem Yönetimi - Kullanıcı ve Gruplar

Sistemi Yönetmek

Linux sistem yönetiminde günlük işler içerisinde kullanıcı ve grupları oluşturmak, silmek, bulundukları ortamları ayarlamak bulunur. Küçük sistemlerde bu işlem çok sık olmasa da büyük sistemlerde sıkça gerçekleşir ve her halükarda bunların bilinmesi önemlidir. Diğer bir günlük iş ise log dosyalarını yönetmek ve incelemektir. Her şeyin olması gerektiği gibi çalıştığını kontrol etmek için log dosyalarını düzenli olarak kontrol etmelisiniz.
Çoğu Linux görevi zamanla ilgilidir. Linux zamanı diğer işletim sistemlerinden farklı kullanır ve ve Linux'un zamanı nasıl kullandığını bilmek önemlidir.

Kullanıcıları ve Grupları Ayarlamak

Linux "hesap" mantığına dayanan çok kullanıcılı bir sistemdir - veri yapıları ve prosedürler sistemde bulunan kullanıcıları belirlemek için kullanılır. Bu hesapları yönetmek çok temel aynı zamanda çok önemli bir iştir.

Linux Kullanıcı Adlarını Anlamak

Linux kullanıcı adları konusunda oldukça esnektir. Büyük/küçük harfler, rakamlar, bazı işaretler ve boşluklar kullanılabilir. Ama boşluk bazen sorun yaratabilir. Ayrıca kullanıcı adları bir harfle başlamak zorundadır.

45u - yanlış
u45 - doğru

Kullanıcı adlarında harflerin büyük ve küçük olmasına duyarlılık vardır. Yani tugce ve Tugce isimli iki ayrı kullanıcı bir sistemde barınabilir.  (Karışıklık yaratabileceği için böyle bir şey yapılmaması daha iyidir)

Kullanıcıları bir araya getirerek Gruplar yardımıyla Verimliliği Sağlamak

Linux grupları kullanıcıları organize etmek için kullanır. Çoğu yönden gruplar kullanıcılara benzer. Benzer yapılandırma dosyaları ile tanımlanırlar, benzer isimler taşırlar ve hesaplar gibi kendilerine ait numaraları olur.

Ama gruplar hesap değildir. Gruplar (genelde güvenlik nedeniyle) hesapların bir araya toplanmasıdır. Örneğin bir gruba bir dosyayla ilgili özel izinler verilebilir, böylece o gruba ait kişiler o dosyaya erişebilirken o gruba ait olmayan kişiler erişemez. Linux çoğu donanıma da dosyalarla eriştiği için aynı işlemi donanıma erişim konusunda da gerçekleştirebilirsiniz.

Her grup sıfır ile bilgisayardaki tüm hesapların sayısı kadar üye barındırabilir. Grup üyeliği /etc/group dosyası aracılığıyla kontrol edilir. Bu dosya grupların bir listesi ile gruplara bağlı olan kullanıcıları içerir.

Her hesabın birincil grubu bulunur. Bu /etc/group yerine /etc/passwd içinde bulunur. Bir hesap oluşturulduğunda bu hesaba birincil grup atanır. Kullanıcı dosya oluşturduğunda ya da programları çalıştırdırdığında bunu bulunduğu birincil grubun haklarıyla yapar. Ayrıca kullanıcı diğer gruplara ait olduğu sürece ve o grupların erişim izni olduğu sürece diğer dosyalara da erişebilir. Kullanıcı bir programı başka bir grubun haklarıyla çalıştırmak isterse bu gruba geçiş yapmalıdır.

$newgrp grup2

Bu komutla grup2 grubuna geçiş yapılabilinir.Buna alternatif olarak kullanıcı dosyaları başka bir grup haklarıyla oluşturmak istiyorsa chgrp ya da chown ile bunu gerçekleştirebilir.

$chgrp grup2 dosyaadi
$chown kullanici2 dosyaadi

UID ve GID'leri Kullanıcılar ve Gruplarla İlişkilendirmek

Linux kullanıcıları ve grupları numaralarla tanımlar, bunlar kullanıcı ID (user ID - UID) ve grup ID (group ID - GID) olarak bilinir. Linux kendi içinde kullanıcı ve grupları isimlerine göre değil numaralarına göre takip eder.

kullanıcı adı:tugce
UID: 512
grup adı: grup1
GID: 503

Biz kullanıcı ve grupları isimleriyle ayrıştırırken Linux /etc/passwd ya da /etc/group tan isimle bağlantılı numarayı alarak bunu kullanır. Bazen Linux'un bu numaraları neye göre verdiğini bilmeniz gerekebilir.
Linux dağıtımları 0-99 arasındaki numaraları sistem kullanımı için olan kullanıcı ve gruplar için ayırırlar. Bunların en önemlisi 0'dır ve root kullanıcısı ve root grubuna karşılık gelir. 0-99 arasındaki tüm numaralar kullanılmaz.
100'den sonraki numaralar sıradan kullanıcı ve grupların kullanımı içindir. Ama çoğu Linux dağıtımı 500 ya da 1000'e kadar numarayı özel amaçlar için ayırabilir. Yeni hesaplar ürettiğinizde sistem sıradaki en yüksek numarayı bu hesaba atar. Eğer dağıtımınız 500'e kadar özel amaçlar için ayırmışsa oluşturacağınız kullanıcının UDI'si 500 olacaktır. Kullanıcı silindiğinde bu hesabın numarası tekrar kullanılabilir ama numaralar otomatik atandığı için arada atlamalar oluşacaktır. Eğer sisteminizde çok fazla kullanıcı yoksa ve UID gerekmiyorsa bu atlamalar sizin için çok önemli olmayacaktır. (2.2.x kernellerinde sınır 65.536, 2.4.x kernelleri ve sonrasında sınır 4.2 milyardan fazladır. Ama bu limit yapılandırma dosyasında kısıtlanabilir.) Eski kullanıcının UID'sini kullanmak eğer o kullanıcıya ait tüm dosyalar silinmediyse bir karışıklığa yol açabilir, yeni kullanıcı eski kullanıcının silinmeyen dosyalarına erişebilir.

*Genel olarak GID 100 bazı dağıtımlarda varsayılan kullanıcılar grubudur.

Aynı UID'ye sahip birden fazla kullanıcı adı oluşturmak ya da aynı GID'ye sahip birden fazla grup adı oluşturmak mümkündür. Bazı açılardan bunlar farklı kullanıcı ve gruplardır ve /etc/passwd ya da /etc/group altında farklı satırlarda yer alırlar böylece kendilerine ait home dizinleri, parolaları olabilir. Ama kullanıcı ve gruplarda aynı ID kullanıldığında dosya izinleri konusunda sistem bunlara aynıymış gibi davranır.

NOT: 0 UID'sine sahip her kullanıcı root ve bir süper kullanıcıdır.

Kullanıcı Hesaplarını Yapılandırmak

Sistemde ne kadar sıklıkla kullanıcı işlemleri yapacağınız bulunduğunuz sisteme göre değişse de bu işlemleri (ekleme, değiştirme, silme ) yapabilmek önemlidir.

Kullanıcı Eklemek

Kullanıcı eklemek useradd komutuyla gerçekleştirilir.

useradd [-c comment] [-d home-dir] [-e expire-date] [-f inactive-days]➦
[-g default-group] [-G group[,...]] [-m [-k skeleton-dir] | -M]➦
[-p password] [-s shell] [-u UID [-o]] [-r] [-n] username

-c Yorum için. Kullanıcının gerçek ismi, email adresi, telefonu vb. gibi bilgiler girilebilir.
-e YYYY-AA-GG şeklinde yazılır.

Kullanıcı Hesaplarını Değiştirmek

Kullanıcı hesapları birçok yönden değiştirilebilir: /etc/passwd gibi kritik dosyaları düzenleyebilir, hesabın home dizininde bulunan kullanıcı-spesifik dosyaları değiştirebilir ya da hesapları oluşturmak için kullanılan sistem araçlarını kullanabilirsiniz. Genelde hesaplar kullanıcının isteğine ya da yeni bir kuralı uygulamak ya da home dizinlerini yeni bir hard diske taşımak gibi sistem değişiklikleri için değiştirilir. Bazen hesaplar oluşturulduktan hemen sonra değiştirilmesi gerekebilir ve bu değişiklikler kullanıcı oluşturmada kullanılan araçlarla kolayca yapılmaz çünkü değişmeye gerek duyulmasının sebebi useradd komutunda kullanmayı unuttuğunuz bir parametre olabilir.

Parola Atamak

useradd parola atamak için -p parametresini sağlasa da bunu kullanıcıyı eklerken direkt kullanmak çok kullanışlı değildir çünkü önceden şifrelenmiş bir parolaya ihtiyaç duyar. Bu sebeple -p kullanmayarak devre dışı bırakılmış bir hesap oluşturup parolayı hesabı oluşturduktan sonra atmak daha kolaydır. Bunu passwd komutu ile gerçekleştirebilirsiniz.

passwd [-k] [-l] [-u [-f]] [-d] [-S] [username] (Detaylı kullanımı için man sayfasını incelemeniz iyi olacaktır.)

Sıradan kullanıcılar passwd komutu ile parolalarını değiştirebilirler ama çoğu passwd parametresi sadece root ken kullanılır. Özellikle -l, -u, -f, -d sıradan kullanıcıların erişemeyeceği parametrelerdir. Ayrıca sadece root passwd kullanırken bir kullanıcı adını kullanabilir. Sıradan kullanıcılar komutu çalıştırırken kullanıcı isimlerini yazmamaları gerekir, passwd komutu çalıştıran kullanıcı adının parolasını değiştirecektir. Güvenlik önlemi olarak sıradan kullanıcılar passwd komutunu çalıştırdığında passwd parolayı değiştirmeden kullanıcının eski parolasını da sorar. Bu önlem root için geçerli değildir böylece root kullanıcının eski parolasını bilmeden kullanıcıların parolasını değiştirebilir. Bu gereklidir çünkü sistem yöneticisi genelde kullanıcının parolasını bilmez. Ayrıca bu sistem yöneticisinin kullanıcı parolasını unutmuş kullanıcılara yardım etmesini sağlar.
Linux parolaları harfleri, rakamları ve noktalama işaretlerini içerebilir. Linux parolalarda küçük/büyük harf ayrımı yapar böylece güvenliği arttırmak için büyük/küçük harfli, rakamlı ve noktalama işaretli parolaları kullanabilirsiniz.

usermod'u Kullanmak

usermod özellikleri ve parametreleri ile useradd'e benzerlik gösterir. Ama bu araç yeni bir hesap oluşturmak yerine varolan hesabı değiştirmek için kullanılır. useradd ile usermod arasındaki büyük farklar şöyledir:

*usermod -d ile kullanıldığında -m parametresinin kullanılmasına da izin verir. -d parametresi dosyaları taşımadan kullanıcının home dizinini değiştirir. Bu parametreye -m eklemek usermod'un kullanıcının dosyalarının da yeni konuma taşınmasını sağlar.
*usermod -l parametresini de destekler, bu parametre kullanıcının login ismini belirtilen değerle değiştirir. Örneğin usermod tugce -l tugcesirin kullanıcının kullanıcı adını tugce'den tugcesirin'e değiştirir.
*-L ve -U seçenekleriyle kullanıcının parolasını kilitleyip açabilirsiniz. Bu seçenekler passwd tarafından sağlanan seçeneklerin aynısıdır. usermod /etc/passwd ya da /etc/shadow un içeriğini değiştirir kullanılan seçeneğe bağlı olarak. -m de kullanılırsa usermod daha önce de belirtildiği gibi kullanıcının dosyalarını taşır.

Eğer hesabın UID'sini değiştirirseniz bu hareket kullanıcının dosyalarındaki UID'leri değiştirmez. Bunun yüzünden kullanıcı bu dosyalara olan erişimini kaybedebilir. Dosyalardaki UID'leri elle güncelleyebilirsiniz chown komutunu kullanarak. Aşağıdaki komut tugce hesabınının UID'sini değiştirdikten sonra tugce kullanıcısının home dizininin sahiplik haklarını düzenler.
# chown -R tugce /home/tugce
Bu komut tugce'nin home dizininde olmayan ama sahipliği tugce'de olan dosyaları etkilemez. Eğer böyle dosyaların olduğunu düşünüyorsanız o dosyaları find komutu ile bulabilirsiniz. Ayrıca bu komut tugce hesabının home dizinindeki tüm dosyaların sahiplik hakkını değiştirir. Normalde bunun olmasında bir sakınca yoktur ama kişinin home dizininde başkasına ait dosyalarda bulunabilir.
Kullanıcıyı yeni gruplara eklerken -G komutu kullanıldığında yazılmayan herhangi bir gruptan kullanıcının çıkarılacağını unutmayın. gpasswd komutu kullanıcıyı bir ya da birden fazla gruba var olan grup üyeliklerini etkilemeden eklemek için bir yol sunar bu yüzden bu amaç için tercih edilmesi daha uygundur. (genelde)

chage'i Kullanmak

chage komutu hesabın geçerlilik süresinin ayarlanması ile ilgili ayarları içerir. Linux hesaplarını birkaç şarta bağlayarak bir geçerlilik süresi koymak mümkündür:
*Parola belirlenen sıklıkta değiştirilmediğinde
*Sistem zamanı önceden belirlenmiş bir tarihi geçtiğinde
Bu ayarlar chage aracı ile kontrol edilir.

chage [-l] [-m mindays] [-M maxdays] [-d lastday]
[-E expiredate] [-W warndays] username
[-I inactivedays]➦

Bilgileri görüntüle: -l parametresi belirtilen kullanıcı hesabının bitiş tarihini ve parolanın ne zamandır kullanıldığını gösterir.

Parola değişikliği arasında geçecek minimum zaman dilimini ayarlamak: -m parametresi parolanın değiştirilebileceği en kısa zaman aralığını belirler. 0 kullanıcının parolayı bir gün içerisinde birden fazla defa değiştirebileceğini, 1 kullanıcının parolasını günde bir değiştirebileceğini söyler. Bu rakam istenilen bir değere atanabilir.

chage -m 7 tugce

Bu komut tugce kullanıcısının parolasını en fazla 7 günde bir defa değiştirebileceğini söyler. Bu komutu kendi hesabınız için kullanmak isteseniz bile root olmanız gerekecektir yoksa chage: Permission denied. hatası ile karşılaşabilirsiniz.

Parola değişikliği arasında geçecek maksimum zamanı ayarlamak: -M parametresi parola değişikliği arasında geçen maksimum değişiklikliği ayarlar. Örneğin 30 atanırsa kullanıcı ayda bir parolasını değiştirmelidir.

Not: Kullanıcı belirlenenden önce parolasını değiştirirse bir sonraki parola değiştirme tarihi o andan itibaren hesaplanır. (Örneğin Ayda 1 değiştirilmesi gerektiğinde 17.günde değiştirilirken o günden itibaren 30 gün içinde parola tekrar değiştirilmelidir.)

Parolanın son değiştirilme tarihini atamak Bu normalde Linux tarafından otomatik olarak halledilen bir iştir ama -d parametresi ile parolanın son değiştirilme tarihini YYYY/MM/GG şeklinde değiştirebilirsiniz.

sudo chage -d 2013/12/29 tugce
chage -l tugce
Last password change                    : Dec 29, 2013


Maksimum aktif olunmayan gün sayısını atamak -I parametresi parolanın geçerliliğini kaybettiği günle hesabın devre dışı bırakılacağı günü atamak için kullanılır. Geçerliliğini kaybetmiş (expired) bir hesap kullanılamayabilir ya da kullanıcı login olarak parola değiştirmeye zorlanabilir. Devre dışı kalmış bir hesap tümüyle devre dışı kalmıştır. (disabled)

Geçerliliğin son tarihini atamak -E parametresi ile bir hesaba kesin bir geçerlilik süresi atayabilirsiniz. -E 2013/12/29 kullanıldığında hesap 29 Aralık 2013'te geçerliliğini kaybeder. -1 değeri hesabın geçerliliğini yitirmeyeceğini belirtir.

Uyarı gün sayısının atanması -W hesabın geçerliliğini kaybedeceği günden belirli bir süre önce kullanıcıyı uyarmak için kullanılır. Bunun metin modunda olan kullanıcılar için geçerli olduğunu ve GUI kullanan kullanıcıların genelde bu uyarıyı görmeyeceğini unutmayın.

chage komutu normalde sadece root tarafından kullanılabilir. Tek bir istisna -l parametresiyle kullanılmış halidir. Bu özellik sıradan kullanıcılara hesaplarının geçerlilik tarihi ile ilgili bilgi verir.

Hesap Yapılandırma Dosyalarını Direkt Değiştirmek

Kullanıcı yapılandırma dosyaları elle değiştirilebilir. /etc/passwd ve /etc/shadow bir hesabın çoğu temel özelliklerini kontrol eder. İki dosya da satır dizilerinden oluşur ve her satır bir hesaba karşılık gelir. Her satır kullanıcı adıyla başlar ve : ile ayrılmış bir dizi alanla devam eder.

tugce:x:1000:1000:Tugce,,,:/home/tugce:/bin/bash

Her alan özel bir anlama sahiptir. /etc/passwd için bu alanların anlamları şu şekildedir:

İlk alan kullanıcı adıdır.
İkinci alan genel olarak parola için ayrılmıştır. Çoğu Linux sistemi gölgelenmiş parolayı /etc/shadow altında tutar. /etc/passwd dosyasında parola x olarak gösterilir. Gölgelenmiş parola kullanmayan sistemlerde şifrelenmiş bir parola bulunur.
Üçüncü alan UID'yi içerir. (1000)
Dördüncü alan birincil grubu gösterir. (1000)
Beşinci alan yorum alanıdır. Bu alan farklı sistemlerde farklı şekillerde gösterilir. Bazı sistemler virgül ile ayırarak ek bilgileri gösterebilir.
Altıncı alan home dizininin konumudur. Son yer alan ise kullanıcının varsayılan kabuğudur. (shell) Genelde /bin/bash, /bin/tcsh ya da diğer yaygın kabuklar bulunabilir. Ama burada alışılmışın dışında da bir şey bulunabilir. Örneğin çoğu sistem bir shutdown hesabına sahiptir ve bu hesabın kabuğu /bin/shutdown dur. Kabuğu /bin/false olan kullanıcı hesapları oluşturabilirsiniz, böylece kullanıcının sıradan bir kullanıcı gibi sisteme login olmasını engelleyip diğer araçları kullanabilmesini sağlarsınız. Örneğin bu tür kullanıcılar POP ya da IMAP gibi mail protokolleri ile mail alabilirler. Bunun bir diğer çeşidi /bin/passwd kabuğudur, böylece kullanıcılar uzaktan parolalarını değiştirebilir ama bir komut kabuğu kullanarak login olamazlar.

Bu alanların hepsini elle değiştirebilirsiniz ama gölgelenmiş parolayı değiştirmemeniz iyi olacaktır; parola ile ilgili değişiklikleri passwd aracına bırakmanız daha iyi olacaktır böylece parola düzgün bir şekilde şifrelenip /etc/shadow altında depolanabilir. usermod ile ilgili değişikliklerde eğer değiştirilecek hesabın kullanıcısı sisteme login olmamışse /etc/passwd yi direkt değiştirmek en iyi seçim olacaktır.

/etc/passwd gibi /etc/shadow da elle değiştirilebilir.

Not: /etc/passwd normal kullanıcılar tarafından okunabilirken /etc/shadow root tarafından okunabilir.

tugce:gölgelenmiş parola:16068:0:99999:7:::

Buradaki satırların çoğu chage aracı ile ilgili alanlardır. Alanların anlamları şu şekildedir:

Her satır kullanıcı adıyla başlar. /etc/shadow da kullanıcının UID si bulunmaz. İkinci alan parolanın gölgelenmiş halidir. * ya da ! parolası olmayan bir hesabı işaret eder, bu hesabın kilitli olduğu ve login kabul etmediği anlamına gelir. Bu sistemin kendi hesapları için yaygındır. Sonraki alan parolanın son değiştirldiği tarihi gösterir. Bu 1 Ocak 1970'ten itibaren parolanın değiştirildiği gün sayısıdır. Sonraki alan parolanın en az kaç günde bir değiştirilebileceğini gösterir. Bizim durumumuzda bu 0 yani bir günde birden fazla defa parola değiştirilebilir. Sonraki alan parola değiştirmenin zorunlu olduğu gün sayısını gösterir.(99999 gün içinde parolamı değiştirmem gerekiyormuş mesela.) Parolanın geçersiz kalacağı günden önce uyarı verileceği gün sayısı sonraki alandadır. Buradaki örnekte görüldüğü gibi parolamın geçersiz olacağı günden 7 gün önce sistem beni uyaracak. Sonraki alanlar sırasıyla geçersiz kalma ile hesabın devre dışı bırakılacağı gün arasındaki gün sayısını, geçersiz kalacağı günü ve özel bir bayrak (flag) içerir.

Bir değerin -1 ya da 99999 olması o özelliğin devre dışı bırakıldığı anlamına gelir. /etc/shadow daki alanların usermod ya da chage ile değiştirlmesi daha uygundur çünkü bu alanları değiştirmek biraz kafa karıştırıcı olabilir. Örneğin 1 Ocak 1970'ten itibaren gün sayısını hesaplarken artık yılları unutmak gibi. Ayrıca şifrelenmiş yapısı yüzünden parola kısmını elle değiştirmek iyi olmayabilir.

Hesapları Silmek

Görünüşte hesapları silmek oldukça kolaydır. userdel komutuyla kullanıcı ile ilgili satırı /etc/passwd ve eğer sistem gölgelenmiş parola kullanıyorsa /etc/shadow un altından silebilirsiniz. userdel komutu sadece 3 parametre alır.

Kullanıcı dosyalarını sil -r ya da --remove sistemin kullanıcının mail spool u ile home dizinini silmesini sağlar.

Zorla silmek -f ya da --force parametresi -r ile birlikte kullanılarak kullanıcı sisteme login olmuş haldeyse bile hesap silinebilir. Ayrıca bu seçenek kullanıcının mail havuzu? (spool) ve home sizini başka kullanıcı tarafından da kullanılıyor olsa bile bunları silmeyi sağlar.

Yardım almak -h ya da --help parametresi userdel için kullanılabilir olan seçenekleri görüntüler.

userdel -h
Usage: userdel [options] LOGIN

Options:
  -f, --force                   force removal of files,
                                even if not owned by user
  -h, --help                    display this help message and exit
  -r, --remove                  remove home directory and mail spool


Böylece bir kullanıcıyı silmek userdel -r kullanıcı adı komutu ile oldukça basit bir şekilde yapılabilir. Eğer kullanıcının dosyalarını tutmak istiyorsanız -r parametresini kullanmayabilirsiniz. Kullanıcı silerken olası bir sorun kullanıcının kendi home dizini dışında da dosyaları olmasıdır. Bu özellikle geçici dosyaların durduğu /tmp dizininde görülür. Buradaki dosyalar belli aralıklarla silinse de kullanıcının başka dizinlerde de dosyaları bulunabilir. Bu dosyaları bulmak için find komutunu -uid parametresiyle kullanarak dosyaların konumlarını saptayabilirsiniz. (eğer hesabı henüz silmemişseniz -user parametresi de kullanılabilir.) Örneğin 1000 UIDsine sahip tugce kullanıcısına ait dosyaları bulmak için find / -uid 1000 komutu kullanılır. (/ kök dizinine işaret eder.) Sonra çıkan dosyalara bakarak hangilerini silip hangisini tutacağınıza (sahiplik izinlerini değiştirmek ya da yedeklerini almak gibi) karar verebilirsiniz. Bu dosyalarla bir şeyler yapılması mantıklıdır çünkü silinen kullanının UIDsine sahip bir kullanıcı oluşturulursa yeni kullanıcı bu dosyaların sahiplik hakkını alır, bu yeni kullanıcının dosya kotasının dolmasına ya da erişmemesi gereken dosyalara erişmesine neden olabilir.
Bazı sunucular -en bilineni Samba- kendi kullanıcı listelerini tutarlar. Eğer böyle bir sunucu çalıştırıyorsanız yapılacak en iyi şey kullanıcının ana hesabını silerken aynı zamanda sunucunun kullanıcı listesinden de çıkarmaktır. Samba için bunu yapacaksanız bunu smbpasswd dosyasını elle düzenleyerek (genelde /etc, /etc/samba ya da /etc/samba.d dizinlerinin altında bulunur) ve kullanıcının olduğu satırı silerek yapabilir ya da smbpasswd nin -x parametresini kullanarak smbpasswd -x kullanıcı adı komutuyla bunu gerçekleştirebilirsiniz.

Grupları Yapılandırmak

Linux kullanıcı hesapları için sunduğu araçların benzerlerini gruplar için de sunar. Bununla birlikte gruplar hesaplar gibi değildir bu yüzden araçların çoğu özelliği farklılık gösterir. Grupların yapılandırma dosyalarını da elle düzenleyebilirsiniz, bunlar kullanıcı hesaplarının yapılandırma dosyalarına benzer ama detaylarda değişiklik gösterirler.

Grupları Eklemek

Grup eklemek için groupadd komutu bulunur. Bu araç useradd e benzer ama daha az özelliğe sahiptir.

groupadd {-g GID [-o]] [-r] [-f] grup_adı

-g ile GID'yi belirleyebilirsiniz. -r ile 500'den düşük GID'ye sahip bir grup oluşturabilirsiniz. Bunun sebebi bazı dağıtımlarda (Red Hat gibi) 500 ve üstündeki GID'ler kullanıcıya özel gruplar için ayrılmıştır. Bütün dağıtımlar -r parametresini desteklemez. Normalde varolan bir grup ismiyle bir grup oluşturmaya çalıştığınızda  groupadd bir hata döner. -f parametresi bu hata mesajını bastırır. Bütün groupadd versiyonları bu parametreyi desteklemez.

Çoğu durumda grupları parametre belirtmeden oluşturursunuz. Böylece belirttiğiniz grup adında sistemin uygun bulduğu bir GID'ye sahip (var olan en yüksek GID'den 1 eksik) bir grup oluşturursunuz. Bunu yaptıktan sonra gruba kullanıcıları ekleyebilirsiniz.

Grup Bilgisini Değiştirme



Grup bilgileri kullanıcı bilgileri gibi bazı araçlarla ya da yapılandırma dosyasının (/etc/group) elle düzeltilmesi ile değiştirilebilir. Hesapların değiştirilmesine oranla grupların değiştirilmesinde daha az seçenek bulunur ve araçlar ile yapılandırma dosyaları hesaplara benzer. usermod grupları düzenlemek için kullanılan araçlardan biridir.

groupmod ve usermod'u Kullanmak

groupmod komutu varolan grubun ayarlarının değiştirilmesinde kullanılır.

groupmod [-g GID [-o]] [-n yeni_grup_adı] eski_grup_adı

Grubun ismi değiştirilmek istendiğinde -n parametresi kullanılır. Gruplardaki değişiklikler için yapılacak çoğu iş groupmod ile yapılmaz onun yerine usermod ile yapılır. usermod -G parametresiyle gruba kullanıcı eklenmesini sağlar.

usermod -G grup1,grup2,grup3 tugce

Bu komut tugce kullanıcısını grup1,grup2 ve grup3 gruplarının üyesi yapar. Bu işlemi yaparken kullanıcının önceki gruplarınında bu komutta yer aldığına emin olun. Kullanıcının var olan gruplarını yazmazsanız kullanıcının o grup üyelikleri silinir. Bir kullanıcının hangi gruplara üye olduğunu görmek için groups kullanıcı_adı komutunu kullanabilirsiniz. Kullanıcıyı yanlışlıkla bir gruptan çıkarmamak için sistem yöneticileri genelde bu işlemi /etc/group dosyasını bir metin editöründe düzenleyerek ya da gpasswd kullanarak yapmayı tercih eder. İki seçenekte kullanıcının üye olduğu grupları listelemeden yeni gruplara üye yapmayı sağlar.

gpasswd'yi Kullanmak

gpasswd komutu passwd'nin gruplar için olan halidir. Ayrıca gpasswd komutu diğer komut seçeneklerini ayarlamanızı sağlar, gruba yönetici atamak gibi.

Kullanılma şekli: gpasswd seçenekler grup_adı

 -a, --add user
           Belirtilen gruba kullanıcı ekler

       -d, --delete user
           Belirtilen gruptan kullanıcı siler

       -r, --remove-password
           Belirtilen grubun parolasını siler.

       -R, --restrict
           Bu komut belirtilen gruba newgrp komutuyla üyelerin katılmasını engeller.

       -A, --administrators user,...
           Root kullanıcısı bu parametreyle grup yöneticilerini atayabilir. Grup yöneticileri gruba yeni kullanıcılar ekleyip var olan kullanıcıları çıkarabilir ve grup parolasını değiştirebilir. Bu parametreyi kullanmak önceki yöneticilerin listesini siler bu sebeple eğer yöneticileri olan bir gruba yeni bir yönetici daha eklemek istiyorsanız yönetici olmasını istediğiniz bütün kullanıcıların isimlerini yazmanız gerekir.

       -M, --members user,...
           -A gibi çalışır ama yöneticiler yerine belirtilen kullanıcıları gruba ekler.

Eğer grup adı dışında hiç parametre verilmeden kullanılırsa gpasswd grubun parolasını değiştirir. Grup parolaları bir gruptaki newgrp tarafından oluşturulabilinen geçici üyeliklerin kontrol edilmesini sağlar. Grubun üyesi olmayanlar eğer grubun bir parolası varsa newgrp komutu ile geçici üye olabilirler, newgrp bir parola sorar ve doğru girildiğinde kullanıcıya geçici üyelik sağlar.
Ne yazık ki burada bahsedilen bazı özellikler bazı dağıtımlar düzgünce uygulanmamaktadır. Özellikle grup üyesi olmayanlar doğru parolayı girseler bile sistem erişim engellendi hata mesajı verir. Ayrıca -R seçeneği bazen doğru çalışmaz, birincil grupları başka bir grup olan grup üyeleri newgrp ile birincil gruplarını değiştirebilir.

Grup Yapılandırma Dosyalarını Elle Değiştirmek

Grup bilgileri birincil olarak /etc/group un altında tutulur. Hesap yapılandırma dosyaları gibi /etc/group da belirli alanlara ayrılmış satır dizilerinden oluşur, her satır bir grubu işaret eder.

sambashare:x:124:tugce

Her alan : ile ayrılmıştır. İlk alan grup adıdır. İkinci alanda grup parolası bulunur. 3. alan grup ID'si son alanda gruba ait olan kullanıcıların isimleridir. Birden fazla kullanıcı varsa bunlar virgül ile ayrılırlar.

Grupları Silmek

Gruplar groupdel komutu ile silinir, bu komut tek bir parametre alır: grup adı. Ayrıca /etc/group dosyasını değiştirerek bir grubu silebilirsiniz. (eğer varsa /etc/gshadow dan da silmelisiniz) Genelde groupdel'i kullanmak daha iyidir çünkü groupdel silinen grubun herhangi bir kullanıcının birincil grubu olup olmadığını kontrol eder. Eğer grup bir kullanıcının birincil grubuysa groupdel bu grubu silmeyi reddeder, bu durumda bahsi geçen kullanıcının birincil grubunu değiştirmeli ya da kullanıcının hesabının silmeniz gerekir.
Kullanıcılar silindiğinde olduğu gibi grupların silinmesi de bazı dosyaları geride bırakır. Bunları find komutu ile bulabilirsiniz. find / -gid 1000 gibi. Bu dosyaları bulduğunuzda bunlarla ne yapacağınıza karar vermeniz gerekir. Bazı durumlarda bu dosyaları bırakmak ani sorunlara yol açmaz ama GID tekrar kullanılırsa karışıklığa ve güvenlik açıklarına neden olabilir. Bu yüzden bu dosyaları silmek ya da sahipliğini chown ya da chgrp komutuyla değiştirmek gerekir.

Perşembe, Aralık 19, 2013

X Pencere Sistemini Yapılandırmak

X Pencere Sistemini Yapılandırmak

Çoğu modern işletim sistemi grafik arayüzü sunar, bu arayüz pencereleri, menüleri, diyalog kutularını, ayarlanabilen yazı tiplerini ve bunun gibi şeyleri içerir. Linux'taki ana grafik arayüz X Pencere Sistemidir ve kısaca X denir. X yapılandırması duruma göre çok kolay ve çok zor olabilir. Çoğu Linux dağıtımı yükleme sırasında otomatik tanıma ve kolay yapılandırma seçenekleri sunar ama eğer kullandığınız dağıtımda böyle bir özellik yoksa ya da istediğiniz gibi değilse X yapılandırma dosyasında değişiklik yapmanız ya da bir arayüz yapılandırma aracı kullanmanız gerekebilir. Bunu yapmak için X'in video donanımlarına ve diğer şeylere nasıl davrandığını (bunları nasıl kullandığını ) bilmeniz gerekir.

Temel X yapılandırması dışında birkaç şeyden daha bahsedeceğiz. Bu yazı tiplerini, GUI login araçlarını, kullanıcı masaüstü ortamlarını, X'i uzaktan erişim için kullanmayı ve yerelleştirmeyi içerecek. Bu konuların hepsi X'in temel yapılandırma konularıyla yakından ilişkilidir.

X ekranı bir çeşit çıktı olarak düşünülebilir. (output) Bir diğer çıktı çeşidi yazdırmadır. (printing) Bu yazıda ondan da bahsedeceğiz. Düzgün şekilde yapılandırılmış bir yazıcıyla X ya da metin tabanlı arayüzlü uygulamalar yardımıyla oluşturup düzenlediğiniz belgelerin çıktısını alabilirsiniz.

Temel X Özelliklerini Yapılandırma

Temel X yapılandırmasıyla kullanılan fareyi, klavye düzenini, ekran çözünürlüğünü, video yenileme hızını (refresh rate), renk derinliğini görüntülemeyi ve kullanılan video kartını ayarlayabiliriz. Bu seçeneklerin bazıları X'e kullandığınız donanımı söylemenizi gerektirir, diğer seçeneklerse bu donanımların sunduğu özellikleri ayarlamanızı sağlar. Bunların hepsini yapmadan önce gerçek yapılandırmayı ayarlamadan önce Linux için bulunan X sunucularılarıyla ilgili bazı bilgiler edinmeniz gerekir, çünkü seçiminiz hangi araçları kullanabileceğinizi ve hangi dosyaları elle değiştirmeniz gerektiğini belirleyecektir. GUI ve metin-modlu yapılandırma araçları X'i yapılandırmanızı sağlayabilir ama bazen yapılandırma dosyalarını kullanmanız gerekecektir bu yüzden bu dosyaların biçimini bilmeniz önemlidir.

Linux için X Sunucu Seçenekleri

X Linux için en çok kullanılan GUI olsa da X'in birden fazla çeşidi bulunmaktadır.

XFree86: 2004'e kadar en çok kullanılan X sunucusu. Bu açık kaynak sunucu geniş yelpazede video kartlarını ve giriş aygıtlarını destekler ve çoğu Linux yazılımı XFree86 göze alınarak hazırlanmıştır. Şu an 4.x serisindedir ve 3.3.6 serisi ve onun öncesindekilerle 4.x serisi arasında bazı önemli farklılıklar bulunur. Bazı sürücülerden dolayı çok az sistemin XFree86 3.3.6 ve öncesini kullanması gerekebilir ama günümüzdeki çoğu sistem XFree63 4.x ya da X.org-X11 kullanmaktadır.

x.org-X11: 2004'den sonra çoğu Linux sistemi XFree86'den X.org-X11'e geçtiler. (XFree86'daki bazı lisans değişikliklerinden dolayı.) X.org-X11 6.7.0 XFree86'yı temel alıyordu ama günümüzdeki versiyonuna kadar bağımsız olarak geliştirilmiştir. X.org-X11 XFree86'yı temel alarak geliştirildiği için iki sistemde en önemli konularda birbirlerinin aynısıdır. Önemli bir farklılık yapılandırma dosyalarındaki isim farklılığıdır, diğeri de yazı tiplerinin bulunduğu varsayılan konumdur. Diğer değişikliklerden yazının devamında bahsedilecektir.

Accelerated-X: Xi-Graphics tarafından diğer açık kaynak sistemlere  alternatif olarak geliştirildi. Normalde bu sistemi kullanmak çok gerekli değildir ama video kartınızla ilgili sorununuz varsa Accelerated-X'i denemek isteyebilirsiniz.

X Yapılandırma Yöntemleri

X'i yapılandırmak zor bir süreçtir çünkü X yapılandırma dosyası bazı ilginç seçenekler içerir. Eğer bir yapılandırma aracı kullanırsanız bu iş kolaylaşır ve çoğu Linux dağıtımı yükleme aşamasında böyle bir araç çalıştırır. Eğer bu araç işinizi görmüyorsa (ya da yapmak istediklerinizin hepsini yapmıyorsa) X yapılandırma dosyasını elle değiştirmeniz gerekir.

X Yapılandırma Araçları

Bu araçlar kullanılan X versiyonuna göre çeşitlilik gösterir. XFree66'nın 3.3.6 versiyonu ve öncesindekiler ile sonraki versiyonları ve X.org-X11 için olan araçlar büyük farklılıklar gösterir.

XFree86 4.x ve X.org-X11 için Yapılandırma Araçları
Bunlar için birden fazla yapılandırma aracı bulunur:
X Sunucusunun kendisi
X sunucusunun kendisi donanımı sorgulama ve buna göre bir yapılandırma dosyası oluşturma yeteneğine sahiptir. Bunu yapmak için X sunucusu çalışmıyorken konsolda XFree86 -configure (XFree86 için) ya da Xorg -configure yazın.  Sonuç /root/XF86config.new ya da /root/xorg.config.new olmalıdır. Bu dosya  en uygun sonuçları üretmeyebilir ama en azından manuel değiştirmeler için bir başlangıç noktası sunar.
Dağıtım-tabanlı araçlar
Çoğu modern dağıtımlar kendi özel X yapılandırma araçlarını sunarlar. Red Hat (ve Fedora'da) Ekran Özellikleri aracı (Display Settings - varsayılan olarak masaüstündeki menüdedir ya da xterm'de system-config-display yazarak ulaşılabilir) ve SuSE için YaST ve YaST2 bulunur.
x86cfg ya da xorgcfg araçlar sadece XFree86 4.x ya da Xorg-X11 için çalışır. Bu araçlar önerilmiyor çünkü artık geliştirmeleri devam etmiyor ama eğer sisteminizde bu araçlar varsa X'i yapılandırmak için kullanılabilirler.
Bütün bu araçlar X'i elle değiştirmek için gerek bilgiyi sağlarlar.

XFree86 3.3.6 ve Öncesi için Yapılandırma Araçları
xf86config, Xconfigurator ve XF86Setup en yaygın olanlarıdır. Genel bir kural olarak Xconfigurator yeni bir sistemin ilk yapılandırması için iyi bir araçtır ve XF86Setup ise yapılandırma dosyasına dokunmadan varolan bir sistemin yapılandırmasını ayarlamak için iyidir. Ama XFree86 3.3.6 ve öncesini kullanmak zorunda olanlar için bu araçları bulmak zordur o yüzden x86config'i kullanmak ya da yapılandırma dosyasını elle değiştirmek zorunda kalabilirler.

X Yapılandırma Dosyasının Biçimi

Çalışan X sunucusna göre dosyanın adı ve konumu değişiklik gösterebilir.

X.org-X11 Bu sunucunun yapılandırma dosyası xorg.conf olarak adlandırılır ve genel olarak /etc/X11 ya da /etc nin altında bulunur.
XFree86 4.x Yapılandırma dosyasının adı XF86Config-4 ve konumu genelde /etc/X11'dir. Eğer bu dosya bulunmazsa XFree86 4.x /etc/X11 ya da /etc nin altında XF86Config isimli dosyayı arar. Bu dosyanın biçimi tamamen X.org-X11'in yapılandırma dosyasıyla aynıdır.
XFree 3.3.6 ve öncesi X yapılandırma dosyasının adı XF86Config'dir ve dosya genelde /etc/X11 ya da /etc dizininin altında bulunur.

Bütün bu üç yapılandırma dosyaları birçok satırdan oluşan bölümlerden oluşur, bu bölümler büyük bir özelliği içerir. Bölümler Section adı verilen ve tırnak içine alınan bir anahtar kelimeyle başlar ve EndSection anahtar kelimesiyle biter.

Section “InputDevice”
    Identifier “Keyboard0”
    Driver “kbd”
    Option “XkbModel” “pc105”
    Option “XkbLayout” “us”
    Option “AutoRepeat” “500 200”
EndSection

Bu Section X'e klavye ile ilgili özellikleri söyler; modeli, düzeni ve bunun gibi şeyleri. Çoğu zaman farklı X sunucuları aynı bölümleri ve özellik isimlerini destekler. Bunun birkaç istisnası bulunur.

1-Option anahtar-kelimesi XFree86 3.3.6 ve öncesinde kullanılmaz. Bunun yerine seçenek ismi (Xkblayout ya da AutoRepeat gibi) satır başında tırnak içinde olmadan yazılır.
2-XFree86 3.3.6 ve öncesi ServerLayout bölümünü kullanmaz.
3-XFree86 3.3.6 ve öncesinde Identifier ve Driver satırlarını içermez, bu satırlar XFree86 4.x ve X.org-X11'de yaygın olarak kullanılır.
4-Bazı bölüm-spesifik özellikler versiyonlar arası değişiklik gösterir.

X Yapılandır-Ve-Test-Et Döngüsü

Eğer X yapılandırmanız doğru çalışmıyorsa değiştirip bunu test etmeniz gerekir. Çoğu Linux dağıtımı açılışta X sunucunu çalıştırır ama X'i otomatik başlatmak yapılandırmayı test etmeyi zorlaştırabilir. Yeni Linux yöneticisi için değişiklikleri test etmenin tek yolu bilgisayarı yeniden başlatmak olacaktır.
Daha iyi bir yöntem sistemi X'in otomatik olarak başlamadığı bir moda almaktır. Red Hat, Fedora ve buna benzer dağıtımlarda kolayca telinit 3 komutuyla istenilen moda geçilebilir. Bu sistemi runlevel 3 şeklinde çalıştırması konusunda ayarlar, bu modda X sunucusu çalışmaz.

Debian, Ubuntu ve Gentoo runlevellleri X'i başlatıp başlatmama konusunda kullanmaz. Bu dağıtımlarda /etc/init.d/xdm stop komutuyla GUI login sunucusunu kapatmanız gerekir. (Yapılandırmanıza göre xdm'yi kdm ya da gdm ile değiştirmeniz gerekebilir.)

X oturumu kapandıktan sonra text-mode login ekranından X yapılandırmanızı elle düzenleyebilir ya da metin-tabanlı X yapılandırma programlarını kullanabilirsiniz. Sonrasında startx komutuyla X sunucusunu tekrar çalıştırabilirsiniz. Eğer istediğiniz sonucu aldıysanız X'i kapatıp telinit 5 ya da /etc/init.d/xdm start komutlarını kullanarak sistemi normal X login ekranına getirebilirsiniz. Eğer startx komutundan sonra istediğiniz sonucu almadıysanız X oturumunuzu kapatıp sistemi değiştirmeye devam edebilirsiniz.
X'i yeniden başlatmanın başka bir yolu da sistemi X'in çalışır olduğu runlevelde bırakıp sonra X sunucusunun sürecini öldürmektir. Ctrl+Alt+Backspace genelde iş görür ama bu işe yaramazsa ps aux | grep X komutuyla süreç pid'sini alarak kill pid komutuyla X'i konsoldan kapatabilirsiniz. Bu yöntem X'i runlevelden bağımsız çalıştıran dağıtımlar için daha iyidir.

X Yapılandırma Seçenekleri

X yapılandırma dosyasını değiştirirken en iyi yöntem çalışmayan özelliği belirlemek ve bu özelliği kontrol eden bölümü sıfırlamaktır. Sonra bu bölümü düzenleyip, değişiklikleri kaydedip, yeni yapılandırmanızı test edebilirsiniz. XFree86 4.x ve X.org-X11'de bulunan temel bölümlerden bahsedeceklerimiz Module, InputDevice, Monitor, Device, Screen ve ServerLayout'tur. Muhtemelen yapılandırmanızda iki tane InputDevice bulunacaktır, bunlardan birisi Keyboard (klavye) diğeri Mouse (Fare) dur. (XFree86 3.3.6 ve öncesinde fare Pointer adı verilen başka bir bölümde yapılandırılır.) Bölümlerin sıralaması önemli değildir.

Modülleri Yüklemek

Module bölümü X sunucu modüllerinin yüklenmesi işlemini kontrol eder -spesifik özellikler için sürücüler ya da donanım. 

Section  "Module"
    Load  "dbe"
    Load "extmod"
EndSection

Modül isimlerinin kontrol ettikleri özelliklere bakılarak bunların ne oldukları anlaşılabilir. Eğer X yapılandırması çalışıyorsa Module bölümünü düzenlememeniz gerekir, X yapılandırmasını değiştirecek olsanız bile. Bazen bazı satırları eklemeniz ya da çıkarmanız gerekebilir. (örneğin  3D yi aktive etmek için)

Klavyeyi Ayarlamak

Section “InputDevice”
Identifier “Keyboard0”
Driver “kbd”
Option “XkbModel” “pc105”
   Option “XkbLayout” “us”
   Option “AutoRepeat” “500 200”
EndSection

Identifier, ServerLayout için kullanılan bir etikettir. (XFree86 3.3.6 ve öncesinde bunlar yoktur) Driver satırı X'e klavye için hangi sürücüyü kullanacağını söyler. Klavyeniz çalıştığı sürece bu satırı değiştirmeyin.
Option satırları bazı seçenekleri ayarlamak için kullanılır; model, klavye düzeni, tekrarlama hızı gibi. Çoğu zaman varsayılan özellikler yeterlidir ama bazen AutoRepeat satırını düzenlemeniz ya da yoksa eklemeniz gerekir. Bu satır 2 tane sayı alır ve ikisi de milisaniye cinsindendir. İlk sayı (500) kadar sistem ilk tekrar için bekler ondan sonra her 200 milisaniyede tekrarlar. (Saniyede 5 defa)
Not: Çoğu masaüstü ortamı ve diğer kullanıcı-seviyesinde araçlar klavye tekrar hızını ayarlamak için işlevsellik sunarlar. X yapılandırma dosyasındaki değerler varsayılan değerlerdir ve kullanıcı ayarları tarafından değiştirilebilirler.

Fareyi Ayarlamak

İkinci bir InputDevice bölümü X'in fareye nasıl davrandığını belirler.

Section “InputDevice”
   Identifier “Mouse0”
   Driver “mouse”
   Option “Protocol” “IMPS/2”
   Option “Device” “/dev/input/mice”
   Option “Emulate3Buttons” “no”
   Option “ZAxisMapping” “4 5”
EndSection

Klavyede olduğu gibi Identifier satırı X'in ServerLayout'ta belirlenen hangi girdi cihazını kullanmasını söylemesi için bulunur. Option satırları fare kontrol seçeneklerini belirler. Bunlardan en önemlileri Device ve Protocol satırlarıdır. Device  X'e hangi Linux aygıt dosyasının fareye ulaşmak için okunması gerektiğini söyler. Bu örnekte /dev/input/mice dosyasıdır ama /dev/mouse (gerçek fare dosyasına işaret eden dosya), /dev/psaux (PS/2 fare portu için), /dev/usb/usbmouse (USB fareler için önceden kullanılan işaretçi), /dev/ttys0 (ikinci RS-232 seri port faresi) gibi seçeneklerde kullanılabilir. Eğer fareniz çalışıyorsa bu satırı değiştirmeyin.
Protocol seçeneği X'e farenin çeşitli hareketlerinden ve butonlara basıldığı zaman hangi sinyalleri alması gerektiğini söyler. Yeni tür fareler için bu IMPS/2 ve ExplorerPS/2'dir ve bunlar pratikte birbirine çok benzerdir. (PS/2 hem donanım arayüzü hem de yazılım protokolüdür. PS/2 fare protokolünü kullanan çoğu USB farenin PS/2 fare portunu kullanmadığını unutmayın.) Eğer farenizde kaydırma tekeri varsa bu protokollerden birini kullanmanız gerekir. Eğer fareniz eskiyse PS/2, Microsoft ya da Logitech gibi daha eski protokolleri denemeniz gerekebilir. Auto protokolü X'in hangi protokolü kullanacağını kendisinin tahmin etmesi şeklinde çalışır ve genelde doğru çalışan bir seçenektir.

Monitörü Ayarlamak

X yapılandırmasında en çok yanlış yapılacak şeylerden birisi monitör ayarlarıdır. Bunlar Monitor bölümünde ayarlanır ve özellikle XFree86 3.3.6 ve önceki sürümlerde çok büyük bir bölüm oluşabilir. Kısaltılmış bir Monitor bölümü şöyle görünür:

Section “Monitor”
    Identifier “Monitor0”
    ModelName “VisionMaster Pro 450”
    HorizSync 27.0-115.0
    VertRefresh 50.0-160.0
    # My custom 1360x1024 mode
    Modeline “1360x1024” 197.8 \
            1360 1370 1480 1752 \
            1024 1031 1046 1072 -HSync -VSync
EndSection

Identifier ve ModelName özellikle yapılandırma dosyasını kontrol ederken size yardımcı olması için konulur bu yüzden neredeyse istediğiniz herhangi bir ismi verebilirsiniz. Bölümde aşağılara baktığınızda HorizSync ve VertRefresh satırlarını göreceksiniz, bunlar çok kritiktir ve monitörün yatay ve dikey doğrultuda kabul edebileceği video yenileme hızını kHz ve Hz cinslerinden tanımlar. Bunlar birlikte monitörün maksimum çözünürlüğünü ve yenileme hızını belirler.

Uyarı: Özellikle eski monitörlerde bu değerler rasgele bir şekilde atanmamalıdır. Monitörün desteklediğinden yüksek değerler yazılırsa bu monitöre zarar verebilir. Modern monitörler çok yüksek yenileme hızı sinyallerini göz ardı edebilirler.

Çözünürlüğü ayarlamak için X mode satırlarına bakar, bunlar Modeline seçeneği aracılığı ile belirtilirler.
XFree86 4.x ve X.org-X11 Data Display Channel (DDC) olarak bilinen bir özelliği destekler. Bu protokol monitörlerin kendi maksimum horizontal ve vertical yenileme hızlarını ve uygun mode satırlarını bilgisayara iletmesini sağlar. XFree86 -configure ya da Xorg -configure komutları bu bilgiyi  mode satırlarını oluşturmak için kullanırlar böylece her sistem başlangıcında sistem yatay ve dikey yenileme hızlarını alabilir. Bu sebeple Xfree86 4.x ve X.org-X11 sistemlerindeki Monitor bölümleri XFree86 3.3.x'dekinden daha kısadır.

Video Kartını Ayarlamak

Herhangi bir çözünürlükte maksimum yenileme hızını ayarlamanız için genelde en önemli faktör monitörünüzdür ama X veri monitöre direkt olarak değil video kartı aracılığı ile gönderir. Bu sebeple bu parçayı doğru yapılandırmanız önemlidir. Yanlış yapılandırılmış video kartı X'in başlamamasına sebep olabilir.

Sunucu ya da Sürücüyü Seçmek

XFree86 4.x ve X.org-X11 sürücü modüllerini ana X sunucusunun çalıştırılabilir dosyasından ayrı dosyalarda depolar. Sunucu hangi modülün gerekli olduğuna otomatik olarak karar veremez. Bunun yerine XF86Config ya da xorg.conf dosyası içinde bu bilgiyi vermeniz gerekir. Tam olarak bu Device bölümünde belirlenen bir sürücü modülüne karşılık gelir.

Driver "nv"

Bu satır sürücünün adını belirler. Sürücüler /usr/X11R6/lib/modules/drivers dizininde bulunur. Çoğu sürücünün dosya adı _drv.o ile biter ve eğer bu kısmı çıkarırsanız sürücü ismini elde edebilirsiniz. Örneğin nv_drv.o nv sürücüsüne karşılık gelir.

Kart Spesifik Seçenekleri Atamak

xorg.conf dosyasındaki Device bölümü spesifik X sunucuları ile ilgili çeşitli seçenekleri ayarlar.

Section “Device”
    Identifier “Videocard0”
    Driver  “nv”
    VendorName “nVidia”
    BoardName  “GeForce 6100”
    VideoRam  131072
EndSection

VideoRAM satırı çoğu kartlar için gereksizdir çünkü sürücü kartın içinde yüklü olan RAM miktarını tespit edebilir. Ama bazen kartın içindeki RAM miktarını belirtmeniz gerekebilir (kilobyte cinsinde). Örnekteki kart 128MB RAM yüklüdür.

Çözünürlüğü ve Renk Derinliğini Ayarlamak

Screen bölümü X'e kullanılan monitörler ve video kartları hakkında bilgi verir. XFree86 4.x ve X.org-X11 çoklu video kartı ve monitörü bir sistemde destekleyebilir hatta XFree86 3.3.6 ve öncesinde de birden fazla monitör ve video kartı tanımlayabilip yapılandırma dosyasındaki Screen bölümünü değiştirerek bunlar arasında geçiş yapabilirsiniz. Bu eğer yeni bir monitör ya da video kartı deniyorsanız kullanışlı olabilir. Screen bölümü şu şekilde görünür:

Section “Screen”
    Identifier “Screen0”
    Device  “Videocard0”
    Monitor  “Monitor0”
    DefaultDepth 24
    SubSection “Display”
        Depth  24
        Modes  “1024x768” “1024x600” “800x600” “640x480”
    EndSubSection
    SubSection “Display”
        Depth  8
        Modes  “1024x768” “800x600” “640x480”
    EndSubSection
EndSection

Device ve Monitor satırları, Device ve Monitor bölümlerinde bulunan Identifier'lara karşılık gelir. Screen bölümü bir ya da birden fazla Display alt bölümünü içerir, burada X'in kullanabileceği video kartları tanımlanır. Bu örnekte iki tane ekran oluşturulur. İlk olanı 24 bit renk derinliği ve 1024x768,
1024x600, 800x600 ve 640x480 video mod ayarlarından birisini kullanabiliyor. (Bu video mod seçenekleri Monitor bölümündeki mode satırlarına ya da standart mod satırlarına karşılık gelir.) İkinci kullanılabilir ekran 8 bit renk derinliğini kullanır ve sadece 1024x768, 800x600, 640x480 video modlarını destekler.
Display de alt bölümler arasında seçim yapmak için bir tane DefaultDepth satırı eklenir. (Bu satır XFree86 3.3.6 ve öncesinde DefaultColorDepth olarak adlandırılır.) Bu örnekte X başlatılırken diğer seçenekler tarafından değiştirilmemişse 24 bit görünümü kullanır.

Son olarak

XFree86 4.x ve X.org-X11, Xfree86 3.3.6 yapılandırma dosyasında olmayan bir bölüme ihtiyaç duyarlar: ServerLayout. Bu bölüm X yapılandırmasındaki diğer tüm bileşenleri birbirine bağlar.

Section “ServerLayout”
    Identifier      “single head configuration”
    Screen          “Screen0” 0 0
    InputDevice  “Mouse0” “CorePointer”
    InputDevice  “Keyboard0” “CoreKeyboard”
EndSection
Normalde bu bölüm bir Screen bölümü ve iki InputDevice bölümlerini tanımlar. Başka yapılandırmalarında olması mümkündür. Örneğin; XFree86 ve X.org-X11 birden fazla monitörün oluşturduğu çok başlı ekranları destekler. Bu yapılandırmalarda ServerLayout bölümü birden fazla Screen bölümü içerir.

X Ekran Bilgisini Görüntülemek

Bazen ekranınızın yapabileceklerini bilmek yardımcı olabilir çünkü ekranınız X tarafından yönetilir. Bu iş için olan araç xdpyinfo dur. xdpyinfo yazdığınızda konsolda, sonuç olarak kullanılan ekranla ilgili, X versiyon numarası, var olan bütün ekranların çözünürlük ve renk derinliği ve bunun gibi çeşitli bilgiler ekrana gelir. Buradaki çoğu bilgi oldukça tekniktir bu yüzden hepsini anlamayabilirsiniz. Komutu çalıştırıp sonucunu inceleyip neleri anladığınızı görmek yardımcı olabilir. Bu bilgiye ulaşmanız gerektiğinde nasıl ulaşacağınızı öğrenmiş olacaksınız. Daha teknik ayrıntı için -ext parametresini xdpyinfo ile kullanabilirsiniz. (Temel xdpyinfo -ext komutu yapılabilecek genişletmeleri gösterecektir.)
Belirli bir pencere ile ilgili detaylı teknik bilgiyi xwininfo komutu ile öğrenebilirsiniz. Temel kullanımda xwininfo yazdığınızda fare işaretçisini istediğiniz pencereye getirip tıklamanız yeterlidir. Sonuç tıkladığınız pencereyle ilgili veriler, boyutu, konumu, ID numarası gibi şeyler olacaktır. Ayrıca -id ya da -name seçenekleriyle hangi bilgiyi öğrenmek istediğinizi belirleyebilirsiniz ya da -root ile bütün ekranı kapsayabilirsiniz.

Perşembe, Ağustos 29, 2013

Chef Günlükleri (1) - Chef Nedir?

Bu sene stajımı sistem yönetimi üzerine yapıyorum. İlgilendiğim konu ise Chef. Baya sıkıntılar yaşatsa da Chef ile ilgili birçok şey öğrenmiş olduğumu fark etmek hoşuma gidiyor. Tabi öğrenecek daha çok şey var. Ama kendi bildiklerimi aktarmanın, hatta zamanı gelip unuttuğum bazı şeylere geri dönüp bakabilmenin önemli olduğunu düşünüyorum. O sebeple elimden geldiğince ve bildiğim kadarıyla Chef nedir, nasıl çalışır, nasıl kurulur, cookbook nedir gibi birçok şey yazacağım. Yanlış bir nokta gördüğünüzde bunu düzeltirseniz sevinirim. Sonuçta bende kendi çabamla öğreniyorum ve benim bir şeyi herhangi bir şekilde yapabilmiş olmam onun doğru bir yol olduğu anlamına gelmez. Şimdi gelelim Chef'in ne olduğuna.

Chef nedir? 

Chef Ruby ve Erlang ile yazılmış bir yapılandırma yönetim aracıdır diyor wikipedia. Sistem yapılandırmasını otomasyona bağlama görevini yerine getirir.

Peki bu neden çözülmesi gereken bir problem kapsamına girer?

  • Altyapı sürekli değişir, özellikle 'Bulut' sistemlerde
  • Farklı işletim sistemleri
  • Farklı markaların farklı donanımları
  • Yığındaki farklı uygulamalar

Chef ile tam olarak ne yapabilirsiniz?

  • Chef tarafından desteklenen sunucuları başlatıp/kapatabilirsiniz
  • Yeni sunucuların üzerine işletim sistemi kurabilirsiniz
  • Sunucuların üzerine uygulama kurabilirsiniz
  • Yeni uygulamanın ortamına uygun yapılandırılmasını sağlayabilirsiniz

Chef'in temel yapı taşları nelerdir?

  • Ortamlar (enviroment)
  • Nodelar
  • Cookbooklar
  • Tarifler (recipe)
  • Dosyalar/Şablonlar (files/templates)
  • Attributesler
  • Data Bagler
  • Arama
  • Ve daha fazlası
Bu resimden ne anlıyoruz?

  • Chef'te bir sürü katman bulunur: Enviroment, node, role, cookbook ...
  • Chef nodeları çevreler içinde gruplar.
  • Nodelar bir ya da birden fazla rolü içerir.
  • Rol bir ya da daha fazla sayıdaki cookbook'un birleşiminden oluşur.
  • Cookbooklar birden fazla tarif (recipe), şablon (template), dosyaların birleşiminden oluşur.

Chef'in 3 temel parçası avr diyebiliriz. Birisi chef-server diğeri node'ları yöneten chef-client sonuncusu ise sistem yöneticisinin bunları yönettiği workstation.
Chef bileşenlerinin birbiriyle ilişkisi

Resimden açıkça görüldüğü gibi cookbookları ya da ayarları workstationda düzenleyip knife aracılığı ile chef sunucusuna gönderiyoruz. Chef istemcisi ise belirlenen çalışma zamanlarında sunucudan yapılandırma bilgilerini alıp bunları nodelar üzerinde uyguluyor.

Knife nedir?

Workstationdan sunucuyla ilişki kurmaya yarayan bir komut satırı aracı kendisi. Knife kullanıcıların nodeları, cookbookları, rolleri, çevreleri, data bagleri gibi şeyleri kontrol edebilmesini sağlar.

Bir sonraki yazıda chef-server ve chef-client kurulumları ile nodeları tanımlamayı yazacağım. Bu benim en zorlandığım yerdi diyebilirim. Hala tam kavradığımdan emin olamıyorum doğrusu.

Son olarak Chef öğrenmek için bazı linkleri paylaşayım her ne kadar google'a yazıldığında çıkacak ilk linkler olsa da.

1. http://docs.opscode.com/ Resmi dökümantasyon. Kurulum açısından çok yardımcı olmadı doğrusu ama sorun çözme kısmını sevdim.

2. http://learnchef.getharvest.com/introduction.html Bu yazıyı yazmak için kullandığım kaynaklardan biri.

3. http://webchat.freenode.net/?channel=chef IRC #chef kanalı.

Perşembe, Ağustos 22, 2013

Chef Authenticate Hatası ve Çözümü

Stajda chef ile uğraşıyorum. Chef'in ne olduğunu bir ara anlatırım ama şu an chef'te karşılaştığım bir sorunu nasıl çözdüğümü anlatacağım. chef-client komutunu her girdiğimde şöyle bir hata alıyordum.

Authentication Error:
---------------------
Failed to authenticate to the chef server (http 401).



Server Response:
----------------
Failed to authenticate as 'node adı'. Ensure that your node_name and client key are correct.


Relevant Config Settings:
-------------------------
chef_server_url   "url var burada"
node_name         "node adı"
client_key        "/etc/chef/client.pem"

If these settings are correct, your client_key may be invalid.

Bu hata beni baya uğraştırdı doğrusu. Sorunun çözümü opscode'un sitesinde varmış. Aslında hata raporu da çok açık bir şekilde hatayı söylüyor. Bütün ayarlar doğruysa client._key yanlış pampa diyor. Ama ben inatla "o yanlış olamaz başka bi yerde yamukluk var" diye başka ayarları kurcalıyordum. Gerçekten de client.pem yanlış olduğu için authenticate denilen olay gerçekleşmiyormuş. Bunu düzeltmek için

knife node delete node adı
knife client delet client adı
rm /etc/chef/client.pem

ile bunları çıkarıp chef-client komutunu çalıştırıyoruz. Bu doğru client.pem dosyasını otomatik olarak /etc/chef konumunun altına yerleştiriyor.

Hata raporlarını okumak gerçekten çok önemli. Sonra hata raporu gözünün önünde dururken "ya ama bu neden çalışmıyor :((((" durumuna düşmezsiniz.

Salı, Ağustos 13, 2013

Gnome - Ekranın Kilitlenmemesi Sorunu

Merhabalar

Staja başladığım gün aldığım bilgisayarda ekranı bir türlü kilitleyemiyordum. Çalışma ortamında (hatta herhangi bir yerde) bilgisayarınızdan ekranı kilitlemeden uzaklaşırsanız bütün ofise baklava ısmarlamak, sosyal medya hesaplarınızda bir şeyler paylaşılmak gibi yan etkilerle karşılaşabilirsiniz. O sebeple ekranı kilitlemem önemliydi. Hemen internette soruna baktım. Benim için şöyle basit bir adımda çözüldü.

gsettings set org.gnome.desktop.lockdown disable-lock-screen 'false'

Ayarlarda ekran kilitlemenin devredışı bırakılmasını 'false' yapmak gerekiyormuş yani. Ekranı kilitleyebilmek için lazım olan en önemli şey ise gnome-screensaver. Eğer bu kurulu değilse üstteki komutu çalıştıramazsınız. Onu kurmak için;

sudo apt-get install gnome-screensaver

Ekranı kilitlemek için  CTRL+ALT+L tuş kombinasyonunu kullanabilirsiniz. Bir kenarda durmasının bir zararı yok bu konunun herhalde. :)

Perşembe, Mayıs 02, 2013

GRUB Görüntüleme Sorunu

Eski bilgisayarımda sadece Ubuntu kullandığım için (en azından ben öyle olduğunu düşünüyorum) açılışta GRUB ekranı gelmiyordu. Bu benim için sorun olmanın ötesinde iyi bir şeydi kerneller arası geçiş yapmam gerekene kadar. grub.cfg dosyasını düzenleyeyim falan dedim her şey yolundaydı. Sonra google'a en kaba tabirler "Haci i can't see grub, what will i do?" dedim kendisi sağolsun beni hiç kırmaz hemen yanıtı gösterdi.

/etc/default/grub da

GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true

olan kısmı


GRUB_HIDDEN_TIMEOUT=10
GRUB_HIDDEN_TIMEOUT_QUIET=false

şu şekilde değiştirmek gerekiyor. Beni en başta ya neden açılmıyor ama bu diye üzmüştü, kolay bir çözümü olduğu için affettik kendisini.

Bu çözüm için root olmanız gerek ayrıca.

Perşembe, Nisan 18, 2013

Linux'ta Temel Ağ Yapılandırması - 1

LPIC sertifikası konuları dahilinde çalıştığımızı söylemiştim önceden. Ben geçtiğimiz haftalarda Linux'ta Temel Ağ Yapılandırmasını anlattım. Bu konuyla ilgili bir özet çıkarmıştım kitaptan, onu buradan paylaşmamın iyi olabileceğini düşündüm. Öncelikle bu konuyu anlatmak için seçmemin sebebi Linux'la yaşadığım en büyük sorunun genelde ağa bağlanmayla ilgili olması ve eğer bu konuyu anlatırsam ağ ile ilgili bana anlatılandan daha çok şey öğrenebileceğimdi. Öyle olduğunuda düşünüyorum. Kimler ne sorabilir düşüncesiyle daha dikkatli oluyor insan konu anlatacakken. Gerçi ilk defa topluluk önünde böyle bir konu anlattığımdan anlatmaya başlarken her şeyi unuttum diyebilirim. En azından özeti paylaşıp anlatırken atlamış olduğum ya da tam anlatamadığım bir yer varsa ona çare olur diye umuyorum.

Linux'ta Temel Ağ Yapılandırması

Çoğu Linux sistemi istemci ya da sunucu olarak (genelde her ikisi birden) bir ağa bağlıdır. Bu sebeğle Linux'un temel ağ yapılandırma araçlarını öğrenmemiz Linux'u tam anlamıyla yapılandırabilmek için oldukça önemlidir. Öncelikle temel modern ağların yapısını anlamamız - ağ adresleri ve ağlarda sıklıkla kullanılan araçları - gerekmektedir. Bunları öğrendikten sonra Linux'ta bilgisayar adresi, routing ve dns konularını uygulayabiliriz. Ne yazık ki, ağ yapılandırması bazen ters gider, bu sebeple sorunları çözecek araç ve yöntemleri öğrenmek işimizin bir parçası olacaktır.

TCP/IP Ağlarını Anlamak

Ağ birbiri üzerine kurulmuş birkaç parçadan oluşur. Bu ağ donanımını, veri paketlerini ve veri aktarımı için protokolleri içerir. Bu parçalar birlikte ağ yığını denilen birimi oluşturur. Günümüzdeki en yaygın yığın Transmission Control Protocol / Internet Protocol (TCP/IP) dür ama bu varolan tek yığın değildir. Fakat TCP/IP nin temellerini anlamak ağları yapılandırma ve yönetmede yardımcı olacaktır.

Ağ Donanımının Temel Fonksiyonlarını Öğrenmek

Ağ donanımları birden fazla bilgisayarın birbirleriyle iletişim kurması için tasarlanmıştır. Genelde iletişim için kablolar kullanılsa da artık kablosuz bağlantılar daha sık kullanılmaya başlanmıştır.

Ağ Donanımının Türünü Araştırmak

Linux yaygın bazı ağ donanımlarını destekler. En yaygın olanı Ethernettir. Başka donanımlarda mevcuttur ama bunlar Ethernet'e göre pek yaygın sayılmazlar. Bunlara örnek olarak TokenRing, LocalTalk, Fiber Distributed Data Interface (FDDI), High-Performance Parallel Interface (HIPPI) ve FibreChannel verilebilir.

Wireless Ethernet'in baskınlığına karşı çıkan bir ağ türüdür. Yaygın wireless protokolleri 801.11a (54 Mbps), 802.11b (11 Mbps), 802.11g (54 Mbps) ve 802.11n (300 Mbps) dir. Bunların farkları hızlarında yatar. 802.11a dışında hepsi birbiriyle uyumludur fakat hangisi en yavaş çalışıyorsa onun hızında çalışır.

Uyarı: Eğer kablosuz ağ kullanıyorsanız, verileriniz radyo dalgaları aracılığıyla iletilir ve bu sebeple kolayca araya girilebilir. Bu sebeple kablosuz ağlar sıklıkla şifreleme standartlarını kullanır. WEP artık kolayca kırılabilmektedir bu sebeple WPA ya da daha iyisi WPA2 şifrelemeyi aktif hale getirmeyi unutmayın.

Bilgisayardaki ağ donanımı dışında bilgisayarın dışında da bir donanıma ihtiyç duyarsınız. Bu merkezi cihazlar hub ya da switch olarak bilinir. Hub ve switch arasında birkaç fark bulunur. Öncelikle hub bir bilgisayardan aldığı veriyi kendisine bağlı olan bütün bilgisayarlara ayırt etmeden yollarken switch hangi verinin hangi bilgisayara gideceğini bilir ve veriyi ona göre yönlendirir. Ayrıca hubda bir bilgisayar veri gönderirken diğeri beklemek zorundadır switchde ise aynı anda birden çok bilgisayar veri alışverişi yapabilir. Burada hub telsizlere ve switch telefonlara benzetilebilir.

Ağ Paketlerini Anlamak

Modern ağlar verileri paket denilen birimlere ayırırlar. Örneğin 100kb bir veri yollamak istersek bilgisayarımız bu veriyi 1kb parçalara ayırarak yollar. Bu şekilde aktarımda bir sıkıntı olursa sadece hatalı olan paket tekrar yollanır.

Ağ Protokol Yığınlarını Anlamak

Ağ verisini soyut olarak birkaç seviyede düşünebiliriz. Örneğin bir seviyede ağ bir veri paketini Ethernet gibi özelleşmiş bir ağ türü için taşıyor olabilir. Bir protokol yığını veriyi soyut olan birkaç katman arasında dönüştüren ve saklayan bir yazılım setidir. Örneğin, yığın bir e-mail transfer protokolünün komutlarıyla alıp bu taşınan e-mail mesajlarını Ethernet çerçevelerine uygun olarak tekrar paketleyebilir. Bu şekilde aynı yığın yapısını kullanan e-mail istemcileri arasında değişiklik yapmak zor olmaz.

TCP/IP yığını şu anda en sık kullanılan yığındır. Gönderen sistemin her bileşeninin katmanı alıcı sistemdeki katmanla eşleşmelidir ama bunlar kesinlikle birbirinin aynısı olmak zorunda değildir. Ethernet ve TokenRing gibi tümüyle farklı iki ağ donanımı kullanılıyor olsa bile sistem bunlar arasında dönüşümü yapar. Bilgisayarlar farklı işletim sistemleri üzerinde çalışıyor olabilir ve bu sebeple farklı ama mantıksal olarak benzer protokol yığınları kullanır. Linux ve İnternet TCP/IP üzerinde tasarlanmıştır. (Daha doğrusu Linux tasarlanmış, İnternet TCP/IP yapısı üzerine inşaa edilmiştir.) TCP/IP dışında da yığınlar mevcuttur; NetBEUI, AppleTalk, IPX/SPX. Linux NetBEUI dışındakileri destekler.

TCP/IP Protokol Çeşitlerini Öğrenmek

 TCP/IP içinde de çeşitli protokol çeşitleri mevcuttur. TCP/IP de katmanlar  Application --> Transport --> İnternet --> Link şeklindedir, oklar alınan cevapta ters yöne işler.

IP  İnternet Protokolü TCP/IP nin çekirdek protokolüdür. Katmanlardan internet katmanına karşılık gelir. IP paketlerin bilgisayarlar arasında transferini en iyi şekilde sağlamaya çalışır. Paketler yanlış ya da hatalı iletişmiş olabilir. TCP/IP bununla da ilgilenmelidir. IP ayrıca TCP/IP de IP adresleriyle bağlı olan kısımdır.

ICMP  The Internet Control Message Protocol veri aktarımındaki basit bir protokoldür. Genelde bilgisayarlar arası hata mesajlarının iletiminde kullanılır. ICMP teknik olarak bir internet-katman prtokolüdür ve IP protokolüne dayanır.ICMP paketleri sizin isteğinize göre yaratılmaz, gerekirse bilgisayar tarafından arka planda oluşturulacaktır. Bunun tek istisnası ping dir.

UDP  The User Datagram Protocol transport-katmanındaki en basit TCP/IP protokolüdür.Yanlış gönderilen paketlerle ilgilenmez, iletim garantisi vermez buna rağmen daha hızlıdır.UDP üzerine inşaa edilmiş yaygın application-katmanı protokolleri DNS, NFSdir.

TCP  The Transmission Control Protocol TCP/IP de kullanılan en yaygın transport-katman protokolüdür. UDP'nin aksine hata kontrolü yapar, bu hızda yavaşlamaya sebep olur.

TCP/IP nin isminin böyle olmasının sebebi TCP ve IP protokollerinin çok önemli olmasından kaynaklanır.

Ağ Adreslemesini Anlamak

Bir bilgisayarın diğeriyle ağ üzerinden haberleşebilmesi için bilgisayarlar birbirlerini işaret edebilmek için bir yola ihtiyaç duyarlar. Bunun yapabilmenin temelinde birkaç değişik form bulunur ve bunları ağ adresleri sağlar. Örneğin, uzaktaki bir bilgisayardaki belirli bir programı adreslemek için port numaraları kullanılır.

Ağ Adreslerini Kullanmak

Ağı anlamak için üç çeşit adres önemlidir. Bunlar ağ donanım adresi,sayısal IP adresleri ve metin tabanlı host isimleridir.

Donanım Adresleri

Bütün ağ donanımları Media Access Control (MAC) olarak bilinen eşsiz donanım adreslerine sahiptir. Donanım adresinizi ifconfig komutu yardımıyla görebilirsiniz.

tugce@tugce:~$ ifconfig
eth0     Link encap:Ethernet  HWaddr 00:A0:CC:24:BA:02

Buradaki HWaddr bizim MAC adresimizdir. Peki bu ne işe yarar? Örneğin network switchleri veri paketlerini doğru bilgisayara yönlendirmek için kullanırlar bu adresi.

IP Adreslerini Yönetmek

Ipv4 adres uzayı 4 milyar adresi destekliyordu yeni gelen IPv6 ise çok daha fazlasını desteklemekte. IPv4 adresleri 32 bitten oluşmaktadır.

4 byte IPv4 adresi ile (ya da 16 byte IPv6 adresi) matematiksel olarak 6 byte Ethernet adresi ile bağlantılı değildir. Bu sebeple Address Resolution Protocol (ARP) IPv4 için, Neighbor Discovery Protocol (NDP) IPv6 için kullanılır.

IP adresi ifconfig komutu yardımıyla öğrenilebilir.

tugce@tugce:~$ ifconfig
          inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0

Buradaki inet addr bizim IP adresimize karşılık gelir.IP adresleri 0-255 arasında değişen 4 bloktan meydana gelir. IP adresleri yerel ağda ve internette kullanılmak üzere iki şekildedir. Bunun amacı yönlendiricilerin işini kolaylaştırmaktır. IPv6 benzer şekilde çalışır ancak boyutu daha büyüktür.

          inet6 addr: fe80::20d:f0ff:fe7d:9b70/64

16lık düzende bulunan 8 bloktan oluşur.

Alt ağ maskesi TCP/IP'de iki cihaz aynı ağda olup olmadıklarını IP adresinin ilk birkaç basamağına bakarak anlarlar. Bu basamağa Alt ağ maskesi denir. Örneğin alt ağ maskesi 255.255.255.0 olan bir makinenin IP adresinin ilk 3 bölümü aynı olan başka bir makineyle aynı ağdadır. Bu durumda 192.168.0.1 ile 192.168.1.1 adreslerine sahip olan iki makine aynı ağda değildir. Bu maskeler genelde 255 ya da 0 değerlerini alır. 255 ağ byte ını 0 bilgisayar byte ını işaret eder.


Geleneksel olarak IPv4 adresleri sınıflara bölünmüştür. Bu birkaç özel durum haricinde geçerlidir. Örneğin, 127.x.y.z loopback (localhost) için ayrılmıştır. A,B,C sınıfları genel ağ için kullanılır, D sınıfı multicasting için (birden fazla bilgisayardan aynı anda veri transferi için) ve E sınıfı gelecekte lazım olur belki diye ayrılmıştır.

A Sınıfı 1.0.0.0 - 127.255.255.255 arasındadır 10.0.0.0 - 10.255.255.255 olan kısmı ayrılmıştır.

B sınıfı 128.0.0.0 - 191.255.255.255 arasındadır 172.16.0.0 - 172.31.255.255 olan kısmı ayrılmıştır.

C Sınıfı 192.0.0.0 - 223.255.255.255 arasındadır 192.168.0.0 - 192.168.255.255 olan kısmı ayrılmıştır.

D Sınıfı 224.0.0.0 - 239.255.255.255 arasındadır.

E Sınıfı 240.0.0.0 - 255.255.255.255 arasındadır.

IPv4 adresleri yönlendirmeyi kolaylaştırmak için tasarlanmıştır ancak İnternet çok geliştiği için artık kısıtlayıcı bir hale geldiler.

Hostname

IP adresleri gibi host isimleri makine isimleri ve domain isimleri olarak iki grup şeklindedir. İlki belirli bir makineye işaret ederken diğeri bir bilgisayar grubuna işaret eder.

İnternet domainleri (alan adları) hiyerarşik olarak yapılandırılmıştır. En üst seviyedekiler .com, .edu gibidir. Bunlar çeşitli ülke ya da oluşumlara işaret eder. Örneğin .tr Türkiye içindir, .edu ise eğitim kurumlarına işaret eder. Bunlara subdomainler eşlik eder. Bu subdomainler kendi altında da ayrılabilir.

Hostname Çözümlemek

The Domain Name System (DNS) IP adresleri ile host isimleri arasında dönüşümleri yapar. Bazen DNS bilgisine manuel olarak bakmanız gerekebilir. Bazı programlar bu kontrolleri yapmaya yardımcı olur.

nslookup  Bu program DNS aramalarında yardımcı olur. Çeşitli sorguları gerçekleştirebileceğiniz bir interaktif mod sunar. Bu program artık geliştirilmemektedir bu sebeple nslookup yerine host ya da dig kullanmayı alışkanlık haline getirmelisiniz.

host Bu nslookup ın daha basit hali gibi davranır. En basit senaryoda host target.name şeklinde bir komut kullanabilirsiniz. (target.name arama yapmak istediğiniz hostname ya da IP adresi olabilir.)

tugce@tugce:~$ host www.google.com
www.google.com has address 173.194.40.80
www.google.com has address 173.194.40.83
www.google.com has address 173.194.40.82
www.google.com has address 173.194.40.81
www.google.com has address 173.194.40.84
www.google.com has IPv6 address 2a00:1450:400a:805::1012

host un man sayfasına bakarak komutla ilgili daha detaylı bilgi öğrenebilirsiniz.

dig host'tan daha karmaşık DNS arama işlemi yapar. host'a göre daha esnektir.

whois domain üzerine bilgi verir.

Linux normalde DNS'den önce /etc/hosts dosyasının içinde arama gerçekleştirir. Bu davranışı değiştirmek için /etc/nsswitch.conf dosyasındaki hosts satırını düzenlemeniz gerekir. /etc/hosts dosyasına ek olarak /etc/networks dosyası bulunur fakat bu dosya ağ adresleriyle ilgilidir.

Network Portları

Belirli bir bilgisayara bağlanmak önemlidir anca uzaktaki bir sistemde bulunan belirli bir program bilinmelidir. Örneğin bir web tarayıcısı kullandığınızı düşünelim. Web sunucusu kendisi dışında sunucuları çalıştırıyor olabilir (FTP sunucusu ya da e-mail sunucusu gibi) IP adresinden öte hangi programa yönlendirme yapılacağı bilinmelidir. Bu network port numarasıdır.

Başlangıçta sunucular kendilerini belirli port numaralarıyla eşleştirirler. Örneğin Web sunucusu 80. portu kullanırken FTP sunucusu 21. portu kullanır. Port numaralarından önemli olanlar bilinmelidir, bütün liste şurada bulunabilir. FTP 21, SSH 22, Telnet 23, SMTP 25, DNS 53, HTTP 80. portu kullanır.

Bazen port numaralarıyla ilgili işler yapma ihtiyacı duyabilirsiniz, bunun için /etc/services dosyasını düzenlemeniz gerekir.

Pazartesi, Mart 25, 2013

sudo apt-get update sorunu ve çözümü

Konsoldaki hata mesajı çıktılarını dikkatli bir şekilde okumamak büyük bir sıkıntı. Aylardır sürekli hata veren sudo apt-get update komutunda aşağıdaki hatayı alıp duruyordum, google'da aradığımda çıkan tüm yanıtları denedim ama nedense bir türlü sorunu çözememiştim. Bugün aklıma geldi tekrardan ve yeniden deneyip daha dikkatli bir şekilde arattım sorunu. Yanıtı çok basitti o sebeple "ben aylardır bunu çözemedim mi yani" diye bir sessizlik anı yaşamadım değil.

W: Failed to fetch cdrom://[Debian GNU/Linux 6.0.5 _Squeeze_ - Official Multi-architecture amd64/i386 NETINST #1 20120512-20:52]/dists/squeeze/main/binary-i386/Packages  Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update cannot be used to add new CD-ROMs

E: Some index files failed to download. They have been ignored, or old ones used instead.




Görüldüğü gibi orada kocaman CD-ROM yazıyor, bense CD-ROM ne alaka diyerek hep atlıyordum. Sonuç olarak çözüm  şu şekilde oluyormuş

 
cd /etc/apt
sudo cp sources.list sources.list.old
gksu gedit sources.list


Burada içinde CD-ROM geçen satırı / satırları kaldırınca sorun çözülüyor. Benim gibi bakar-kör insanlar için hayat bazen çok zor olabiliyor.

Salı, Mart 19, 2013

GnomeOutreachProgramForWomen Başvuruları Başladı!

Merhabalar,
Gnome'un kadınlar için düzenlediği bu staj programını önceden bir yazımda paylaşmıştım. Bu programın yaz dönemi için başvurular başladı. 1 Mayıs başvurular için son gün. Program ile ilgili ayrıntılı bilgi burada.

Bence başvurma süreci bile insana çok fazla şey katıyor. Geçen sefer başvurduğumda son anda bir belgelendirme projesi için bir süre Gnome projesini başlatanlardan Federico Mena-Quintero ile çalışmıştım. O zaman Gnome'un belgelendirmelerini gözden geçirerek hem yeni şeyler öğrenmiş hem kullanıcı dostu belgelendirme için neler yapılabileceği üzerinde bir süre kafa patlatmıştım. Düşüncelerimden bazılarının hayata geçirilmeye başlanmasının güzel bir his olduğunu söylememe gerek var mı? :) Hatta mentorum benim 'analizlerim' (:P) üzerinde güncelleme yaptıklarını blogunda falan yazmıştı.

Ben haberi verdim kendimi vicdan azabından kurtarıyorum. Herkese başvuru sürecinde başarılar!

Cumartesi, Mart 09, 2013

Ders Günlükleri (1) - Kriptografi

Arada bir derslerde ne yaptığımızla ilgili bir şeyler yazayım diye düşünüyordum biraz önce, eğer böyle bir şeyler yazmaya başlayacaksam ilk Kriptografi dersiyle başlamalıyım diye düşündüm. Bir kere isme bakar mısınız, 'Kriptografi'. Ne kadar artistik değil mi? Resmen seç beni diye parlıyor ders seçimleri zamanında. İtiraf zamanı geldi. Aslında şu yazıyı sırf "Hocam gizli anahtarı nasıl karşıya iletiyoruz peki?" sorusu sebebiyle yazmak istedim. Bu konuya birazdan geleceğim.

Kriptografi dersinde şifreleme yöntemleri ve bu yöntemleri kırmanın mümkün olup olmayacağı ile ilgili şeyler görüyoruz diyebilirim. İlk hafta şifrelemenin nasıl başladığı, Sezar olsun, Arapların bulduğu harf/frekans analizi olsun gibi şeylerle başladık. Sonra sıra 300 yıl kırılamayan Vigenere şifresine geldi. Oradan İkinci Dünya Savaşı olsun Almanlar olsun Enigma dediğimiz müthiş makinalar olsun derse devam ettik. Ayrıca Tek Kullanımlık Şerit diye bilinen (One Time Pad) hiç  kırılamayan bir şifreleme yöntemini öğrendik. Şimdi hepsini burada detaylı anlatabilirim ama hepsinin vikipedi'de çok kapsamlı anlatımları olduğu için burayı boşuna doldurmak istemiyorum.O sebeple hepsinin vikipedi linkleri mevcut.

Derste simetrik (Gizli Anahtarlı Şifreleme) ve asimetrik Açık Anahtarlı Şifreleme) şifrelemelerin neler olduğunu öğrendik ve şu ana kadar sürekli simetrik şifreleme yöntemlerini işliyorduk. Simetrik şifreleme bir kutuyu kilitlediğin anahtarla aynı kutuyu açabilmen anlamına geliyor. Asimetrik şifreleme ise bir kutuyu bir anahtarla kilitleyebileceğin ama o kilitlediğin anahtarla o kutuyu açamadığın anlamına geliyor. Kutunun açılabilmesi için başka bir anahtar gerek. Simetrik şifreleme aslında oldukça başarılı bir yöntem fakat en büyük sorunu "kutuyu kilitleyen anahtarın aynı zamanda kutuyu açması" ve buna bağlı olarak anahtarı karşıya güvenli olarak iletmenin zor olması. Tabi biz ilk haftalarda sürekli anahtarı nasıl karşıya ileteceğiz diye düşünürken sınıfın kafasına bu kazınmış oldu.

Eğer bir dersi bir an için dinlemiyorsanız ve sonradan aklınıza bir soru geldiyse olabilecek en büyük sorun başkasının sorduğu soruyu tekrar sorma ihtimalidir bana göre. Geçtiğimiz günlerde bir asimetrik şifreleme yöntemi olan RSA'yı işlerken gizli anahtarı karşıya iletmemize gerek yok denmesine rağmen derste 3 defa "Peki hocam gizli anahtarı karşıya nasıl ileteceğiz?" diye sorulunca biraz garip oluyor elbette. Özellikle dersin içinde 2 defa sorulup dersin sonunda "sorusu olan var mı?" kısmına gelinince tekrar sorulması çok süper oldu :)

Bunu diyorum da bende böyle şeyler yapmıyor muyum sanki, gayet tabi yapıyorum. Ben bir şeyi hızlıca sonuca ulaştırmayı severim o sebeple arada bazı değişkenleri hesaba katmayı sık sık unuturum. Bu bana hızlı cevap avantajı kazandırsada dikkatsizlik ettiğim durumlarda cevabımın yanlış olması gibi bir dezavantaj oluşturuyor. Geçtiğimiz derste açık anahtarlı şifreleme yöntemlerinden olan Diffie-Hellman yöntemini gördük. Oldukça parlak bir fikir ve simetrik şifrelemedeki anahtar iletme sorunu için müthiş bir çözüm. Tabi bu yöntem ikiden fazla kişide kullanıldığında anahtar hesaplama işinin adımı artması gerekiyor. Fakat derste oturduk Emre'yle 1 defa hesaplansa yeterli olur mu yoksa herkes için hesaplanmalı mı diye düşünmeye. Ben 1 defa hesaplanırsa ikili ikili kullanılabilir olduğunu söyledim. (Emre bana öyle olmasının mantıksız olduğunu anlatmaya çalışıyordu ama ben bir süre direttim kendi fikrimde.) Ama benim bu düşüncemin toplu bir grup için kullanılabilirliği pek iyi olmuyordu. Sonunda benim yanlış düşündüğümü Necdet hoca ikiden fazla kişinin nasıl kullandığını anlatırken açıklamış oldu.

Bugün ne kadar çok blog yazasım geldi böyle. :P

LPI 101 Sınavı

Geçtiğimiz yazıda LPI sınavı ile ilgili bir yazı yazacağımdan bahsetmiştim ama bir türlü yazamamıştım. Dün sınav sonucumu öğrendiğime göre bi yazıda çifte mutluluk şeklinde ekonomik bir yazı çıkarabilir ortaya gibime geldi.

Ayrıntılı bilgiyi lpi.org adresinden (Türkçe olarak lpi-turkey.com adresinden) bulabileceğiniz gibi kısaca Linux Proffesional Institute tarafından verilen Linux Sistem Yönetimi sertifikalarından ilki için olan iki sınavın ilkine girdik geçtiğimiz günlerde. (Çok iyi anlattım çok güzel anlattım, tamam mı.) Bu sertifikaların dünya çapında geçerliliği olduğu gibi, sınavlarda sorulacak soruların uzman kişiler tarafından hazırlanmış soru havuzundan seçilmiş olması ve Linux sistem yönetimi ile ilgili bilinmesi gereken konularda en temel konular için bir kaynak oluşturması açısından çok iyi olduğunu düşünüyorum.

Sınava girmeden önce sınava girecek olan arkadaşlarla okulda konuları birbirimize anlatma yoluyla tekrar çalışmayı uygun bulduk. Gerçi ben bu çalışmaların son ikisini yakalayabildim ancak ama benim için çok yararlı oldu. Sınav sonuçları dün açıklandı ve geçtiğimi öğrendim. Geçtiğimi öğrendiğim ilk bir saat boyunca o kadar mutluydum ki kendim bile bu duruma şaşırdım diyebilirim. Ayrıca sonuçlarda ayrıntılı bilgi olması hangi konularda daha zayıf olduğumu daha iyi görmemi sağladı. Sonuç olarak paket yönetimi konusuna çalışmam gerekiyor. :P

Mayıs ayı gibi LPI 102 sınavına gireceğiz kısmetse ve bu sınavda da başarılı olursak ilk sertifikamızı almaya hak kazanacağız. İkinci sınav ilkine göre çok daha zor ve kapsamlı olacak. Şimdiden çok çalışmak gerekiyor.

Pazartesi, Mart 04, 2013

Linux Çekirdeği Derledim!

This post also available in English.

Heyecanlı başlığıma bakıp aldanmayın sakın öyle çok aşırı harika bir iş yapmadım işin doğrusu. Uzun süreden beri sıfırdan Linux kurmak gibi bir düşüncem vardı. Sıfırdan Linux kurmak için ingilizce Linux From Scratch diye bir site var. Orayı kendime referans alıp ablamın eski bilgisayarını bu eğitim emellerim uğruna kullanacaktım. Uzun bir süre ertelemek durumunda kaldım bu işi. Çünkü bu uzun sürecek bir iş (en azından benim için) ve o sebeple boş zamanımın çok olduğu bir anı bekliyordum. Her ne kadar dünyanın en meşgul insanı olmasamda bir türlü bu işe başlamak için gereken boşluğu bulamadım. Ama en son olduğumuz Linux 101 sertifika sınavından sonra daha fazla beklemenin anlamsız olduğunu düşünmeye başladım. (Sertifika sınavı ile ilgili bir yazı yazacağım ayrıca.)

Dün akşam bu işe başlamadan önce ilk olarak bir kernel (çekirdek) derleyip nasıl olduğuna bakayım dedim. İnternette bununla ilgili kaynak bulmak zor olmadı. (Gerçi Türkçe NASIL kaynağı baya eskiydi ama ubuntu forumunda güzel anlatımlar vardı.) Önüme kendi bilgisayarımdan 2-3 tane İngilizce ve Türkçe kaynak açıp diğer bilgisayarda kernel derleme işlemine başladım. Bununla ilgili dediğim gibi kaynak bulmak zor değil ama yaptığım adımları not aldım. Onlardan kısaca bahsedebilirim.

Öncelikle konsolda root oldum. Kernel.org adresinden en son kernel sürümünün (3.8.1) linkini kopyalayarak konsoldan

wget link 

komutuyla kerneli /usr/src altına indirdim.

tar xvjf kernel.tar.bz2 

komutunu kullanarak dosyayı açtım. Açma işlemi 1-2 dakika sürdü diye hatırlıyorum. Sonra kernel için seçenekleri belirlemek için varolan 3 yoldan konsoldan yönetilebilen menüyü seçtim. Bunun için

make menuconfig 

komutunu kullandım. Tabi bu komutu kullanabilmek için ncurses kütüphanesinin bilgisayarınızda kurulu olması gerekiyor uyarısını alıp

apt-get install libncurses5-dev 

paketini kurdum. Sonra menuconfig aracılığıyla kernelde yapabileceğim düzenlemelere baktım. O kadar çok seçenek var ki açıkçası anladıklarım %5-6 kadardı. Baya bir dolaştım menü içinde işlemci özelleştirmeleriyle oynadım biraz. Çok anlamadığım için fazla değişiklik yapamadım ne yazık ki. Sonra kerneli derlemek için

make-kpkg clean 

make-kpkg kernel-image kernel_headers --initrd 

komutlarını kullandım. Bunların kullanılabilmesi için kernel-package ın kurulu olması gerekiyor. Derleme işlemi en az 20 dakika sürer diye okumuştum ama bende o kadar uzun sürdü ki bir şeyleri yanlış yaptım herhalde diye şüphelenmedim değil. En son bilgisayarı kendi haline bırakıp uyumayı düşünüyordum, uyumadan önce kitap okurken kafamı kaldırdığımda ne görsem beğenirsiniz. Derleme bitmiş, konsol öylece beni bekliyor işime devam edeyim diye.

dpkg -i header image 

şeklinde kerneli kurduktan sonra bilgisayarı yeniden başlatıp yeni kernel ile kullanmaya başladım. İşlemlerde yanlışlık olmadığını görmek için

cat /proc/version
uname -r 

komutlarıyla kernel versiyonumun 3.8.1 olduğunu doğruladım. Wireless kartımın bilgisayar tarafından tanınmadığını fark ettiğimdeyse saat çok geç olmuştu. ifconfig ve ifconfig -a ile kontrol ettim ama malesef kablosuz görünmüyordu. O sebeple az önce

sudo apt-get purge linux-image-3.8.1* 

komutuyla yeni kerneli kaldırdım ve bilgisayarı yeniden başlatarak eski kernelime dönüş yaptım.