6.2. Sessioni condivise

Sessioni di terminale condivise da più di un utente in contemporanea possono essere molto utili. In alcune occasioni, mi è stato chiesto di sistemare macchine da una postazione remota (tipo per il supporto di schede audio o di XFree86) e la controparte desiderava tenere una traccia completa delle mie operazioni (a scopo educativo e di controllo).

È possibile ottenere questo effetto utilizzando sia screen che ttysnoop.

6.2.1. screen

Utilizzare screen per creare sessioni condivise è molto facile, ma richiede la collaborazione di entrambe le parti (così è necessario avere reciproca fiducia) e comporta la condivisione della password dell'account (che è una cosa brutta se inizia a diventare una abitudine). Tutto ciò che si deve fare è effettuare il login per esempio con "nomeutente1" (ssh -l nomeutente1 localhost) e avviare "screen", poi aspettare che la controparte effettui il login sul sistema (con il medesimo nome utente, naturalmente) e avviare "screen -x".

(Questo suggerimento è stato fornito da electr0n@OPN).

6.2.2. ttysnoop

ttysnoop è uno strumento banale ma molto utile che può essere utilizzato per condividere, monitorare o controllare terminali utente. L'abilitazione di ttysnoop sulla propria macchina è pericolosa; può violare le proprie politiche di sicurezza o lasciare il sistema in uno stato inutilizzabile se non viene fatto correttamente. ttysnoop stesso non necessita di nessuna impostazione particolare (a parte forse il file /etc/snooptab) se entrambe le parti cooperano (una avvia il server ttysnoops, e l'altra avvia il client ttysnoop). Tuttavia installarlo in modo che ttysnoops venga avviato durante il login richiede alcune modifiche nei file di configurazione di sistema.

Vi mostreremo qui come rimpiazzare il binario di login del sistema con ttysnoops e come abilitarlo per le connessioni ssh. La procedura è delicata, come abbiamo già detto, così commenteremo ciascuna riga che si sta per eseguire nella propria shell.

AttenzioneAttenzione
 

Il file /bin/login, una parte importante di ogni sistema Unix, verrà modificato. Questo significa che tutte le applicazioni che utilizzano /bin/login saranno interessate; in altre parole, potrebbe diventare possibile, per utenti che possiedono la password di root, monitorare e controllare completamente quei flussi di dati testuali (con la password di root possono farlo in ogni caso, ma non "così" facilmente). Non si dovrebbe notare alcuna modifica visibile, ma prego di comprendere che il server ttysnoops si frappone tra il programma login e l'utente (/dev/ttyp*). Se si desidera che servizi specifici non utilizzino il comando /bin/login "snoopizzato", occorre istruirli ad utilizzare /bin/login.real come programma di login (che è esattamente quello che faremo con il sistema getty).

(1) # dpkg-divert --divert /bin/login.real --add /bin/login
(2) # mv /bin/login /bin/login.real
(3) # echo "* socket login /bin/login.real" > /etc/snooptab
(4) # cp /etc/inittab /etc/inittab.valid
(5) # perl -p -i,orig -e 's#getty#getty -l /bin/login.real#g'
                  /etc/inittab
(6) # ln -sf /usr/sbin/ttysnoops /bin/login
(7) # init q
(8) # echo "UseLogin yes" >> /etc/ssh/sshd_config
(9) # /etc/init.d/ssh restart	

(1)
Abbiamo già descritto il comando dpkg-divert precedentemente. Esso "devia" il file /bin/login su /bin/login.real, stando a significare che i pacchetti che contengono il file /bin/login, lo decomprimeranno in una posizione differente, ovvero /bin/login.real. Per annullare questo passaggio, si utilizzi dpkg-divert --remove /bin/login.
(2)
Spostare /bin/login su /bin/login.real. Il login di sistema sarà corrotto fino al passaggio 6, quando ricreeremo il file /bin/login. Per annullare questo passaggio, usare mv /bin/login.real /bin/login.
(3)
Creare il file /etc/snooptab che contiene una sola regola "* socket login /bin/login.real". Si veda man ttysnoop(8) per i dettagli.
(4)
Si crei una copia del file /etc/inittab in /etc/inittab.valid. Questo è importante; se succede qualcosa di brutto a /etc/inittab ci si potrebbe ritrovare con un sistema inutilizzabile, così avere disponibile una valida copia è consigliato (anche il lasciare una shell aperta, così da potere mettere al suo posto il file valido anche se si corrompe il login di sistema).
(5)
Utilizzando Perl, modificare il file /etc/inittab nella sua posizione, e rimpiazzare ogni occorrenza di "getty" con "getty -l /bin/login.real". La copia del file originale viene salvata in /etc/inittab,orig. Mai avviare questo comando due volte prima di aver rimesso il file .orig al suo posto (o si finirà con qualcosa del tipo "getty -l /bin/login.real -l /bin/login.real"). In caso di problemi, si copi il file .valid dal passo precedente in /etc/inittab. Si noti anche che utilizziamo "getty -l" (dove -l è -L minuscolo, non il numero -1).
(6)
Ricreiamo /bin/login, facendolo diventare un collegamento simbolico a /usr/sbin/ttysnoops, il server ttysnoop.
(7)
Si ricarichi il processo init che rilegge il file /etc/inittab. Se si fa un errore in qualcuno dei passaggi precedenti probabilmente le proprie console locali non funzioneranno più; questo è il motivo per cui abbiamo suggerito di lasciare una shell aperta e di avere una copia originale di /etc/inittab. Se si decide di tornare al vecchio inittab, non si dimentichi di spostare anche il file login.real al suo posto e rimuovere il trasferimento.
(8)
Aggiungiamo "UseLogin yes" alla fine del file di configurazione di sshd.
(9)
Riavviamo il demone sshd.

AvvertimentoAttenzione
 

Abilitare ttysnoop sulla propria macchina è pericoloso; può violare le proprie politiche di sicurezza o lasciare il sistema in uno stato inusabile se non viene fatto correttamente. Per esempio, se si perde la possibilità di avviare X come utente regolare di sistema, probabilmente non si è fatto in modo che getty usi il programma login originale, perciò si risolva il problema o si avvii dpkg-reconfigure xserver-common e si abiliti chiunque ad avviare il server X (una brutta cosa da farsi).

Si può testare localmente l'impostazione (ma la stessa idea si applica ai login remoti naturalmente):

Quando si permette alle persone di fare il login da remoto sulla propria macchina, ssh è il metodo fortemente preferito. Non si pensi nemmeno a telnet (che è un servizio insicuro e non cifrato). Se si hanno particolari necessità o si richiede telnet ugualmente, si consultino le configurazioni funzionanti dai file di esempio in /etc/snooptab.