15 Nisan 2014

Unix Denetimi

Unix Temelleri


          Shell
          Dosya Sistemi (File system organization)
          Process
          AĞ Servisleri (Network services)
          Kullanıcı Yönetimi (User management)
          Görev Zamanlayıcı (Job scheduling)
          Loglama (Logging)


Shell

Shell (Kabuk),bir işletim sistemi yönetim arayüzüdür.Sıradan kullanıcılar ve Sistem Yöneticileri için geliştirilmiştir.Üzerinde çalıştırılabilen komutlar ve yazılan Script’ler sayesinde  Unix ve benzeri sistemlerin yönetimi sağlanmaktadır.mkdir,touch,fdisk,rm,chmod shell üzerinde çalışan bazı komutlardır.

Dosya Sistemi

Unix sistemlerde dosya sistemi farklılık gösterse de,temel olarak Windows ve Linux işletim sistemlerindeki dosya sistemlerine benzer.Unix denetimi yapılırken,denetçinin dosya erişim hakları ve diğer unsurlara dikkat etmesi gereklidir.Unix sistem üzerinde bulunan dosya yapılarını biraz daha yakından inceleyelim;
/ (root) : Kök dizin anlamına gelmektedir.Diğer tüm dizinler bu dizin altında yer almaktadırlar.

/bin : İşletim sistemini kontrol etmek için kullanılan komutlar bu dizin altında tanımlıdır.cat,mkdir,ls,rm temel komutlar burada bulunurlar.Sistem boot edildiğin ilk olarak bu dizin aktif hale gelecektir.

/boot : Boot işlemi sırasında gerekli olan bileşenleri içeren dizindir.

/dev : Sisteminizde bulunan donanımlar bu dizin altında tutulurlar.

/etc : Sisteminiz için gerekli olan tüm yapılandırma dosyaları bu dizin ve içerisindeki alt dizinlerde tutulmaktadır.Yapılandırma dosyasına örnek olarak  /etc/resolv.conf dosyasını verebiliriz.Bu dosya içerisinde sisteminizin DNS ayarları tutulmaktadır.

/home : Bu dizin altında sistemdeki her bir kullanıcı için tanımlanan alt klasörler bulunmaktadır.Örneğin;”test ” isimli bir kullanıcı tanımlanırsa,/home/test adında kendine ait bir klasörü olacaktır.Fakat bu kullanıcının yetkileri /home klasörü ile sınırlı olacaktır.

/lib : Kernel ile ilgili bazı modülleri ve paylaşılan kütüphane dosyalarını içeren dizindir. Bahsedilen kütüphane dosyalarıysa, sistemi başlatmak ve /bin ile /sbin içerisindeki komutları çalıştırmak için gereklidir.

/mnt : Dosya sistemi ve donanım aygıtlarını sisteme mount etmek için kullanılan dizindir.

/proc : Sistem durumunu kontrol etmek için kullanılan bazı sanal dosyalar içeren dizindir.

/root :Root kullanıcısı sisteme tanımlandığında diğer kullanıcılar gibi kendi klasörü /home dizini altından tutulmaz.Direk olarak kendine ait olan /root dizini altında tutulur.

/sbin :Root kullanıcısının sistemi yönetmesini sağlayan komutları içeren dizindir.

/var : Log dosyaları, e-mail ve printer kuyrukları gibi değişken sistem bilgileri içeren dizindir.

/tmp :Geçici dosyalar için kullanılan bir dizindir.Bu dizin programlar tarafından geçici depolama alanı olarak kullanılır.İşletim sistemi yeniden başlatıldığında bu dizin içerisindeki bilgiler silinecektir.

/usr : Paylaşılabilir dosyaların bulunduğu dizindir. Bu dizin içersinde çalışabilir dosyaların bulunduğu dizinlerin yanısıra , dokümanlar ve programların kullandığı dosyalar bulunmaktadır.

Dosya-Dizin Yapıları ve Yetkiler



