Sistem yöneticilerinin en çok sorduğu sorulardan biri, dosyalar üzerinde okuma yazma gibi denetimlerin nasıl kontrol edilebileceği,kritik öneme sahip dosyaları kimin değiştirdiği, üzerinde kimlerin işlem yaptığının bilinmesi ve takip edilmesidir.
Bunun cevabı Modern Linux sistemlerle birlikte gelen “auditd daemon” ile çözüme kavuşmuştur.Görevi diske denetim kurallarını yazmaktır.Başlangıç esnasında /etc/audit.rules
içerisinde bulunan kurallar ‘auditd daemon’ tarafınan okunur. /etc/auditd.rules dosyasını açıp üzerindeki denetim kurallarını değiştirmek,log kayıtlarını yönetmek gibi değişiklikler yapılabilir.Kurulum yapıldıktan sonra varsayılan olarak gelen ayarlar başlangıç için yeterli olacaktır.
Denetimi kolaylaştırmak amacıyla servise ait aşağıdaki hizmetlerin bilinmesinde fayda olacaktır.
>> auditctl : Çekirdeğin denetim sistemini kontrol etmek için yardımcı olacak bir komuttur.Bu komut ile kural eklenip silinebilir ya da durum bilgisi alınabilir.
>> ausearch : Olay tabanlı ya da farklı arama kriterlerine göre log tabanlı sorgulama yapmak için kullanılabilir.
>> aureport : Denetim loglarının raporlarını özetlemek için kullanılan bir araçtır.
audit paketinin kurulması
Birçok Linux çekirdeği audit rpm paketni içerir. audit paketini yüklemek için komut satırından ‘yum’ ya da ‘apt-get install’ komutları kullanılabilir.
[root@bga ~]# yum install audit Loaded plugins: fastestmirror, refresh-packagekit, security |
auditd servisini başlangıçta otomatik olarak için aşağıdaki komut kullanılabilir.
[root@bga ~]# ntsysv |
Servisi başlatmak için aşağıdaki komut çalıştırılmalıdır.
[root@bga ~]# /etc/init.d/auditd start |
Dosyaların izlenebilmesi için servisin ayarlanması
Bunu örnek bir komutla açıklamak gerekirse, /etc/passwd dosyasının denetlenmesi için aşağıdaki gibi örnek bir komut kullanılabilir.
[root@bga ~]# auditctl -w /etc/passwd -p war -k password-file |
Bu komut için kullanılan parametrelerin anlamı şu şekildedir.
- -w /etc/passwd : İzlenenecek olan dosyanın yolu (path)
- -p war : İzlenecek olan dosya için izinleri belirler. ‘w’ yazmak için, ‘a’ ekleme yapmak için, ‘r’ ise okumak içindir.
- -k password-file : İzlenecek olan dosya için filtreler(filterkey) ayarlamak için kullanılır.Bu komut için password-file bir filterkey’dir.
Bu komut ile /etc/passwd dosyası üzerindeki okuma,yazma ve ekleme işlemleri izlenebilir.(sistem çağrıları dahil)
Şimdi aşağıdaki komutları sistem üzerinde yetkisiz bir kullanıcı ile çalıştıralım ve biraz bekleyelim.
[root@bga ~]# grep 'root' /etc/passwd [root@bga ~]# nano /etc/passwd |
Dosya Sistemi audit Kuralı
/etc/shadow dosyası üzerindeki okuma,yazma,çalıştırma ve ekleme değişikliklerini kayıt altına almak için ‘shadow-file’ filtresi ile aşağıdaki komut kullanılabilir.
[root@bga ~]# auditctl -w /etc/shadow -k shadow-file -p rwxa |
syscall audit kuralı
Aşağıdaki kural syscall çıkışlarının izlenmesini önler.
[root@bga ~]# auditctl -a exit,never -S mount |
pid kullanarak syscall audit kuralı
Aşağıdaki komutta olduğu gibi ‘pid’ değerine göre kural yazılabilir.
[root@bga ~]# auditctl -a entry,always -S all -F pid=1005 |
Peki /etc/passwd dosyasına kimin eriştiğini ya da dosya üzerinde kimin değişikik yaptığı nasıl öğrenilir ?
Bunun için ausearch komutu kullanılır.Örnek kullanım komutları aşağıdaki gibidir.
[root@bga ~]# ausearch -f /etc/passwd [root@bga ~]# ausearch -f /etc/passwd | less [root@bga ~]# ausearch -f /etc/passwd -i | less |
- -f /etc/passwd : Sadece bu dosya üzerinde aramaya yapar.
- -i : Metin içindeki sayısal girdileri yorumlar.uid değerini hesap ismine dönüştürür.
Örnek bir çıktı aşağıdaki gibi olacaktır.
type=PATH msg=audit(04/18/2014 23:58:00.631:5249) : item=0 name=/etc/passwd inode=653834 dev=fd:00 mode=file,644 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL type=CWD msg=audit(04/18/2014 23:58:00.631:5249) : cwd=/root type=SYSCALL msg=audit(04/18/2014 23:58:00.631:5249) : arch=x86_64 syscall=open success=yes exit=4 a0=7fe34326969a a1=80000 a2=1b6 a3=0 items=1 ppid=21315 pid=21324 auid=cihat uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=775 comm=ausearch exe=/sbin/ausearch subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=password-file |
Peki bu çıktı nasıl yorumlanmalıdır ?
- audit(04/18/2014 23:58:00.631:5249): Log kaydının zamanı
- uid=root gid=root : Kullanıcı id değerinin sayısal formatıdır. -i parametresi ile sayısal değer hesap ismine dönüştürülebilir.Bu şekilde okunması ve yorumlanması daha kolay olacaktır.
- comm=ausearch exe= Dosyaya erişmek için kullanılan komutu gösterir.
Log dosyasından da anlaşılacağı üzere, hangi kullanıcının dosya üzerinde grep ile okuma yaptığı ya da bir metin editörü ile dosya üzerinde yazma işlemi gerçekleştirdiği açıkca görülmektedir.
Bu şekilde kullanmak bir log yığını oluşturacağından komuta ait man sayfası okunarak daha anlaşılır formatta loglar üretilebilir.
Log kayıtlarını incelerken daha spesifik aramalar yapmak mümkündür.Örneğin belirli bi tarihe ait log kaydına bakmak ya da bugünün log kayıtlarını çıkarmak için aşağıdaki gibi komutlar kullanılabilir.
[root@bga ~]# ausearch -ts today -k password-file [root@bga ~]# ausearch -ts 3/12/07 -k password-file |
Bir diğer arama şekli ise -x parametresi ile çalıştırılan komuta göre arama yapmaktır. Örneğin hangi kullanıcının ‘rm’ komutunu kullanarak /etc/passwd dosyasına erişmeye çalıştığını görmek için aşağıdaki gibi bir komut kullanılabilir.
[root@bga ~]# ausearch -ts today -k password-file -x rm [root@bga ~]# ausearch -ts 3/12/07 -k password-file -x rm |
Kullanıcı id değerine göre arama yapmak için ise aşağıdaki gibi bir komut kullanılabilir.
[root@bga ~]# ausearch -ts today -k password-file -x rm -ui 500 [root@bga ~]# ausearch -ts 3/12/07 -k password-file -x rm -ui 500 |
Bu yazı Linux AKADEMİ blog sayfasından alınmıştır http://www.linuxakademi.com.tr/linux-audit-derinlemesine-sistem-denetimi/