Linux dosya erişim izleme


20

Unix'te son 1 hafta içinde belirli bir dosyaya kimin eriştiğini öğrenmenin bir yolu var mı? Kullanıcı veya başka bir yere ftp bazı komut dosyası olabilir. Belirli bir dosyaya erişen kullanıcı adlarının bir listesini alabilir miyim? Belirli bir dosyaya kimin eriştiğini nasıl öğrenebilirim?

Yanıtlar:


39

Son derece olağandışı günlüğe kaydetme politikalarınız yoksa, hangi dosyanın günlüğe kaydedilmediğine (büyük miktarda bilgi olurdu). Sistem günlüklerinde kimin hangi zamanda giriş yaptığını öğrenebilirsiniz; lastKomut aşağıdaki gibi geçmişi ve diğer günlükleri giriş verir /var/log/auth.logkullanıcıların kimlik doğrulaması nasıl söyleyecektir ve oturum yerden (ki terminali veya hangi konak uzaktan ise).

Bir dosyanın en son okunduğu tarihe erişim zamanı veya kısaca atime denir . Tüm unix dosya sistemleri depolayabilir, ancak birçok sistem bunu kaydetmez, çünkü (genellikle küçük) bir performans cezası vardır. ls -ltu /path/to/fileveya stat /path/to/filedosyanın erişim süresini gösterir.

Bir kullanıcı dosyaya erişmişse ve izlerini saklamaya çalışmamışsa, kabuk geçmişinde (ör. ~/.bash_history) İpuçları olabilir.

Şu anda neyin açık olduğunu veya kimin dosya açtığını öğrenmek için kullanın lsof /path/to/file.

Gelecekte bir dosyaya ne olacağını günlüğe kaydetmek için birkaç yol vardır:

  • İnotifywait kullanın . birisi okuduğunda inotifywait -e access /path/tobir satır yazdırır . Bu arayüz size dosyaya kimin eriştiğini söylemez; bu hat göründüğü anda arayabilirsiniz , ancak bir yarış koşulu vardır (erişim gittikçe erişim sona erebilir)./path/to/ ACCESS filefilelsof /path/to/file

  • LoggedFS , bir dosya sistemi ağacının görünümünü sağlayan ve bu görünüm üzerinden tüm erişimlerin daha kolay günlük kaydını gerçekleştirebilen istiflenebilir bir dosya sistemidir. Yapılandırmak için bkz. LoggedFS yapılandırma dosyası sözdizimi .

  • Dosya sistemi erişimi de dahil olmak üzere çok sayıda şeyi günlüğe kaydetmek için Linux'un denetim alt sistemini kullanabilirsiniz. auditdArka plan programının başlatıldığından emin olun , ardından oturum açmak istediğiniz şeyi yapılandırın auditctl. Kaydedilen her işlem /var/log/audit/audit.log(tipik dağıtımlarda) kaydedilir . Belirli bir dosyayı izlemeye başlamak için:

    auditctl -w /path/to/file
    

    Bir dizine saat koyarsanız, içindeki dosyalar ve alt dizinleri yinelemeli olarak izlenir.


Teşekkür ederim Gilles .. Senaryo tarafından oluşturulan bu dat dosyası var. Ben sadece yaratıldıktan sonra bu dosyaya ne olduğunu bilmek istiyorum .. diğer komut dosyalarının hiçbiri daha fazla işlem için seçiyor, bu yüzden birisi bu dat dosyasına el ile erişip erişmediğini görmek istiyorum
Jack

@Jack: Kurulumunuz hakkında çok daha fazla şey bilmeden söylemek zor, ancak hiçbir şey dosyayı kaldırmaz veya yeniden adlandırmazsa, başka birisinin erişip erişmediğine bakılmaksızın diğer komut dosyalarının alması için orada olacaktır. Yorumunuzdan, komut dosyalarınızı çalıştırdığınızda neler olduğuna bakmanız gerektiğini düşünüyorum.
Gilles 'SO- kötü olmayı kes'

2
Hey, bununla güzel bir dairesel döngü oluşturabilirsiniz:syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
penguin359

7

İnotifywait ile yukarıdaki örnek şunlardan biri olmalıdır (daha fazla bilgi için man sayfasına bakınız):

inotifywait /path/to/file
inotifywait -e open /pat/to/file

Veya izleme modu ve zaman damgası ile:

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'

6

Önceki cevap, sorduğunuz şeyi yapmak için en iyi uygulama değildir . Linux'un bunun için bir API'si var. inotifyAPI http://linux.die.net/man/7/inotify

  1. inotifyDoğrudan API'yı çağırmak istediğiniz şeyi yapmak için bir C programı yazabilirsiniz
  2. Kfsmd, http://www.linux.com/archive/feature/124903 kullanan bir arka plan programı kullanabilirsiniz.inotify
  3. Platformlarda çalışan ( inotifyLinux'a özgü) bir şey istiyorsanız ve Java kullanıyorsanız, JNotify platformlarda (Linux, Mac, Windows) çalışır ve yerel işletim sisteminin temel API'sını soyutlar.

3
Stack Exchange'e hoş geldiniz . Cevaplar kronolojik sırayla sunulmaz, bu nedenle “önceki cevap” demek istediğiniz cevabı ifade etmez. Yine de diğer ikisinden hangisine atıfta bulunduğunuzu merak ediyorum: biri iyi veya kötü uygulama gibi görünen bir şey yok ve diğeri inotify API'sından bahsediyor.
Gilles 'SO- kötü olmayı bırak'

Büyük olasılıkla Glen yukarıdaki cevaba varsayılan oy sıralamasıyla atıfta bulunmaktadır. Gerçekten de en popüler cevap soruya bir çözüm sunmakta başarısız olmaktadır. Belirli bir zaman dilimi için bir dosyaya kaç kez erişildiğini görmek için bazı nedenler olabilir.
Wtower

1
Unix.stackexchange.com/a/12251/20336 inotify API'sında açıklandığı gibi, belirli bir dosyaya kimlerin eriştiği hakkında bilgi sağlamaz . Ayrıca inotify, geçen hafta dosyaya kimin eriştiğini bulmaya gerçekten yardımcı olmaz. Bunun için denilen yazılımın kullanılmasını gerektiren denetim özelliklerine ihtiyacınız vardır auditd(ancak bu bile, geçen hafta auditdçalıştırmadıysanız geçen hafta dosyaya kimin eriştiğini bulmanıza yardımcı olmaz ).
Mikko Rantalainen

3

Bu genelde mümkün değildir. Ben şu ya da bu şekilde mümkün kılmak için yeterli denetim ile dosya sistemleri gördüm, ama genel bir Unix şey değil, hayır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.