Yukarıdaki resmi referans alarak Unix üzerindeki dosya izinlerini ve diğer parametreleri inceleyelim;
Sol tarafta kalan 10 bitlik blok dosya türünü ve bu dosya türünün izinlerini içermektedir.Bu 10 bitlik bloğun ilk biti dosya türünü içermektedir.Diğer alanlar sırasıyla dosya linklerini,dosya sahibini,dosya sahibinin bulunduğu grubu,dosyanın boyutunu,son değiştirilme tarihini ve ismini gösterir.Unix sistemlerde kullanılan dosya türlerini şöyle açılayabiliriz.

  • “d” directory anlamına gelen parametredir.Bir klasör olduğunu belirtir.
  • “l” link anlamına gelen parametredir.Burada bir link (kısayol) olduğunu belirtir.
  • “-“ sıradan dosyaları belirtmektedir.Örnek resimdeki gibi bir .txt dosyası bu parametre ile belirtilir.
  • “b” block anlamına gelen parametredir.Sistemdeki disklerinizi belirtir.
  • “c” character file anlamına gelen parametredir.Yazıcı gibi çevresel aygıtları belirtilir.


Dosya türünü belirten bitden sonra  gelen 9 bitlik blok dosya üzerindeki izinleri göstermektedir.Bu izinler 3 bitlik bloklar halinde ayrılırlar.İlk 3 bit dosya sahibinin bu dosya üzerindeki yetkilerini.ikinci 3 bit dosya sahibi ile aynı grup içerisindeki kullanıcıların yetkilerini.Son 3 bit ise diğer kullanıcıların dosya üzerindeki yetkilerini göstermektedir.

Dosya üzerindeki yetkiler;“r (read)” okuma yetkisi ,“w (write)” yazma yetkisi,“x (execute)” çalıştırma yetkisidir.Örneğin , unix2 klasörünün yetkilerini incelersek;

Dosyanın sahibi olan kullanıcı “r”,”w”,”x” yani okuma,yazma ve çalıştırma yetkilerinin tamamına sahiptir.
Dosyanın sahibi ile aynı grupta olan kullanıcılar “r”,”x” yani okuma ve çalıştırma yetkilerine sahiptir.
Diğer kullanıcılar  tarafını kontrol edersek “r”,”x” yani Grup kullanıcıları gibi okuma ve çalıştırma yetkilerine sahiptir.

Dosyalar üzerinde yetkileri belirlemek için “chmod” komutu kullanılmaktadır.Komutun kullanımı şu şekildedir:

  • Komut kullanımı sırasında kullanıcılar u (User),g (Group),o (Owner) olarak tanımlanmaktadır.
  • “chmod  u+x,g+x,o+x  dosya_ismi”  bu komut ile tüm kullanıcı türllerine dosyayı çalıştırma yetkisi verilmiştir.Eğer burada olduğu gibi tüm kullanıcılara aynı yetkiyi verecekseniz “chmod +x dosya_ismi “ komutu da kullanılabilir.
  • Eğer yetki kısıtlamasına yapılamak isteniyorsa  komut “chmod u-x,g-x,o-x dosya_ismi” şeklinde değiştirlebilir.

Dosya ve Klasör Yönetimi

Bu bölümde shell üzerinde tanımlanmış dosya ve klasörlerin yönetimi ile ilgili komutları kısaca değineceğiz.

  • “pwd” komutu çalıştığınız mevcut dizini gösterir
  • “ls” komutu ile bulunduğunuz dizindeki tüm dosya ve klasörleri görüntüleyebilirsiniz.”-l” parametresi ile daha detaylı listeleme yapılabilir.”-F” parametresi ile dosya tipini görüntüleyebilirsiniz.”ls –l” komutu kullanıldığında gizli dosyalar görüntülenmeyecektir.
  • ”ls –al”  komutu ile gizli dosyları da görüntüleyebilirsiniz.(“.” ile başlayan dosyalar ve klasörler gizli olanları ifade etmektedir. )
  • “cd” komutu ile bulunduğunuz dizini değiştirebilirsiniz.Örneğin;”cd ..” komutu bir sizi bir üst dizine götürecektir.”cd /sbin/” komutu ile /sbin dizinine gidebilirsiniz.
  • “mkdir” komutu  ile klasör-dizin oluşturulur.”mkdir klasör_ismi
  • “touch” komutu ile dosya oluşturulur.”touch dosya_ismi
  • “cp” komutu ile kopyalamai,”mv” komutu ile taşıma işlemleri yapılabilir.
  • “rm” komutu ile dosya silinebilir.Klasörleri silmek için ise “rmdir” komutunun kullanılması gereklidir.Klasörün silinmesi için içerisinin boş olması gerekir .Hem klasörü hem içerisindeki tüm datayı silmek istiyorsanız  “rm -r” komutunu kullanmanız gerekmektedir.

Process

