Monitoraggio dell'accesso ai file Linux


20

C'è un modo in unix per scoprire chi ha avuto accesso a determinati file nell'ultima settimana? Potrebbe essere l'utente o alcuni script ftp in qualche altro posto. Posso ottenere un elenco di nomi utente che hanno avuto accesso a determinati file? Come posso sapere chi accede a un determinato file ??

Risposte:


39

A meno che non siano in atto criteri di registrazione estremamente insoliti, chi accede a quale file non è registrato (sarebbe una grande quantità di informazioni). Puoi scoprire chi era connesso a che ora nei registri di sistema; il lastcomando fornisce la cronologia degli accessi e altri registri come /var/log/auth.logti diranno come gli utenti si sono autenticati e da dove hanno effettuato l'accesso (quale terminale o quale host se in remoto).

La data dell'ultima lettura di un file è chiamata ora di accesso o in breve tempo . Tutti i filesystem unix possono memorizzarlo, ma molti sistemi non lo registrano, perché ha una penalità delle prestazioni (di solito piccola). ls -ltu /path/to/fileo stat /path/to/filemostra il tempo di accesso al file.

Se un utente accede al file e non sta cercando di nascondere le sue tracce, la sua cronologia della shell (ad esempio ~/.bash_history) potrebbe avere indizi.

Per scoprire cosa o chi ha un file aperto ora, usa lsof /path/to/file.

Per registrare cosa succede a un file in futuro, ci sono alcuni modi:

  • Usa inotifywait . inotifywait -e access /path/tostamperà una riga /path/to/ ACCESS filequando qualcuno legge file. Questa interfaccia non ti dirà chi ha avuto accesso al file; puoi chiamare lsof /path/to/filenon appena appare questa linea, ma c'è una condizione di gara (l'accesso potrebbe essere finito quando lsof inizia).

  • LoggedFS è un filesystem impilabile che fornisce una vista di un albero di filesystem e può eseguire registrazioni più fantasiose di tutti gli accessi attraverso quella vista. Per configurarlo, vedere Sintassi del file di configurazione di LoggedFS .

  • È possibile utilizzare il sottosistema di controllo di Linux per registrare un gran numero di cose, inclusi gli accessi al filesystem. Assicurati che il auditddemone sia avviato, quindi configura ciò con cui vuoi accedere auditctl. Ogni operazione registrata viene registrata in /var/log/audit/audit.log(su distribuzioni tipiche). Per iniziare a guardare un determinato file:

    auditctl -w /path/to/file
    

    Se si inserisce un watch in una directory, vengono guardati anche i file in essa contenuti e le sue sottodirectory ricorsivamente.


Grazie Gilles .. Ho questo file di dati creato dallo script. Voglio solo sapere cosa succede a quel file dopo che è stato creato .. nessuno degli altri script lo sta selezionando per un ulteriore processo, quindi voglio vedere se qualcuno accede manualmente a quel file di dati
Jack

@Jack: È difficile dirlo senza sapere molto di più sulla tua configurazione, ma finché nulla rimuove o rinomina il file, sarà lì per gli altri script a prenderlo, indipendentemente dal fatto che qualcun altro acceda o meno ad esso. Dal tuo commento, penso che dovresti guardare cosa succede quando esegui i tuoi script.
Gilles 'SO- smetti di essere malvagio' il

2
Ehi, potresti creare un bel cerchio circolare con questo: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

L'esempio sopra con inotifywait dovrebbe essere uno di (vedi la pagina man per maggiori informazioni):

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

O con modalità di monitoraggio e timestamp:

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

6

La risposta precedente non è la migliore pratica per fare ciò che chiedi. Linux ha un'API per questo. L' inotifyAPI http://linux.die.net/man/7/inotify

  1. Puoi scrivere un programma C per fare ciò che vuoi semplicemente chiamando l' inotifyAPI direttamente
  2. Puoi usare kfsmd, http://www.linux.com/archive/feature/124903 un demone che usainotify
  3. Se vuoi qualcosa che inotifyfunzioni su piattaforme diverse ( è specifico per Linux) e stai usando Java, JNotify funziona su piattaforme diverse (Linux, Mac, Windows), astraggendo l'API sottostante del SO nativo.

3
Benvenuto in Stack Exchange . Le risposte non sono presentate in ordine cronologico, quindi la "risposta precedente" non comunica quale risposta intendi. Mi chiedo a quale degli altri due ti riferisci comunque: uno non ha nulla che assomigli a buone o cattive pratiche e l'altro menziona l'API inotify.
Gilles 'SO- smetti di essere malvagio' il

Molto probabilmente Glen fa riferimento alla risposta sopra con ordinamento dei voti predefinito. In effetti la risposta più popolare non riesce a presentare una soluzione alla domanda. Ci possono essere una serie di ragioni per le quali potrebbe essere necessario vedere quante volte si accede a un file per un determinato periodo di tempo.
Wtower,

1
Come spiegato in unix.stackexchange.com/a/12251/20336 l'API inotify non fornisce informazioni su chi ha avuto accesso a un determinato file. Inoltre, inotify non aiuta davvero a capire chi ha avuto accesso al file la scorsa settimana. Per questo sono necessarie funzionalità di controllo, che richiedono l'utilizzo di un software chiamato auditd(tuttavia, anche questo non aiuta a capire chi ha effettuato l'accesso al file la settimana scorsa a meno che non fosse auditdgià in esecuzione la settimana scorsa).
Mikko Rantalainen,

3

Questo non è, in generale, fattibile. Ho visto file system con un controllo sufficiente per renderlo possibile in un modo o nell'altro, ma non è una cosa Unix generale, no.

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.