Page 1 of 1

[HowTo] Autologout dalle sessioni di terminale: Bash e SSH

Posted: Sat May 15, 2004 9:20 pm
by FonderiaDigitale
Se avete un server, ma anche un pc desktop a cui accedono molte persone, sicuramente avrete di volta in volta molte sessioni bash o ssh aperte.

Questo in genere non e' una bella cosa, specie se le sessioni sono idle (ovvero inattive).
Aggiungeteci che di norma voi non vi fidate dei vostri utenti, specie di quelli remoti (e voi lo fate, vero? :roll:)

Considerate questo esempio:
Il Cantastorie dei Gechi wrote:Un bel giorno, voi decidete di dare accesso SSH al vostro amico Stefano, perche' sapete che e' uno in gamba e non potrebbe, normalmente, far danni nel vostro sistema.
Forti di questa convinzione, dormite sonni tranquilli.
Una sera, il vostro amico Stefano si logga nella vostra macchina, ma si dimentica di uscire (logout) una volta fatto quel che doveva (o semplicemente per pigrizia non lo fa).
Mettete che arriva un amico di stefano a casa sua, e vede la sessione.
L'amico non e' poi tanto preparato o semplicemente vuole far danni: cancella quel file importante a cui ha accesso anche stefano, e il giorno dopo Stefano si accorge del danno, ma ormai il dado e' tratto. E sopratutto le sue scuse, per voi, ormai servono a poco.
Vi assicuro che questa eventualita' e' tutt'altro che rara, e inoltre e' solo un esempio: in tutti questi casi, DOVETE assicurarvi che chi non lavora nella vostra macchina, non ci stia. punto e accapo.

Come possiamo fare? ve lo spiego subito.
[n.b.] la soluzione che propongo in questo messaggio e' una delle tante possibili, ma per una questione di semplicita', preferisco non trattare altri esempi in questa sede, e coprire una utenza quanto maggiore possibile :)

Bash: la console

Questo vale per utenti locali.

Code: Select all

echo 'TMOUT=3600' >> /etc/profile
3600 sono i secondi prima che una shell che non riceve input venga terminata. In questo caso, equivale esattamente a 1 ora.

Per estendere la cosa alla sessione corrente, che ovviamente non conosce le modifiche fatte, basta un

Code: Select all

source /etc/profile
SSH: sessioni remote

Questa dovrebbe essere la maggiore preoccupazione per noi in questo articolo.

>>> Se usate SSH commerciale come me, e' molto semplice.

Code: Select all

echo 'IdleTimeOut 1h' >> /etc/ssh2/sshd2_config
/etc/init.d/sshd2 restart
le scelte sono:
1h = 1ora
1s = 1secondo
1d = 1giorno

e cosi' via.


>>> Se usate OpenSSH, il discorso diventa piu' complesso: questo software non dispone di un controllo diretto sul tempo di idle di una sessione interattiva, ma possiamo ovviare in questo modo:

Code: Select all

nano /etc/ssh/sshd_config
modificare la direttiva UseLogin a "yes"

Code: Select all

/etc/init.d/openssh restart
scarichiamo un programmino in perl che killa le sessioni di login inattive

Code: Select all

wget -O /sbin/idlekill "http://jon.swelter.net/idlekill"
chmod u+x,go-rwx /sbin/idlekill
perl -MCPAN -eshell
configuriamo i moduli del perl necessari. al prompt cpan>:

Code: Select all

install Sys::Utmp
exit
crontab -u root -e
editiamo crontab e aggiungiamo lo script ogni 5 minuti

Code: Select all

*/5 * * * * /sbin/idlekill -a -i 3600 -s 9
anche qui 3600=1 ora.


Adesso avrete un piccolo livello di sicurezza in piu per il vostro sistema.
Buon lavoro :)

Re: [HowTo] Autologout dalle sessioni di terminale: Bash e S

Posted: Tue May 18, 2004 8:03 am
by BlueRaven
FonderiaDigitale wrote:>>> Se usate OpenSSH, il discorso diventa piu' complesso: questo software non dispone di un controllo diretto sul tempo di idle di una sessione interattiva
Vero in parte: il risultato in oggetto si può ottenere combinando opportunamente le opzioni

Code: Select all

ClientAliveInterval
e

Code: Select all

ClientAliveCountMax
Per tutti i dettagli, man sshd_config(5).
Che poi con SSH commerciale sia più semplice e intuitivo non ci piove! ;-)

Posted: Tue May 18, 2004 8:10 am
by FonderiaDigitale
sbagliato.
quello di cui parli tu si riferisce al keepalive di una connessione, ovverosia quelle due direttive influiscono solo sul comportamento della connessione, ovvero se 'sta appesa' , se cade, o se e' ancora attiva.

NON e' affatto pertinente se si vuole impedire a un utente di rimanere idle dentro una macchina, ne valuta l'interattivita' di una sessione (ovvero se uno scrive in console o no).

Per di piu', e' facilmente alterabile da parte del client (basta istruire il client a mandare messaggi NOOP ogni tot secondi).

Openssh non ha nessun supporto ufficiale per idle-timeout, ci sono delle patch non ufficiali in giro ma non sono applicabili alle ultime versioni, ne sono testate.

Ti invito a leggere questo cosi da toglierti ogni dubbio.

Ti invito anche a rileggere bene il significato delle due direttive che citi.

Posted: Tue May 18, 2004 8:35 am
by stuart
echo 'TMOUT=3600' >> /etc/profile
ti chiedo due informazioni su questa opzione
1. va messa su tutti gli utenti in .bash.rc, se non sbaglio, ma se uno diventa root con su cosa succede?
2. se lancio un emerge di diverse ore (con il mio pc succede spesso) si auto-slogga lo stesso o considera la compilazione come input?

scusa per le domande che per alcuni potrebbero essere banali, ma per me purtroppo no

Posted: Tue May 18, 2004 8:44 am
by FonderiaDigitale
nessun problema :)

1. vale la prima sessione bash aperta. quindi se non c'e' input da parte dell'utente, viene killata.
2. no, se un utente non scrive nulla, la killa. puoi mettere una cosa di questo genere solo per root, in /etc/bashrc

Code: Select all

[ ${UID} == 0 ] unset TMOUT
e fare dei symlinks al file nelle home degli utenti (o lo metti in /etc/skel)

calcola pero' che cosi dai per scontato che root sia affidabile.
un'altra possibilita' e' fare il solito scriptino... (si lo so, sono malato)

Code: Select all

#!/bin/sh
unset TMOUT
emerge $*
export TMOUT=3600

lo lanci tipo come se fosse emerge, passandogli i parametri di emerge.

Posted: Tue May 18, 2004 8:58 am
by BlueRaven
FonderiaDigitale wrote:quello di cui parli tu si riferisce al keepalive di una connessione, ovverosia quelle due direttive influiscono solo sul comportamento della connessione, ovvero se 'sta appesa' , se cade, o se e' ancora attiva.
Vero, mi era sfuggito che si stava parlando di sessioni interattive, sorry! ;-)