Unix sistemlerde arka planda çalışan her bir göreve verilen isimdir.Unix Sistemlerde process yönetimine Windows Sistemlere göre daha çok ihtiyaç vardır.Unix sistem üzerinde çalışan processleri “ps ” komutu ile görebilirsiniz.PID 1 olan “init” processi tüm sistemden sorumlu olan processtir.Bazı Unix sistemlerde (FreeBSD) sistemde çalışan tüm processleri görmek için bazı parametreler eklemek gerekebilir.Örneğin; “ps xu” komutu çalıştırıldığında sistemde çalışan processlerle ilgili aşağıdaki gibi detaylı bir çıktı alınabilir.
Bir process sonlandırabilmek için “kill” komutu kullanılır.Bir process iki şekilde sonlandırılabilir;

  • “kill syslogd” yazılarak process ismi ile sonlandırılabilir.
  • “kill 590” yazılarak process ID(PID) ile sonlandırılabilir.




Ağ Servisleri

Unix denetimleri sırasında, denetçi ,Ağ servislerinin konfigürasyonunu iyi anlamış olmalıdır.Ağ servislerinin yanlış yapılandırılması Unix sistemler üzerindeki en büyük tehditlerden  biri olarak kabul edilebilir.
Temel olarak IP konfigürasyonunuzu “ifconfig ” komutu ile görebilirsiniz.Aynı zamanda “/etc/rc.conf” dosyası altında da görüntüleyebilirsiniz. DNS kayıtlarınızı ise “/etc/resolv.conf” dosyası içerisinde görüntüleyebilirsiniz.Bahsettiğimiz iki dosyayı da herhangi bir text editör ile açıp içerisindeki bilgileri kendi network bilgilerimize uygun biçimde yapılandırabiliriz.
“ifconfig em0  192.168.2.10 netmask 255.255.255.0” komutu ile sisteminize IP adresini statik olarak verebilirsiniz.




Burada birkaç temel network servisinden bahsetmek gerekir,bunlar “getty” ve “inetd” servisleridir.

  • “getty” yapılandırma dosyaları içerisinde tanımlanan her bir terminal bağlantısı için“init” processi ile birlikte başlatılan servistir.Fiziksel ve sanal terminallerin kontrolünden sorumludur.”getty” bir bağlantı algıladığında,kullanıcı giriş bilgilerini kontrol eder  ve  kimlik doğrulamanın tamamlanması için “login” programını çalıştırır.
  • “inetd” (internet daemon) sistem boot edilirken aktif olan bir servistir.”inetd” network servisi tarafından belirlenen portları dinler.TCP veya UDP protokolü üzerinden portlara bir paket geldiğinde “inetd” servisi çalışarak bu paketin kontrolünü sağlar.”inetd” servisinin hangi programları ve portları dinlemesini istiyorsanız “/etc/inetd.conf” dosyası üzerine bu bilgilerin eklenmesi gereklidir.


Kullanıcı Yönetimi

Bir çok işletim sistemi gibi,Unix işletim sistemleri üzerinde de kullanıcı hesaplarının ve kimliklerinin kendi yönetim yolu vardır.Erişim kontrollerinin denetim altında tutulması gereken önemli konulardandır.Bu nedenle Unix  üzerinde kullanıcı yönetimini anlamak işinizi kolaylaştıracaktır.Unix sistem üzererinde kullanıcı yönetimi için kullanılan temel komutlar şunlardır:

  • “adduser” sisteme bir kullanıcı eklemek için kullanılır.
  • “rmuser” , “deluser” sistemde bulunan kullanıcıyı silmek için kullanılır.
  • “passwd” komutu kullanıcının şifre atamak için kullanılır.
  • “pw groupadd grup_adı” komutu ile sistem üzerinde istediğiniz grupları oluşturabilirsiniz.Bu grupları “/etc/group” dizininde görüntüleyebilirsiniz.
  • “pw groupdel grup_adı” komutu ile ihtiyacınız olmayan grupları sistemden kaldırabilirsiniz.


 Burada Unix üzerinde 2 önemli dosya bulunmaktadır.Bunlar ”/etc/master.passwd” (BSD için geçerli olan klasördür.Diğer Unix sistemlerde değişiklik gösterecektir.) ve “/etc/group”.
“/etc/master.passwd” dosyası ;kullanıcı ismi,hashlenmiş şifresi,bulunduğu grubun bilgisini(GID),kullnıcı ID bilgisini (UID),kullanıcının /home dizini gibi bilgileri içermektedir.
  • “/etc/group” dosyası ise sistemdeki grupları ve bu gruplara üye olan kullanıcıları gösteren dosyasıdır.



  • “/etc/group” dosyası ise sistemdeki grupları ve bu gruplara üye olan kullanıcıları gösteren dosyasıdır.


