Come registro tutti i comandi della shell UNIX inviati da tutti gli utenti?


8

Esiste un modo elegante per registrare tutti i comandi inviati in tutte le shell su una macchina? Questo è nel contesto di un server Ubuntu usato raramente, di cui sono l'unico utente umano. (Esistono diversi account utente utilizzati da sistemi automatizzati.)

Vorrei che questo fosse discreto e poco costoso, quindi mi piacerebbe se ci fosse un metodo semplice che coinvolge qualcosa di simile script.

Risposte:


9

Dall'alba dei tempi (in realtà risalente al tempo in cui le persone dovevano effettivamente pagare soldi veri per ciclo di computer che utilizzavano) Unix e i suoi cloni hanno un sistema chiamato Process Accounting ( acct) incorporato. Ciò ha permesso agli amministratori di sistema di sapere esattamente ciò che i loro utenti stavano facendo e quindi potevano fatturarli di conseguenza.

Le acctstrutture esistono ancora nella maggior parte dei sistemi Unix e Linux fino ad oggi.

Questo sito: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html ti dice come abilitarlo.


Può essere usato anche per registrare quale utente esegue sudo e su e quali comandi di root in seguito?
Daniel Beck

Credo che registra tutti i comandi eseguiti, digitati dall'utente, tty, ecc. È possibile abbinare i comandi su un tty con l'utente che ha effettuato l'accesso a quel tty per rintracciare gli utenti che hanno citato o eseguito.
Majenko,

Grazie, non ero assolutamente a conoscenza di questa funzione. Una rapida lettura delle pagine man suggerisce che la registrazione continua fino a quando non viene raggiunta una condizione di spazio su disco ridotto, quindi forse è necessario uno script logrotate.
jl6

pensavo che la contabilità di processo avesse appena registrato quale programma era in esecuzione, non il comando con tutti i suoi argomenti?
Sirex,

2

Ecco un modo molto carino e veloce per registrare tutti i comandi della shell :

Passo 1:

Usa il tuo editor di testo preferito per aprire / etc / bashrc e aggiungere la seguente riga alla fine:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Passo 2:

Impostare il syslogger per intercettare local6 in un file di registro aggiungendo questa riga nel file /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Vedi il post completo del blog qui]


Avviso l'utente sarebbe in grado di disabilitare questo reimpostando la variabile e poiché viene eseguito "prima di emettere ogni prompt primario" questo fatto non verrebbe registrato.
dmckee --- ex gattino moderatore

2

Puoi usare snoopy .

È molto semplice da installare e da rimuovere (non è necessario alcun modulo del kernel o patch). Si noti che questa non è una soluzione di controllo adeguata e può essere facilmente aggirata.

Divulgazione: sono l'attuale manutentore di snoopy.


Bostjan Skufca ha anche fornito istruzioni aggiuntive per l'installazione di snoopy in Ubuntu qui e anche in un commento aggiuntivo nello stesso thread qui .
karel,

+1 per snoopy; fornisce un bel registro di comandi e argomenti in /var/log/auth.log
David Goodwin,

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.