Come registrare ogni comando linux su un server di registrazione


13

Voglio che ogni singolo comando digitato vada a un log server. Già configurato è il syslog-ng per inviare tutti i log al log server.

Sono interessato a tutti i metodi per farlo. Mi aspetterei un po 'di discussione sugli utenti non autorizzati e sulla sicurezza, ma il primo obiettivo primario è semplicemente quello di far registrare le sessioni. Tutte le sessioni sono su SSH ma anche i comandi di connessione alla console devono essere registrati. Vorrei che questo accadesse per qualsiasi shell, ma quello principale è bash. (Ancora una volta, so che un utente canaglia potrebbe creare la propria shell ...)

Risposte:


29

Non è così che affronti il ​​problema. Dopo aver concesso l'accesso shell a un utente, stai affidando a quell'utente di fare tutto ciò per cui ha i permessi adeguati. Dimentica la registrazione dei comandi, ci sono troppi modi per eseguire un comando in qualsiasi sistema Unix.

Ad esempio, l'utente può avviare un client di posta (l'unico comando registrato è pine, ad esempio), lì seleziona "Compose" che avvia VI, e da VI avvia qualsiasi comando che desidera :!cmd. Questo comando non viene registrato da nessuna parte, e dal punto di vista del sistema, è come qualsiasi applicazione di supporto chiamata da VI, come grep o sort. L'unico comando registrato dalla shell era pine.

Sembra che ciò che desideri effettivamente sia chiamato auditing . Abilitare il sottosistema di auditing e utilizzare il auditctlcomando e l' auditddaemon dalla revisione contabile pacchetto per controllare ciò che viene registrato. Maggiori informazioni sono disponibili nella pagina del manuale auditctl (8) .

Notare che la registrazione di ogni istanza di processo potrebbe anche non essere ottimale. Ad esempio, il semplice ./configureper un pacchetto software (creato usando gli autotools) è notevole per la creazione di migliaia di istanze di processo. Ciò inonderà il registro di controllo con così tanto rumore che diventa molto difficile analizzarlo in seguito.


13

Installa il acctpacchetto (il nome del pacchetto varia in base alla distribuzione, noto anche come contabilità di processo) e usa lastcomm <username>:

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

Puoi anche cercare per tty o nome del comando. Come al solito, man lastcommper maggiori informazioni.


11

Se sei disposto a fare un po 'di programmazione in C, puoi farlo scrivendo una libreria che avvolge execve, accede a syslog, quindi apri la libreria che contiene il vero execve syscall. Quindi in / etc / environment, imposta LD_PRELOAD sul percorso per la libreria che hai creato.

Dovresti stare attento a inserire un loop qui, quindi potresti voler registrare solo i exec di determinati binari o escludere altri (come syslog) dalla registrazione.


In realtà, questo è abbastanza utile. La prima ricerca su execve wrapper fa apparire snoopy ( sourceforge.net/projects/snoopylogger ). Sembra vicino a quello che stavo cercando, anche se un po 'prolisso. Dopo i test vedo che avrò bisogno dell'approvazione della direzione per inserirlo in un ambiente di produzione. (Un avvertimento per tutti i tipi nefasti)
Leone,

@Leo Dalla versione 2.0.0 Snoopy supporta le specifiche del formato di registro personalizzato quando si esegue ./configure, quindi l'eccessiva verbosità non dovrebbe più essere un problema. Divulgazione: manutentore Snoopy qui.
Bostjan Skufca,

7

Mi sembra che tu stia cercando qualcosa di simile a rootsh ( pagina man ). Per citare la pagina man:

Rootsh è un wrapper per shell che registra tutte le sequenze di tasti eco e l'output del terminale in un file e / o in syslog.

Nonostante il nome, questo può essere utilizzato per qualsiasi utente.


2

Probabilmente è meglio avere utenti che usano sudo (o simili) per eseguire i comandi che ti interessano e fidarsi degli utenti a un certo livello. Man mano che ti avvicini al "pieno controllo" delle cose, è più difficile rintracciare ciò che stanno facendo. Di recente ho esaminato strumenti come questo, per esempio. Principalmente creano semplicemente registri che sono difficili da gestire se hai abbastanza utenti e macchine per rendere utile una cosa del genere. :)

Considera tutte le informazioni che genererai. Quanto ti importa? Probabilmente molto poco, quindi stai generando registri per lo più privi di valore. Controllare le cose a cui tieni davvero, come suggeriscono altri, probabilmente ti porta a uno stato finale migliore.


1

Bash può essere compilato con il supporto syslog dalla 4.1.

Non è infallibile (la contabilità di processo potrebbe essere migliore per questo), ma è principalmente l'interazione dell'utente; il volume dovrebbe essere più gestibile e sarai in grado di passare a qualcosa di più dettagliato se sospetti qualcosa di anormale.

Detto questo, questo è molto invadente e come utente mi aspetterei un avviso di privacy molto specifico prima di iniziare a farlo.


0

C'è anche sudosh ( http://sudosh.sourceforge.net ) che eseguirà la registrazione delle sessioni. Hai la possibilità di eseguirlo come shell definita per un utente o tramite sudo. Tiene traccia dei tempi anche per ogni sessione in modo da poter riprodurre la sessione e guardarla (comprese le sessioni di modifica e quant'altro).

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.