Görev Zamanlayıcı (Cron-Job Scheduling)

Zamanlanmış görevler çoğunlukla rutin olarak yapılması gereken sistem yönetimi ve IT operasyon görevlerinin belirli periyotlarla otomatik olarak gerçekleştiren işlemlerdir.Görevlerin sağlıklı tanımlanması ve izlenmesi Unix üzerinde otomatik olarak çalıştırılan işlemlerin takibi açısından önemlidir.Otomatik bir görev tanımlamak için “/etc/crontab” dosyası içerisine görevleri tanımlamak gerekir.

“0  3  *  *  *   root /usr/bin/netstat “ dosyaya eklenecek bu satırla netstat komutunun her 3 saate çalıştırılması sağlanmaktadır.Satırdaki alanları tek tek açıklayacak olursak sırasıyla;

  • Dakika (0 - 59)  
  • Saat (0 - 23)
  • Ayın hangi günü (1 - 31)
  • Ay (1 - 12)
  • Haftanın Günleri (0 - 7) (Pazar=0 veya 7)
  • Görevi çalıştıracak kullanıcı
  • Çalıştırılacak komut veya scriptin yolu ve adı


Loglama

Sistemleri  monitör etme,güvenlik takibi ve uyarıları için loglama önem teşkil etmektedir.Sistem üzerindeki hareketlerin takibini log dosyaları üzerinden yapabilirsiniz.
Bu dosyalar “/var/log” dizini altında tutulmaktadırlar.Örneğin;sisteme giriş yapan kullanıcı bilgilerini ve giriş loglarını “/var/log/auth.log”  dosyası içerisinde görüntüleyebiliriz.Syslog mesajları içerisinde detaylı zaman bilgisi,hostname bilgisi ve mesaj alanları olduğu için kritik bir durumda  kayıtlar kontrol edilerek önemli bilgiler edinilebilir.Birden fazla sisteminiz varsa bunların loglarını merkezi bir sistemde toplamak izleme açısından daha kolay olabilir.Bu işlem için “syslog-ng” veya “rsyslog” servisleri kullanılabilir.




Manual Sayfaları

Unix;“man” (manual) komutu,shell üzerinde çalıştırılan komutların,konfigürasyon dosyaları vb.  kullanımı ile ilgili yardım kılavuzlarına ulaşmanızı sağlar.Örneğin; “man pkg” komutu ile pkg komutunun parametreleri ve kullanımı ile ilgili yardım dosyasına ulaşabilirsiniz.

Diğer Bilinmesi Yararlı Olabilecek  Bilgiler

tar: Bu komut sistem üzerindeki dosyalarınızın yedeklerini almak ve geri döndürmek için kullanılır.Yedeklerinizi bir backup ünitesine veya bir optik diske alabilirsiniz.

dd: “dd” komutu teknik olarak bir yedekleme için kullanılmaz.Fakat denetleme işlemleri için diskin tam bir kopyasını (image) almak için kullanılabilir.

/etc/fstab/: Unix sistemlerde sisteme eklenen cihazlar sistem açılışında otomatik olarak mount edilmeyecektir.Bu nedenle örneğin sisteme yedekleme için eklediğimiz ikincil bir diski manual olarak /etc/fstab dosyası  altına eklememiz gerekmektedir.

  • “>” ,”>>”,”<”,”<<” komutları girdi ve çıktıların yönlendirilmesi için kullanılırlar.”>” komutu dosya içerisine bir girdi yollandığında diğerlerini ezecektir.Fakat “>>” komutu ile ikinci bir girdi olarak eklenebilir.
  • “Pipe” işareti bu işaretten önce girilen komutun desteklenmesini sağlar.Örneğin;”ls –l | more” komutu girildiğinde sıralanan parametreler sayfa sayfa gösterilecektir.
  • “grep” komutu ile bir çıktı içerisindeki spesifik bir bilgiyi elde edebiliriz.Örneğin;birden fazla prosesin çalıştığı bir sistemde ftp servisini görmek istiyorsak “ps –xu | grep ftp” komutu ile bunu sağlayabiliriz.

Unix Sistem Güvenliği Kontrolleri


Network Servisleri

