Sebbene questa domanda sia stata posta da una persona che desidera registrare le proprie sessioni, un caso d'uso alternativo potrebbe essere un amministratore di sistema che desidera tenere traccia di ciò che stanno facendo i vari utenti.
Temo che correre script
all'interno del sistema bashrc
potrebbe non essere adatto nel caso in cui gli utenti della macchina siano riluttanti a fare registrazioni delle loro sessioni.
Gli utenti che desiderano rimanere in incognito potrebbero ignorare la registrazione chiedendo a sshd di aprire una shell diversa (ad es. zsh
) O eseguire bash --rcfile ___
per impedire il /etc/bash.bashrc
caricamento.
Un approccio alternativo
Questa guida del 2008 ( archiviata ) utilizza un metodo diverso per forzare script
l'esecuzione quando un utente accede con ssh, il che richiede agli utenti di accedere con una chiave pubblica / privata.
Questo viene fatto aggiungendo uno script al .ssh/authorized_keys
file dell'utente , davanti alla chiave:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
Lo script log-session
( archiviato ) decide quindi se eseguire o meno /usr/bin/script
per registrare la sessione di questo utente.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Per impedire all'utente di rimuovere il comando aggiunto, l'amministratore dovrà assumere la proprietà del authorized_keys
file dell'utente .
chown root:root ~user/.ssh/authorized_keys
Sfortunatamente, ciò significa che l'utente non sarà in grado di aggiungere altre chiavi se stesso o, soprattutto, di revocare la chiave esistente se è compromessa, il che è tutt'altro che ideale.
Avvertenze
È comune per la configurazione predefinita di sshd consentire agli utenti di eseguire SFTP sul proprio login ssh. Ciò offre agli utenti un modo per modificare i file senza che le modifiche vengano registrate. Se l'amministratore non desidera che gli utenti siano in grado di farlo, dovrebbe abilitare un po 'di registrazione per SFTP o disabilitare il servizio. Anche se anche allora, gli utenti potrebbero ancora apportare modifiche invisibili ai file eseguendo qualcosa di simile nel loro terminale:
curl "http://users.own.server/server/new_data" > existing_file
Potrebbe essere possibile monitorare tali cambiamenti utilizzando un filesystem copy-on-write che registra tutta la cronologia dei file.
Ma un trucco simile consentirebbe a un utente di eseguire comandi senza che vengano registrati:
curl "http://users.own.server/server/secret_commands_824" | sh
Non conosco soluzioni facili a questo. Le possibilità potrebbero essere:
- Registrare tutti i dati di rete (e districarli in seguito).
- Registrazione di tutte le chiamate di sistema.
Questo genere di cose potrebbe essere possibile con auditd .
Ma in ogni caso...
È improbabile che la registrazione delle sessioni utente offra una sicurezza reale agli amministratori. Per impostazione predefinita, un utente può solo manipolare i propri file e non può danneggiare il sistema. Se un utente malintenzionato è riuscito a intensificare i privilegi, potrebbe disabilitare la registrazione ed eliminare i registri (a meno che l'amministratore non abbia configurato i registri per essere archiviati su un computer separato, in modo solo accodamento).
Gli amministratori che registrano automaticamente le sessioni degli utenti dovrebbero probabilmente informare gli utenti che ciò è stato fatto . In alcune giurisdizioni, questa forma di raccolta dei dati potrebbe violare le leggi sulla privacy o dei dati . E per lo meno, sarebbe rispettoso per gli utenti renderli consapevoli.
È più probabile che un amministratore sia interessato a registrare le sessioni degli sudo
utenti. Ciò potrebbe forse essere affrontato in una risposta diversa, o in effetti in una domanda diversa.
exec
all'inizio della riga. dovrebbe iniziare ilscript -f
PID nella stessa shell.