Cari tahu proses mana yang mengubah file

35

Saya mencoba menemukan cara yang dapat diandalkan untuk menemukan proses mana pada mesin saya yang mengubah file konfigurasi ( /etc/hostslebih spesifik).

Saya tahu saya dapat menggunakan lsof /etc/hostsuntuk mencari tahu proses apa yang saat ini membuka file, tetapi ini tidak membantu karena prosesnya jelas membuka file, menulis padanya, dan kemudian menutupnya lagi.

Saya juga melihat lsofopsi repeat (-r), tetapi sepertinya hanya berjalan secepat satu detik, yang mungkin tidak akan pernah menangkap penulisan yang sedang berlangsung.

Saya tahu beberapa alat untuk memantau perubahan pada sistem file, tetapi dalam hal ini saya ingin tahu proses mana yang bertanggung jawab, yang berarti menangkapnya dalam tindakan.

Robbles
sumber

Jawaban:

53

Anda dapat menggunakan audit untuk menemukan ini. Jika belum tersedia, instal dan aktifkan audit untuk distro Anda.

setel arloji audit di / etc / hosts

/sbin/auditctl -w /etc/hosts -p war -k hosts-file

-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.

Tunggu hingga file host berubah dan gunakan ausearch untuk melihat apa yang dicatat

/sbin/ausearch -f /etc/hosts | more

Anda akan mendapatkan massa keluaran misalnya


time-> Wed 12 Okt 09:34:07 2011 type = PATH msg = audit (1318408447.180: 870): item = 0 name = "/ etc / hosts" inode = 2211062 dev = fd: mode 00 = 0100644 ouid = 0 ogid = 0 rdev = 00: 00 obj = system_u: object_r: etc_t: s0 type = CWD msg = audit (1318408447.180: 870): cwd = "/ home / iain" type = SYSCALL msg = audit (1318408447.180: 870): arch = c000003e syscall = 2 berhasil = yes keluar = 0 a0 = 7fff73641c4f a1 = 941 a2 = 1b6 a3 = 3e7075310c item = 1 ppid = 7259 pid = 7294 au id = 1001 uid = 0 gid = 0 suid = 0 suid = 0 suid = 0 fidid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts0 ses = 123 comm = "touch" exe = "/ bin / touch" subj = user_u: system_r: unconfined_t: s0 key = "hosts-file"


Dalam hal ini saya menggunakan perintah sentuh untuk mengubah file timstamp pid itu adalah 7294 dan ppid adalah 7.259 (shell saya).

user9517 mendukung GoFundMonica
sumber
2
"Aktifkan audit untuk distro Anda" mungkin harus diperluas sedikit. Mengganggu, perintah di atas tidak memberi saya kesalahan atau hasil. "/ sbin / auditctl -e 1" juga tidak membantu. Menjalankan audit deamon untuk melakukan logging memang membantu - "/etc/init.d/auditd mulai" (meskipun itu menghapus aturan saya, jadi saya harus memasukkannya lagi).
tobixen
Tidak bekerja untuk saya, ausearchselalu kembali<no matches>
m0skit0
1
kadang-kadang Anda mungkin perlu mengatur beberapa audit untuk mendapatkan proses aktual yang memulai modifikasi jika proses itu misalnya memanggil perintah eksternal untuk melakukan pekerjaan untuk itu. yaitu saya mencoba mencari tahu mengapa entri crontab pengguna terus diatur ulang. Perintah crontab bertanggung jawab adalah tetapi pada saat saya memeriksa ppid yang telah keluar, jadi saya harus mengaudit / usr / bin / crontab juga, kemudian mencocokkan dengan stempel waktu akses ke crontab ke pelaksanaan crontab yang diaudit dan kemudian memeriksa itu ppid ... yang mengungkapkan daemon orkestrasi menegakkan konfigurasi cron pengguna tertentu.
Wil
3

Anda juga dapat menggunakan alat-alat yang tidak sah:

  inotifywait -mq -e open -e modify /etc/hosts
Drago
sumber
14
Auditd dapat memberi Anda informasi yang Anda inginkan. Meskipun mudah untuk membuat asumsi bahwa inotify akan membiarkan Anda melakukan ini - itu tidak akan terjadi, karena itu tidak akan memberi Anda id proses yang membuat modifikasi.
objektifikasi
2

Setelah banyak pencarian, saya menemukan solusinya, cukup gunakan perintah ini: sudo fs_usage | grep [path_to_file]

treblam
sumber
2
ini hanya untuk MacOS ...
majick