Network servisleri üzerinde güvenliği sağlamanın en önemli yolu sistem üzerinde mümkün olduğunca az servis çalıştırmak ve kullanıcılar tarafından erişilen servislerin yetkilerinin iyi optimize edilmesidir.
Daha öncede bahsettiğimiz gibi sistem üzerindeki çalışan network servislerinin bir çoğunu “inetd” kontrol etmektedir.Fakat burada çalışan tüm servisler gerekli olmayabilir.Ayrıca Unix sistemler üzerinde “/etc/inetd.conf” ve “/etc/services” dosyaları altında servis tanımlayarak “inetd” içerisinde başlatılmalarını sağlayabiliriz.
Sistem üzerinde çalışan dışarıya bilgi sızdırabilecek olan finger ve rusers gibi servisler mutlaka kapatılmalıdır.
Finger:79.port üzerinde çalışan sistem üzerinde çalışan kullanıcılar hakkında bilgi veren bir servistir.Lokal veya uzak makinede çalışan kullanıcılar hakkında bilgi toplanabilir.
Rusers:Finger ile benzer görevde çalışmaktadır.Lokal sistemler üzerinden login olan kullanıcıları göstermektedir.
Eğer kurum için gerekli değilse şifresiz kanallardan iletişimden kaçınmak gereklidir.Telnet ,FTP gibi güvensiz protokoller yerine güvenli protokoller kullanılmalıdır (SSH,SFTP).
Uzaktan komut çalıştırılmasını sağlayan rlogin,rexec,rsh gibi servislerin mutlaka kapatılması gerekir.
Rlogin:TCP 513 portunda çalışan bir komuttur.Network üzerindeki sistemlere uzaktan bağlanmayı sağlamaktadır.Fakat Telnette olduğu gibi iletilen bilgileri şifrelemediği için tehlikeli bir servistir.
Rsh: TCP 514 portunu kullanan bir komuttur.Network üzerindeki bir sistemde farklı bir kullanıcı ile komut çalıştırarak yönetim yapmayı sağlar.Fakat rlogin gibi iletilen bilgiler şifrelenmediği için tehlikeli bir servistir.Hatta bazı durumlarda giriş esnasında parololar dahi şifrelenmeden iletilmektedir.
Rexec:Rsh ile aynı özelliiklere sahip olan servistir.TCP 512 portu üzerinde çalışmaktadır.Bu servis üzerinde de parola gibi kritik bilgiler şifrelenmeden gönderilmektedir.
NFS:Network File System sistem üzerindeki dosya ve klasörlerin aynı network içerisindeki diğer kullanıcılar ile paylaşılmasını sağlayan servistir.NFS üzerinden paylaşılan dosyaların erişim yetkileri kullanıcılara göre belirlenmeli ve yetksiz erişimlere dikkat edilmelidir.
NIS:Network Information System kullanıcı ve host adları gibi sistem konfigürasyonu bilgilerinin dağıtımını yapan sunucu-istemci rehberi hizmeti protokolüdür.Yeni sistemlerde yerini LDAP gibi protokoller almıştır.

Uzak Erişim kontrolleri

Uzak Erişim Unix sistemlere farklı bir Unix sistem üzerinden “r” servisleri ile bağlanmayı sağlar.Mümkün olduğunca bu servislerin kullanımından kaçınmak gereklidir.Uzak erişimleri kontrol etmek için Unix sistem üzerinde iki kritik dosya bulunmaktadır.Bunlar “/etc/hosts.equiv” ve kullanıcı home dizininde bulunan “.rhosts”dosyasıdır.Bu iki dosya sistem kaynaklarını uzaktan erişebilecek güvenilir kullanıcıları ve hostları belirtmektedir.Bu nedenle bu dosyalara erişim  sağlayan biri sistemin tümüne erişim sağlayabilir.Daha önce bahsettiğimiz rsh,rlogin gibi servisler bu açıklıkara örnek gösterilebilir.Ayrıca dosya içerisinde “+ +” karakterlerine dikkat etmek gereklidir.Bu karakterler herhangi bir host üzerinden herhangi bir kullanıcı adı ile sisteminize girişi mümkün kılmaktadır.

Kritik Dosya ve Komut Erişimleri

