Visualizzazione live dei comandi della shell Linux eseguiti da un altro utente?


27

È possibile per l'utente root in Linux avere una vista in tempo reale (o quasi in tempo reale) dei comandi della shell eseguiti da un altro utente connesso tramite un terminale o SSH? Ovviamente sono memorizzati in .bash_history, ma questo viene salvato solo quando l'utente si disconnette e può anche essere disabilitato.

Modifica: idealmente qualcosa che può essere facilmente attivato e disattivato.


ttyrpldsembra buono. raccomandato in questa domanda. serverfault.com/questions/40011/…
hayalci

Risposte:


16

come root, potresti sostituire la loro shell con un semplice script wrapper che registrava i loro comandi prima di passarli alla shell reale. Funzionerebbe solo prima che accedessero.


20
Lo abbiamo fatto per monitorare un account compromesso presso un precedente datore di lavoro. Creato "/ bin / bash" (nota lo spazio) che era un wrapper attorno al comando script. Ha funzionato come un fascino :)
comandante Keen

Molto intelligente! +1
EMP,

9

Usa Sniffy se vuoi entrare nella sessione dell'utente o screen -xse hai una collaborazione.

Tieni presente, tuttavia, che lo spionaggio dei tuoi utenti potrebbe essere soggetto a normative o addirittura completamente illegale a seconda della legislazione locale.


7

Cambiare la shell è molto banale da aggirare, patchare la shell stessa è meglio, ma devi patchare tutte le shell. Il nostro cracker preferito lo usa, come bonus non si preoccupa di disabilitare bash_history.

ssh host /bin/sh -i  

Snoopy è un wrapper per le funzioni exec e registra qualsiasi binario esterno che viene eseguito (non i builtin della shell)

Il suggerimento di @David Schmitt sniffy usa un metodo migliore, tocca lo pseudoterminale.

ttysnoop utilizza lo stesso metodo, ma non è mantenuto. (Probabilmente ho avuto problemi a fare il log delle connessioni ssh, non riesco a ricordare)

Puoi provare a patchare ssh per registrare una sessione, ma quella patch è vecchia .

pseudopodi e rooth possono essere utilizzati per la registrazione di sudos legittimi. E shwatcr è un'altra cosa per monitorare gli accessi.


Cosa ssh host /bin/sh -idovrebbe fare esattamente ?
Mike Pennington,

+1 per snoopy, non perfetto ma ha fatto quello di cui avevamo bisogno.
skinp

4

Se stai collaborando, puoi usare lo schermo GNU tra due utenti: fai in modo che uno stabilisca la sessione dello schermo, quindi usa l'altro join screen -x.

Se si desidera che "spionaggio" di root su altri utenti a loro insaputa, la soluzione migliore ed efficiente potrebbe essere il software / hardware keylogger.


4

Sysdig è un potente strumento di esplorazione a livello di sistema - questo è quello che vuoi;)

esempio:

sysdig -i spy_users

Categoria: Sicurezza

spy_users Visualizza l'attività dell'utente interattivo

elenca tutti i comandi che gli utenti lanciano in modo interattivo (ad es. da bash) e ogni directory visitata dagli utenti



1

Ho scritto un metodo per registrare tutti i comandi / builtin 'bash' in un file di testo o in un server 'syslog' senza usare una patch o uno strumento eseguibile speciale.

È molto facile da implementare, in quanto è un semplice shellscript che deve essere chiamato una volta durante l'inizializzazione di 'bash'.

Vedi il metodo qui: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger


Benvenuti in Server Fault! Preferiamo davvero che le risposte abbiano contenuto, non puntatori al contenuto. Ciò garantisce che la risposta rimarrà disponibile anche se il collegamento non funziona. Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
user9517 supporta GoFundMonica il

Benvenuti in Server Fault! Si prega di leggere la nostra FAQ in particolare Posso promuovere prodotti o siti Web a cui sono affiliato qui? .
user9517 supporta GoFundMonica il

1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Sembra funzionare abbastanza bene se non ti dispiace ordinare un sacco di interruzioni di riga.


1

Snoopy è progettato per la registrazione dei comandi leggera.

Se vuoi la visualizzazione live dei comandi eseguiti sul tuo sistema, potrebbe essere questo. Attenzione: snoopy non è una soluzione di controllo adeguata e può essere facilmente aggirato.

Tuttavia, se desideri vedere tutti i caratteri digitati nel terminale, dovrai utilizzare un altro strumento.

Divulgazione: sono l'attuale manutentore di snoopy.


-3

prova questa esportazione HISTTIMEFORMAT = "% T" esegui un paio di comandi e "history" in seguito ...

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.