Bu yazıda, Linux’ta dosyaları kimin düzenlediğini nasıl öğreneceğinizi öğreneceksiniz. Linux, güvenlik denetimi için auditd (Audit arka plan programı) adı verilen kullanıcı alanı araçları sağlar. auditd, sistemde meydana gelen tüm değişiklikleri takip eder ve sistem güvenlik duruşu hakkında fikir edinmek için analiz edilebilecek günlükler oluşturur. Bu günlükler, belirli bir zamanda, kimin hangi dosyaları düzenlediğini bulmayı sağlar.
Linux’ta Dosyaları Kimin Düzenlediğini Bulma
Linux’ta kimin hangi dosyalarda değişiklik yaptığını bulmanın kolay bir yolu yoktur. Ancak, auditd bu süreci basit hale getirir. Peki, Linux’ta dosyaları kimin düzenlediğini nasıl öğrenebiliriz?
Linux’ta Denetim Paketlerinin Kurulumu
Bu yazıda, Denetim paketinin Linux’ta dosyaları kimin düzenlediğini bulmak ve nasıl kullanılabileceğini göstermek için Debian tabanlı ve RHEL tabanlı iki sistem kullanacağız.
Başlamak için Linux’ta denetim paketleri kurun.
RHEL tabanlı dağıtımda:
yum install audit -y
Debian tabanlı dağıtımlarda;
apt install auditd -y
User-space Araçları Denetimi
Denetim Paketi, farklı işlevlere sahip farklı kullanıcı alanı araçlarıyla birlikte gelir. Bunlar şunları içerir:
auditd
denetim kayıtlarının diske yazılmasından sorumlu olan kullanıcı alanı bileşenidir.ausearch
denetim arka plan programı günlüklerini sorgulamak için kullanıcı alanı bileşenidir.aureport
denetim sistemi günlüklerinin özet raporlarını üreten kullanıcı alanı bileşenidir.auditctl
denetimle ilgili çekirdek seçeneklerini yapılandırmak, yapılandırmanın durumunu görmek ve isteğe bağlı denetim kurallarını yüklemek için kullanılan programdır. Sistem başlatıldığında, auditctl /etc/audit/audit.rules içindeki kuralları okur ve çekirdeğe yükler.
Denetim Hizmetini Linux’ta Çalıştırma
Yüklendiğinde, Audit arka plan programı hizmeti başlatılır ve sistem önyüklemesinde çalışacak şekilde etkinleştirilir;
Durumu kontrol etmek için;
systemctl status auditd
● auditd.service - Security Auditing Service
Loaded: loaded (/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-12-08 17:52:49 EAT; 25min ago
Docs: man:auditd(8)
https://github.com/linux-audit/audit-documentation
Process: 1336 ExecStart=/sbin/auditd (code=exited, status=0/SUCCESS)
Process: 1340 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
Main PID: 1337 (auditd)
Tasks: 2 (limit: 5902)
Memory: 616.0K
CPU: 25ms
CGroup: /system.slice/auditd.service
└─1337 /sbin/auditd
Dec 08 17:52:49 debian11 augenrules[1350]: enabled 1
Dec 08 17:52:49 debian11 augenrules[1350]: failure 1
Dec 08 17:52:49 debian11 augenrules[1350]: pid 1337
Dec 08 17:52:49 debian11 augenrules[1350]: rate_limit 0
Dec 08 17:52:49 debian11 augenrules[1350]: backlog_limit 8192
Dec 08 17:52:49 debian11 augenrules[1350]: lost 0
Dec 08 17:52:49 debian11 augenrules[1350]: backlog 0
Dec 08 17:52:49 debian11 augenrules[1350]: backlog_wait_time 60000
Dec 08 17:52:49 debian11 augenrules[1350]: backlog_wait_time_actual 0
Dec 08 17:52:49 debian11 systemd[1]: Started Security Auditing Service.
Auditd kullanarak Linux’ta Dosyaları Kimin Düzenlediğini Bulun
Auditd kullanarak Linux’ta dosyaları kimin düzenlediğini bulmak için dosya sistemi denetim kurallarını yapılandırmanız gerekir.
Sistem değişikliklerinin nasıl izleneceğini tanımlayan çeşitli denetim kuralları olduğunu unutmayın. Bunlar şunları içerir:
Control rules
: Denetim sisteminin davranışının ve yapılandırmasının bir kısmının değiştirilmesine izin verin.File system rules
: belirli bir dosyaya veya dizine erişimin denetlenmesine izin verir. Bunlar aynı zamanda dosya izleme olarak da bilinir.System call rules
: Belirtilen herhangi bir programın yaptığı sistem çağrılarının günlüğe kaydedilmesine izin verin.
Linux’ta dosyaları kimin düzenlediğini bulmamızı sağladığından, yalnızca dosya sistemi denetim kurallarıyla ilgileniyoruz.
Yukarıda belirtildiği gibi, denetim kurallarını yapılandırmak için auditctl yardımcı programı kullanılabilir.
Çalışma Zamanı Dosya sistemi Denetim Kurallarını Yapılandırma
Çalışma zamanı Dosya sistemi denetim kurallarını, auditctl komutunu kullanarak komut satırında yapılandırabilirsiniz. Sözdizimi;
auditctl -w path_to_file -p access_permissions -k filter_key
Kullanılan seçenekler şunlardır:
-w path_to_file
: izlenen dosya sistemi nesnesine giden yolu tanımlar.-p access_permissions
: (-p [r|w|x|a]
) Bir dosya sistemi izlemesinin tetikleyeceği izin erişim türünü açıklayın. r=oku, w=yaz, x=yürüt, a=öznitelik değişikliği. Bunların standart dosya izinleri olmadığını, bunun yerine bu tür şeyleri yapacak türden bir sistem çağrısı olduğunu unutmayın.-k filter_key
: 31 bayta kadar uzunlukta olabilen isteğe bağlı bir metin dizesi tanımlar. Bir kural tarafından üretilen denetim kayıtlarını benzersiz bir şekilde tanımlayabilir.
Örneğin /etc/ssh/sshd_config dosyasındaki okuma/yazma ve öznitelik değişikliklerini izlemek istiyoruz, sonra şöyle bir kural tanımlarsınız;
auditctl -w /etc/ssh/sshd_config -p wax -k monitor_sshd_conf
Kuralları sıralamak için;
auditctl -l
Örnek çıktı;
-w /etc/ssh/sshd_config -p wxa -k monitor_sshd_conf
Bu kuralı test etmek için /etc/ssh/sshd_config dosyasını değiştirmeyi deneyin. Root olmayan bir kullanıcı olarak komutu şu şekilde çalıştırın;
echo "AllowUsers kifarunix root" | sudo tee -a /etc/ssh/sshd_config
Auditctl kullanarak dosyayı izlemeyi durdurmak istiyorsanız;
auditctl -W /etc/ssh/sshd_config -p wax -k monitor_sshd_conf
Kalıcı Dosya sistemi Denetim Kurallarını Yapılandırma
Sistem yeniden başlatmalarında kalıcı olan kalıcı kurallar yapılandırmak için, kuralları /etc/audit/audit.rules altına veya /etc/audit/rules.d/ altına yerleştirebilirsiniz.
/etc/audit/audit.rules dosyasındaki kurallar, /etc/audit/rules.d/ dizini altında tanımlanan kurallardan oluşturulur.
Kurallar /etc/audit/rules.d/ altına yerleştirilmişse, augenrules yardımcı programını kullanarak yüklemeniz gerekir.
Örneğin;
echo "-w /etc/ssh/sshd_config -p wxa -k monitor_sshd_conf" > /etc/audit/rules.d/sshd.rules
Değişikliklerin algılanıp algılanmadığını kontrol edin;
augenrules --check
Kuralları yükleme;
augenrules --load
Bu, /etc/audit/audit.rules dosyasını güncellemelidir.
Denetlenen hizmeti yeniden başlatın;
systemctl restart auditd
Kuralları listelemek;
auditctl -l
-w /etc/ssh/sshd_config -p wxa -k monitor_sshd_conf
Denetim Kuralı Günlüklerini Görüntüleme
Denetim günlüğü kayıtlarını görüntülemenin çeşitli yolları vardır.
- Reading the Audit log file,
/var/log/audit/audit.log
.
grep --color monitor_sshd_conf /var/log/audit/audit.log
type=CONFIG_CHANGE msg=audit(1638984278.290:13): auid=1000 ses=3 subj==unconfined op=add_rule key="monitor_sshd_conf" list=4 res=1AUID="kifarunix"
type=SYSCALL msg=audit(1638984357.760:38): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7fffe54487de a2=441 a3=1b6 items=2 ppid=987 pid=988 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=5 comm="tee" exe="/usr/bin/tee" subj==unconfined key="monitor_sshd_conf"ARCH=x86_64 SYSCALL=openat AUID="kifarunix" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
- Aureport kullanarak bir rapor oluşturun (man aureport hakkında daha fazlasını okuyun)
aureport -i -k
Key Report
===============================================
# date time key success exe auid event
===============================================
1. 12/08/2021 20:24:38 monitor_sshd_conf yes ? kifarunix 13
2. 12/08/2021 20:25:57 monitor_sshd_conf yes /usr/bin/tee kifarunix 38
- Günlükleri ausearch komutuyla arayın (man ausearch hakkında daha fazlasını okuyun).
ausearch -i -k monitor_sshd_conf
----
type=CONFIG_CHANGE msg=audit(12/08/2021 20:24:38.290:13) : auid=kifarunix ses=3 subj==unconfined op=add_rule key=monitor_sshd_conf list=exit res=yes
----
type=PROCTITLE msg=audit(12/08/2021 20:25:57.760:38) : proctitle=tee -a /etc/ssh/sshd_config
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=1 name=/etc/ssh/sshd_config inode=526305 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=0 name=/etc/ssh/ inode=523877 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(12/08/2021 20:25:57.760:38) : cwd=/home/kifarunix
type=SYSCALL msg=audit(12/08/2021 20:25:57.760:38) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7fffe54487de a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6 items=2 ppid=987 pid=988 auid=kifarunix uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=5 comm=tee exe=/usr/bin/tee subj==unconfined key=monitor_sshd_conf
ausearch raporu çıktısından, kayıt alanlarını yorumlamaya çalışalım.
- type=PROCTITLE: Bu Denetim olayını tetikleyen tam komut satırını veren kayıt türü.
- msg=audit(12/08/2021 20:24:38.290:13): Audit(time_stamp:ID) formunda kaydın bir zaman damgasını ve benzersiz bir kimliğini tanımlar. -i seçeneğini kullanmadığınız sürece zaman genellikle EPOCH’ta gösterilir.
Zaman EPOCH’taysa, örneğin 1638984357.760. o zaman tarih komutunu kullanarak dönüştürün;
date -d @1638984357.760
Wed 08 Dec 2021 08:25:57 PM EAT
- proctitle=tee -a /etc/ssh/sshd_config: Alan, analiz edilen işlemi başlatmak için kullanılan komutun tam komut satırını kaydeder. -i seçeneği olmasaydı, bu onaltılık olarak görüntülenirdi.
- type=PATH: PATH kayıt türü, sistem çağrısına iletilen yolu bir bağımsız değişken olarak kaydeder, bu durumda yol /etc/ssh/sshd_config şeklindedir.
item=1
: Öğe alanı, SYSCALL tipi kayıtta başvurulan toplam öğe sayısından hangi öğenin mevcut kayıt olduğunu gösterir. 1 değeri, ikinci öğe olduğu anlamına gelir.name=/etc/ssh/sshd_config
: Sistem çağrısına iletilen dosya veya dizinin yolunu argüman olarak kaydeder. Bu durumda, /etc/ssh/sshd_config dosyasıydı.inode=526305
: inode alanı, bu olayda kaydedilen dosya veya dizinle ilişkili inode numarasını içerir. Aşağıdaki komut, 526305 inode numarasıyla ilişkili dosya veya dizini görüntüler:
find / -inum 526305 -print
/etc/ssh/sshd_config
dev=08:01
: Alan, bu olayda kaydedilen dosya veya dizini içeren aygıtın ikincil ve ana kimliğini belirtir.- mode=file,644: Mod alanı, dosya veya dizin izinlerini kaydeder, 644, /etc/ssh/sshd_config dosyası için -rw-r–r– anlamına gelir.
ouid=root
: ouid alanı, nesne sahibinin kullanıcı kimliğini/kullanıcı adını kaydeder.ogid=root
: Ogid alanı, nesne sahibinin grup kimliğini/kullanıcı adını kaydeder.rdev=00:00
: rdev alanı, yalnızca özel dosyalar için kayıtlı bir cihaz tanımlayıcısı içerir. Bu durumda, kaydedilen dosya normal bir dosya olduğundan kullanılmaz.nametype=NORMAL
: belirli bir sistem çağrısı bağlamında her yol kaydının çalışmasının amacını kaydeder.cap_fp=none
:cap_fp alanı, dosya veya dizin nesnesinin izin verilen dosya sistemi tabanlı yeteneğinin ayarıyla ilgili verileri kaydeder.cap_fi=none
: Cap_fi alanı, dosya veya dizin nesnesinin devralınan dosya sistemi tabanlı yeteneğinin ayarıyla ilgili verileri kaydeder.cap_fe=0
: cap_fe alanı, dosya veya dizin nesnesinin dosya sistemi tabanlı yeteneğinin etkin bitinin ayarını kaydeder.cap_fver=0
: cap_fver alanı, dosya veya dizin nesnesinin dosya sistemi tabanlı yeteneğinin sürümünü kaydeder.type=CWD
: sistem çağrısını başlatan işlemin yürütüldüğü çalışma dizinini kaydeder.cwd=/home/kifarunix
: sistem çağrısının çağrıldığı dizini belirtir.type=SYSCALL
: kaydın çekirdeğe yapılan bir sistem çağrısı tarafından tetiklendiğini belirtir.arch=x86_64
: Alan, sistemin CPU mimarisi hakkında bilgi içerir. -i seçeneği auseardh ile kullanılmadığı sürece, değer onaltılık gösterimle gösterilir.syscall=openat
: Sistem çağrısı alanı, çekirdeğe gönderilen sistem çağrısının türünü kaydeder. ausearch ile -i seçeneği kullanıldığında değerler yorumlanır, aksi takdirde sayısal değerler gösterilir. Tüm sistem çağrılarının bir listesini numaralarıyla birlikte görüntülemek için ausyscall –dump komutunu kullanın. Daha fazla bilgi için bkz. man ausyscall.success=yes
: Başarı alanı, söz konusu olayda kaydedilen sistem çağrısının başarılı olup olmadığını kaydeder. Bu durumda, arama başarılı oldu.- exit=3: Alan, sistem çağrısı tarafından döndürülen çıkış kodunu belirten bir değer içerir. Bu değer, farklı sistem çağrısı için değişir.
a0=0xffffff9c a1=0x7fffe54487de a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6
: a0 ila a3 alanları, bu olaydaki sistem çağrısının onaltılık gösterimde kodlanmış ilk dört bağımsız değişkenini kaydeder. Bu bağımsız değişkenler, kullanılan sistem çağrısına bağlıdır.items=2
: Öğeler alanı, sistem çağrısı kaydını takip eden PATH yardımcı kayıtlarının sayısını içerir.ppid=987
: Ppid alanı, Ana İşlem Kimliğini (PPID) kaydeder.pid=988
: Pid alanı, İşlem Kimliğini (PID) kaydeder.auid=kifarunix
: auid alanı, oturum açma kimliği olan Denetim kullanıcı kimliğini kaydeder. Bu kimlik, oturum açıldığında bir kullanıcıya atanır ve örneğin kullanıcı hesapları değiştirilerek kullanıcının kimliği değişse bile her işlem tarafından devralınır.uid=root
: Uid alanı, analiz edilen işlemi başlatan kullanıcının kullanıcı kimliğini kaydeder. ausearch ile -i seçeneği kullanıldığında, kullanıcı kimliği kullanıcı adlarına dönüştürülebilir. Aşağıdaki komutla da yorumlayabilirsiniz: ausearch -i –uid UID.gid=root
: gid alanı, analiz işlemini başlatan kullanıcının grup kimliğini kaydeder.euid=root
: Euid alanı, analiz sürecini başlatan kullanıcının etkin kullanıcı kimliğini kaydeder.suid=root
: suid alanı, analiz edilen işlemi başlatan kullanıcının ayarlanan kullanıcı kimliğini kaydeder.fsuid=root
: fsuid alanı, analiz edilen işlemi başlatan kullanıcının dosya sistemi kullanıcı kimliğini kaydeder.egid=root
: egid alanı, analiz işlemini başlatan kullanıcının etkin grup kimliğini kaydeder.sgid=root
: Sgid alanı analiz işlemini başlatan kullanıcının set group ID’sini kaydeder.fsgid=root
: fsgid alanı, analiz edilen işlemi başlatan kullanıcının dosya sistemi grup kimliğini kaydeder.tty=pts1
:Tty alanı, analiz edilen işlemin çağrıldığı terminali kaydeder.ses=5
: Ses alanı, analiz edilen işlemin çağrıldığı oturumun oturum kimliğini kaydeder.comm=tee
: Com alanı, analiz edilen işlemi başlatmak için kullanılan komutun komut satırı adını kaydeder.exe=/usr/bin/tee
: Exe alanı, analiz edilen işlemi başlatmak için kullanılan yürütülebilir dosyanın yolunu kaydeder.subj=unconfined
: subj alanı, yürütme sırasında analiz edilen işlemin etiketlendiği SELinux içeriğini kaydeder.key=monitor_sshd_conf
: Anahtar alanı, denetim günlüğünde bu olayı oluşturan kuralla ilişkili yönetici tanımlı dizeyi kaydeder.
Rapordan;
----
type=CONFIG_CHANGE msg=audit(12/08/2021 20:24:38.290:13) : auid=kifarunix ses=3 subj==unconfined op=add_rule key=monitor_sshd_conf list=exit res=yes
----
type=PROCTITLE msg=audit(12/08/2021 20:25:57.760:38) : proctitle=tee -a /etc/ssh/sshd_config
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=1 name=/etc/ssh/sshd_config inode=526305 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=0 name=/etc/ssh/ inode=523877 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(12/08/2021 20:25:57.760:38) : cwd=/home/kifarunix
type=SYSCALL msg=audit(12/08/2021 20:25:57.760:38) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7fffe54487de a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6 items=2 ppid=987 pid=988 auid=kifarunix uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=5 comm=tee exe=/usr/bin/tee subj==unconfined key=monitor_sshd_conf
Şu görülebilir:
- SSH sunucusu yapılandırma dosyası /etc/ssh/sshd_config tee komutu kullanılarak güncellendi.
- Komut, /home/kifarunix dizininden yürütüldü.
- Değişiklikler kullanıcı, kifarunix tarafından kök kullanıcı olarak yapıldı (Sudo kullanılarak).
Elbette istediğiniz gibi daha fazla kural yapılandırabilirsiniz.
Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.