Sistem üzerindeki  kritik dosyaların ve program komutlarının erişiminlerinin yetkisiz  değişikliklere karşı kontrol altına alınması gerekmektedir.Kritik konfigürasyon dosyaları üzerindeki  okuma yetkisi dahi olsa sadece belirlenen gerekli kullanıcılar için verilmelidir.Özellikle “/etc/” dizini altında bulunan konfigürasyon dosyaları kritik dosyalardır ve erişim izinleri konusunda dikkat etmek gerekir.Ayrıca “/bin,/sbin,/dev,/user,/var”  dizinleri altındaki dosyalara verilen yazma izinlerine dikkat etmek gereklidir.
Unix sistem üzerinde kullanılan SUID (switch user id) dosya özelliği sayesinde sıradan bir kullanıcının kendisine ait olmayan programları kendisine atanmış haklardan fazla bir yetki ile çalıştırabilmesine imkan sağlamaktadır.Bu nedenle herkesin erişebildiği SUID dosyaları büyük bir risk oluşturmaktadırlar.Bu tür dosyalara örnek olarak “/usr/sbin/passwd” örnek olarak verilebilir.Sistem üzerindeki bir kullanıcı kendi şifresini “passwd ” komutu ile “root”yetkisine ihtiyacı olmadan değiştirebilmektedir.Burada yaptığımız değişiklik “root” kullanıcısının erişebildiği “/etc/master.passwd”  dosyası üzerindede uygulanmaktadır.Bu “/etc/master.passwd” altındaki değişimi yapabilmemizi SUID özelliği sağlamaktadır.Bu özelliğin gruplar üzerinde etkinleştirmesine  ise SGID olarak gösterilmektedir.

SUID yetkisi için dosya izinlerindeki SUID bitinin ektinleştirilmiş olması gereklidir.”passwd”  komutunun izinleride “x” yerine bulunan “s” biti SUID bitini ifade etmektedir.Eğer bazı dosya üzerinde bu izinler sizin için gereksiz görünüyorsa “chmod u-s” komutunu kullanarak SUID yetkisi etkisiz hale getirebilirsiniz.




Kritik dosyalara erişim kısıtlaması veya izinleri için ACL (Access Control List) tanımlanabilmektedir.Bu özellik sayesinde istediğimiz kullanıcıya özel erişim izinleri atayabiliriz.ACL tanımlamak için aşağıdaki komut kullanılmalıdır;

“setfacl –m u:kullanıcı_adı:rwx dosya_adı

Komutta görülen  “u” parametesi  yetki atamak istediğimiz kullanıcıyı ifade etmektedir.Kullanıcı adı girildikten sonra “:” koyulur ve yetki bitleri yazılır.Son olarak ise ACL tanımlamak istediğimiz dosya adı yazılır.Bu işlemi tanımlı gruplar için yapmak isterseniz “u” parametresi yerine “g” , kullanıcı adı yerine GID kullanmanız gereklidir.ACL tanımlanan bir dosyayının ayırt edilmesi için dosya yetki bitlerinin sonunda “+” işareti bulunur.

Süreç Takibi

Süreç takibi,sistem yöneticilerinin olayların takibini sağlaması açısından önemli bir güvenlik metodudur.Bu metod sayesinde sistem kaynaklarının kullanıcılar üzerindeki dağılımı ve minimal düzeyde kullanıcıların komutlarını takip etme şansı yaratılabilir.Bu metodun kullanımında pozitif ve negatif durumlar ortaya çıkabilir.Örneğin;Sistem sürekli takip altında olacağından saldırı tespiti kolaylaşacaktır.Bu durum bize pozitif bir etki yaratacaktır.Fakat sürekli log kaydı üreten bir sistem için fazlaca disk alanına ihtiyaç olması negatif bir durum olarak nitelendirilebilir.

Metodun aktif edilmesi için aşağıdaki komutlar takip edilmelidir;

  • touch /var/account/acct ; komutu ile acct adından bir dosya oluşturulur
  • chmod +rw /var/account/acct ; komutu ile oluşturulan dosyaya okuma ve yazma yetkisi verilir.
  • accton /var /account/acct ;komutu ile servis aktif hale getirilir. 




  •  Son olarak “/etc/rc.conf” dosyasını bir text editör yarıdmıyla açaraka “accounting_enabled=”YES”” satırını ekleyip kaydediyoruz.




Komutlar girilip,takip başladıktan sonra CPU ve komut istatistikleri takip altına alınmaya başlayacaktır.Fakat tüm loglar okunabilir durumda değildir.Bu durumda logları okuyabilmek için “sa” komutu kullanılarak loglar okunabilir.Spesifik bir kaç komuta örnek vermek gerekirse;

  • ac komutu kullanılarak sistem login olan kullanıcıların bağlı kalma sürelerini görebiliriz.Bu komuta “-d” parametresi eklenirse kayıtları günlük,”-p” parametresi eklenirse kayıtları herbir kullanıcı için ayrı ayrı gösterecektir.
  • sa komutu sisteme login olan kullanıcıların hangi komutları çalıştırdıklarını ve bu komutların sistem üzerinde ne kadar kaynak kullandığı hakkında bilgi verecektir.
  • lastcomm sistem üzerinde önceden çalıştırılmış olan komutları görüntülememizi sağlan komuttur.Bu komut ile kullanıcı adı veya görüntülenmek istenen komut kullanılarak arama yapılabilmektedir.


