Come registrare tutti i comandi Bash di tutti gli utenti su un server?

19

La nostra piccola azienda gestisce un Ubuntu Server 11.10, a cui un paio di persone hanno accesso SSH. A volte vengono utilizzati anche i terminali reali. Come possiamo eseguire il log locale su tutti i comandi di Bash eseguiti, insieme a user e time stamp?

Possiamo presumere che nessuno è malvagio e sta attivamente cercando di evitare la registrazione, ma preferiremmo comunque che gli utenti non avessero accesso diretto in scrittura ai loro file di registro. Le sessioni simultanee devono essere gestite correttamente.

    
posta Tin 07.01.2012 - 16:19

7 risposte

27

Per le shell BASH, modificare il file di configurazione del runtime BASH a livello di sistema:

sudo -e /etc/bash.bashrc

Aggiungi alla fine di quel file:

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

Configura la registrazione per "local6" con un nuovo file:

sudo -e /etc/rsyslog.d/bash.conf

E i contenuti ...

local6.*    /var/log/commands.log

Riavvia rsyslog:

sudo service rsyslog restart

Esci. Accedi. Voila!

Ma ho dimenticato la rotazione del registro:

sudo -e /etc/logrotate.d/rsyslog

C'è una lista di file di registro da ruotare allo stesso modo ...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Quindi aggiungi il nuovo file di registro dei comandi di bash in tale elenco:

/var/log/commands.log

Salva.

    
risposta data user8290 07.01.2012 - 16:45
4

Un sistema di contabilità di processo può essere utile in questo senso, in particolare il acct pacchetto che fornisce i comandi lastcomm e ac.

I comandi ac stampa statistiche sul tempo di connessione degli utenti, in ore. Questa è la quantità di tempo che l'utente è stato connesso al sistema, in remoto tramite SSH o un terminale seriale, o mentre sulla console.

Il comando lastcomm visualizza informazioni sui comandi eseguiti in precedenza. Le voci più recenti sono riportate in cima alla lista. Viene inoltre visualizzato l'importo totale del tempo di CPU utilizzato da ciascun processo.

Un vecchio tutorial che potrebbe essere utile è qui:

link

Altri comandi contabili come ultimo e così via possono essere trovati in questo tutorial:

link

    
risposta data Sabacon 07.01.2012 - 18:17
3

Puoi trovare qui uno script per registrare tutti bash comandi / built-in in un file di testo o un server syslog senza utilizzare una patch o uno speciale strumento eseguibile.

Molto facile da implementare, in quanto è un semplice script di shell che deve essere richiamato una sola volta durante l'inizializzazione di bash .

È gratuito e spero che soddisfi le tue esigenze.

    
risposta data Francois Scheurer 13.09.2012 - 13:35
2

Potresti utilizzare snoopy .

Il logger Snoopy può essere adatto al tuo scopo. Non è destinato a essere una soluzione di registrazione inevitabile, ma piuttosto uno strumento utile per gli amministratori diligenti che preferiscono tenere traccia delle proprie azioni.

Disclosure: I am snoopy maintainer.

    
risposta data Bostjan Skufca 06.11.2014 - 00:15
0

Per occuparti di più sessioni senza sovrascrivere il file della cronologia, devi mettere "shopst -s histappend" in un file di avvio di Bash. Vedi anche questa domanda sullo stesso problema.

    
risposta data pdp 05.03.2014 - 16:28
0

prova questo (le soluzioni sopra non funzioneranno al 100% con bash 4.3):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

esegue la registrazione E impedisce la registrazione dei timestamp che vengono utilizzati per il file di cronologia di bash. la trappola è necessaria, dal momento che bash invierà i segnali al "subjob" dopo aver premuto strg + c più volte (testato con bash 4.3). questo costringerà il logout dell'utente corrente (ad esempio loggato con sudo)

    
risposta data Hans-Joachim Kliemeck 12.10.2014 - 23:26
0

Puoi anche provare a installare acct. Acct mantiene una traccia di controllo dettagliata di ciò che viene fatto sui sistemi Linux.

sudo apt-get install acct
    
risposta data user571354 08.08.2016 - 02:01

Leggi altre domande sui tag