Controllo dei file in Linux: come guardare l'albero delle directory per le eliminazioni?


9

Ho uno script del forum in esecuzione sul server e in qualche modo un piccolo numero di allegati inizia a perdersi. Voglio scoprire cosa li sta eliminando e a che ora. Come posso configurare Linux auditd (auditctl) per guardare l'albero delle directory (gli allegati sono memorizzati all'interno dell'albero delle directory multi-livello) per controllare lì le cancellazioni dei file?

Forse dovrei usare qualche altro strumento per questo?

Risposte:


8

Questa è una risposta che ho scritto a una domanda precedente:

Generalmente se desideri sapere cosa sta facendo un processo / utente / file senza dover eseguire lsof contro di esso 24/7, usi auditctl.

Supponendo che tu abbia un controllo di controllo del kernel recente dovrebbe essere un'operazione semplice. (Questo è in Debian-fu, se stai eseguendo Red Hat translate come appropriato)

# apt-get install auditd

Assicurati che sia in esecuzione (/etc/init.d/auditd status).

auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>

Sostituisci b64 con b32 se esegui un arco a 32 bit, open può essere sostituito da qualsiasi chiamata di sistema o dalla parola 'all'

Per maggiori informazioni leggi la manpage auditctl.

È possibile utilizzare questo metodo e chiedergli di controllare la chiamata di sistema "Unlink".

Il parametro -w è utile per guardare file / directory, ma come nella pagina man spiega che ci sono avvertimenti.

-w path Inserisce un watch per l'oggetto file system nel percorso. Non è possibile inserire un orologio nella directory di livello superiore. Questo è proibito dal kernel. Anche i caratteri jolly non sono supportati e genereranno un avviso. Il modo in cui funzionano gli orologi è il monitoraggio dell'inode internamente. Ciò significa che se metti un watch in una directory, vedrai quelli che sembrano essere eventi di file, ma in realtà è solo l'aggiornamento dei metadati. In questo modo potresti perdere alcuni eventi. Se è necessario guardare tutti i file in una directory, si consiglia di posizionare un singolo watch su ciascun file. A differenza delle regole di controllo di syscall, gli orologi non influiscono sulle prestazioni in base al numero di regole inviate al kernel.


Non posso :( Ho PHP in esecuzione in modalità CGI. C'è sempre un nuovo processo lì. Inoltre, voglio non guardare un singolo processo, ma guardare una parte particolare del file system per le modifiche.
Vladislav Rastrusny

Sì, vedi la modifica, ho fatto, ci sono parametri per guardare le directory del filesystem, ma con avvertenze o file.
Aaron Tate,

Ci sono circa 1000 cartelle e circa 50k di file. Quindi anche questo non funzionerà ... :(
Vladislav Rastrusny

In genere, fintanto che sei a conoscenza delle avvertenze, dovresti essere in grado di andare avanti e posizionare l'orologio nella directory di livello superiore che contiene le cartelle che desideri guardare.
Aaron Tate,

Devo fare la stessa cosa (guardare una cartella per le eliminazioni in modo da poter trovare il nome PID / processo che l'ha fatto), ma questo non sembra funzionare (almeno su un kernel 3.x). Se eseguo "auditctl -a entry, sempre -F arch = b64 -S scollega -w / path / to / dir" per tenere traccia delle eliminazioni, ottengo "l'opzione watch non può essere fornita con un syscall". Qualcuno ha qualche idea?
IBBoard,


0

Un paio di idee. Puoi usare straceper vedere cosa sta facendo la tua applicazione, ma potrebbe generare un registro di registri e rallentare il sistema.

Un'altra idea è quella di utilizzare inotifywait, quindi lsof/fusersul file per vedere cosa lo sta usando. Puoi provare a eseguire questo script con la massima priorità (se puoi) per avere informazioni il più accurate possibile. Probabilmente non intercetterà la unlinkchiamata, poiché il file sparirà prima che l'evento venga recapitato.


Non posso. Non so su quale processo eseguire la strace perché trovo i file eliminati dopo qualche tempo. inotifywait non funzionerà anche perché PHP è in esecuzione come CGI e ci sono molti processi PHP con ID diversi.
Vladislav Rastrusny,

inotify è usato per monitorare il filesystem, non i processi in esecuzione. Per lo strace, devi tracciare il processo genitore principale con la -fbandiera, per seguire i figli.
Dan Andreatta,

0

Mentre la raccomandazione auditd di fenix sembra ideale, potresti trovare utili gli ID di un filesystem come AIDE . Sfortunatamente, è improbabile che sia abbastanza fine per quello che stai cercando di isolare.

Scriverò spesso script come soluzione per problemi come quello che descrivi. Se non riesci a realizzare ciò che desideri con le soluzioni consigliate, scrivi qualcosa da te. Spesso non è molto complicato.


Sembra, è solo per individuare le modifiche ai file. Non per il monitoraggio in tempo reale.
Vladislav Rastrusny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.