2011-08-03 23 views
8

Belirli bir dosyayı hangi kullanıcının değiştirdiğini öğrenmek için rehber arıyorum. Belirli bir dosyaya dokunulduğunda bildirim almak harika olurken, hangi kullanıcının bu dosyayı değiştirdiğini nasıl anlarım? Lsof'u kullanmayı düşünebilirim ama korkarım ki istediğim gibi "gerçek zamanlı" olmayabilir ve/veya kaynaklarda çok fazla vergi olabilir. Gerçek zamanlı olarak, bir kullanıcı bir dosyada touch komutunu çalıştırıyorsa, lsof dosyasını dosyada çalıştırdığımda, lsof tarafından alınmayabilir.inotify - hangi kullanıcının dosyayı değiştirdiğini nasıl bulabilirim?

cevap

11

Sen audit deamon kullanabilirsiniz:

sudo apt-get install auditd 

(-p wa)

touch /tmp/myfile 

izlemek için bir dosya seçin yazmak için denetim ekleyin ve değişikliğine katkı:

sudo auditctl -w /tmp/myfile -p wa -k my-file-changed 

dosya dokunulduğunda bir kullanıcı tarafından:

touch /tmp/myfile 

Kontrol denetim günlükleri:

sudo ausearch -k my-file-changed | tail -1 

Sen çıktıda

type = SYSCALL msg = denetim (: 57 1313055675.066): komutu çalıştırmak kullanıcının UID görebilirsiniz kemer = c000003e syscall = 2 başarılı = evet çıkış = 3 a0 = 7ffffb6744dd a1 = 941 a2 = 1B6 a3 = 7ffffb673bb0 ürün = 1 ppid = 3428 pID = 4793 auid = 4294967295 uid = 1000 gid = 1000 euid = 1000 suid = 1000 fsuid = 1000 egid = 1000 sgid = 1000 fsgid = 1000 Tty = pts1 ses = 4294967295 comm = "dokunmatik" exe = "/ bin/dokunma" key = "my-dosya değişti"

Kullanım ayrıntıları için bkz. man pages veya bu sample guide.

+0

harika! çok teşekkürler. – user837208

2

Önceki komutta -i seçeneğini eklerseniz, daha fazla okunabilir biçimde çıktı elde edersiniz. UID'yi sunucudaki gerçek kullanıcı adıyla değiştirirsiniz.

ausearch -k dosya-değiştirilmiş -i | kuyruk -1