Sistem Kullanıcılıarı

Her bir Unix sistem üzerinde ön tanımlı olarak gelen kullanıcı isimleri mevcuttur.Daha öncede bahsettiğimiz gibi her kullanıcı için  kendisine ait bir UID (User ID) tanımlanmaktadır.Bu UID dosya erişim izinlerini kontrol altında tutmak için kullanılmaktadır.”root” kullanıcısına ait ID 0’dır ve tüm yetkilere sahiptir.Unix sistemin kendisi tarafından tanımlanan kullanıcıların ID’leri 100 rakamından küçüktürler.Bu kulanıcıllar “/etc/master.passwd” dizini altında görüntülenebilirler.



Buradaki önemli nokta sistem tarafından tanımlanan kullanıcıların tespit edilip pasif hale getirilmeleridir.Bunun için “/etc/master.passwd” dosyası altında o kullanıcıya ait olan şifre alanına “*” karateri girilmelidir.

Kimlik Doğrulama

Unix sistemler üzerinde sistemin belirlediği kimlik doğrulama kriterleri her zaman istediğimiz seviyede güvenlik sağlamayabilir.Her Unix sistemi için bu kriterler değişkenlik gösterir.Örneğin HP-UX üzerinden şifre politikası minimum 8 karakter olarak uygulanırken FreeBSD üzerinde varsayılan olarak bir sınırlama yoktur.Bu durum sistem üzerinde ciddi güvenlik açıkları yaratabilir.
Sistem üzerinde bu tür güvenlik açıklarına engel olmak için uygun kimlik doğrulama politikaları tanımlamak gereklidir.FreeBSD sistemler için bu tür ayarlar “/etc/login.conf” dosyası içerisinde yapılmaktadır.Default olarak tanımlanan politikalar aşağıdaki gibidir;





Burada görüldüğü gibi tanımlanan herhangi bir varsayılan kullanıcı için tüm alanlar “unlimited” olarak tanımlanmıştır.Bu dosya içerisine bir çok farklı tanımlama yapılabilir.root kullanıcısının politikasında bulunan “tc:” alanı default kısımda tanımlanan politikaların root kullanıcısı içinde geçerli olacağını gösterir.Kimlik doğrulama ve kullanıcılarla ilgili yapılabilecek birkaç politikaysa aşağıdaki gibi sıralanabilir;

  • minimumpasswordlen:Şifrenizin minimum kaç karakter olacağını belirten alandır.Belirlediğiniz uzunluğu sayı olarak tanımlamanız gereklidir.
  • mixpasswordcase:Şifrenizi küçük büyük harf duyarlı olmasını sağlayan alandır.”True” olarak tanımlanmalıdır.
  • idletime:Kullanıcının login olduktan sonra  bekleme süresini belirten alandır.Kullanıcı 30 dakika boyunca işlem yapmadığında sistemden düşmesini istiyorsak bu alana “30” yazılmalıdır.
  • passwordtime:Kullanıcıların şifrelerini ne kadar sürede yenilemeleri gerektiğini belirten alandır.Kullanıcıların şifrelerini ayda bir kere değiştirmesini sağlamak için bu alana “30d” yazılmalıdır.


Kapasite ve Sistem Performans  Takibi

Her Unix sistem üzerinde Sistem performans takibini sağlamak için komutlar bulunmaktadır.Belirli periyotlarla bu komutlar kullanılarak sistem kontrol edilmeli gereksiz ve zararlı olabilecek bileşenler incelenmedir.Genel amaçlı kullanılan komutlara örnek olarak;

·         Top:Sistem üzerindeki tüm işlemlerini özetini veren komuttur.İşlemci,Memory ve çalışan Processler hakkında bilgi edinilebilir.





·         du:Disk Usage  komutu sistem üzerindeki disk kullanımını gösteren komuttur.”-h “ parametresini komuta eklersek daha anlaşılır bir çıktı elde edebiliriz.

·         df:Df komutu sistem üzerindeki diskin ne kadar boş alanı kaldığını gösteren komuttur. “-h “ parametresini komuta eklersek daha anlaşılır bir çıktı elde edebiliriz.


·         ps:Daha öncede bahsettiğimiz gibi Ps komutu ile sistem üzerinde çalışan Process durumları kontrol edilebilir.

·         iostat:Bu komut ile NFS ve diskler üzerindeki Giriş-Çıkış  ve İşlemci istatistiklerine ulaşabilirsiniz.


Güvenlik Kontrolleri ile İlgili İpuçları

Sistem üzerinden dinlenen portların kontrolü için netstat ve sockstat komutları kullanılabilir.

“netstat –a” komutu ile sistemde çalışan aktif portları görüntüleyebilirsiniz.Komuta eklenen  “-a” parametresi sayesinde tüm aktif bağlantıları ve bilgisayarın dinlediği TCP ve UDP portlarını görüntüleyebilirsiniz.
“sockstat” komutu ile aktif portların hangi programlar tarafından kullanıldığını görüntüleyebilirsiniz.”sockstat -4” IPv4 protokolü üzerinde çalışan “sockstat -6” ise IPv6 protokolü kullanan programları gösterecektir.

icmp_drop_redirect=”YES”
icmp_log_redirect=”YES”

Kullanıcı parolarınızın farklı bir hash metoduyla  saklamak isterseniz daha önce bahsettiğimiz “/etc/login.conf” dosyası içerisindeki  “passwd_format” satırında değişiklik yapmanız gerekecektir.Varsayılan olarak “passwd_format:sha512” gelen hash yöntemini “passwd_format:blf” olarak değiştirirseniz Blowfish metodunu etkin hale getirirsiniz.Farklı hash metodları ile sistem üzerindeki kullanıcı şifrelerinize daha iyi bir koruma sağlayabilirsiniz.Bu işlemi tamamladıktan sonra mevcut veritabanını değişiklikleri uygulamak için “cap_mkdb /etc/login.conf” komutunu çalıştırınız.

Sisteminiz üzerinde NFS  sistemini kullanmıyorsanız Portmap pasif hale getirilmelidir.Bu işlem için “/etc/rc.conf” dosyası altına portmap_enable=”NO” satırını eklemeniz gerekir.

“/etc/rc.conf” dosyası altına log_in_vais=”YES” satırını eklerseniz kapalı portlara gelen saldırıların loglarını da takip edebilirsiniz.

Sisteminize terminal üzerinden herhangi bir erişim yapılmasını istemiyorsanız kontrol etmeniz gereken yer “/etc/ttys”  dosyasıdır.Burada tanımlanan ttvy0 ve ttvy8 aralığındaki tüm terminallerin secure başlığı insecure olarak değiştirilmelidir.

Sisteminize uzaktan bağlanmak istiyorsanız SSH servisini kullanabilirsiniz.Fakat SSH servisini varsayılan ayarları ile aktif etmemeniz gerekir.Öncelikle sisteme erişilirken root yetkili bir kullanıcı erişmemelidir.Bunun yerine sisteme erişebilecek bir grup oluşturulabilir.Varsayılan port yerine (22) farklı bir port kullanmanız daha faydalı olabilir.Ayrıca sistem üzerinde SSHv2 kullanmanız gereklidir.Bu konfigürasyonlar için “/etc/ssh/sshd_config” dosyası altına örnek olarak şu satırlar eklenebilir;


PermitRootLogin=no
AllowGroups  admin admin
RhostsAuthentication no
PasswordAuthentication yes
PermitEmptyPasswords no
Port 222
Protocol 2


Sisteminizde yüklü olan Unix paketlerinin açıklarını takip etmek için portaudit programı kullanılabilir.Portaudit programını kurulumu için şu komutlar izlenmeli;

cd /usr/ports/ports-mgmt/port-audit
make clean install

Komutlar çalıştırıldıktan sonra  portaduit günlük çalışması için /usr/local/etc/periodic/security/ dizini altına bir cronjob oluşturulur.Bu şekilde program günlük olarak çalışır ve bir veritabanı oluşturulur.


Portaudit programı ile denetim için “portaudit –Fda”  komutu kullanılabilir. –F parametresi güncel veritabanını indirmek için,-d parametresi  veritabanı oluşturma tarihini görüntülemek için,-a parametresi kurulu tüm paketleri kontrol için kullanılmaktadır.Tek bir paketi kontrol etmek isterseniz “portaudit paket_ismi” komutunu kullanabilirsiniz.