OpenSSH è lo strumento per la connessione a sistemi remoti più utilizzato negli ambienti Linux: è sicuro, veloce e facile da installare. Un utente che si collega ad un Server attraverso ssh effettua un vero e proprio login nel sistema ed ha pieno accesso alle funzionalità che questo offre.
Su alcuni sistemi può però nascere l’esigenza di dover garantire l’accesso ssh ad utenze non privilegiate, che non abbiano cioè la possibilità di aggirarsi per il sistema. Certo una gestione oculata dei permessi di accesso ed esecuzione ai file critici può bastare per proteggersi, ma esiste una via più radicale per affrontare la questione, si tratta cioè della creazione di una gabbia che consenta all’utente l’utilizzo del sistema limitato ai comandi ed ai file definiti dall’amministratore : il chroot di ssh.
Significato di chroot e sua applicazione alla shell sicura
Il termine chroot (CHange ROOT) indica una forma di accesso diversa dallo standard, in un sottosistema generalmente contenente un numero di directory ed un set di comandi limitato.
Gli ambienti chroot vengono impiegati laddove si ha la necessità di far girare dei servizi in sicurezza in modo che se questi vengono in qualche modo violati, non consentono all’attaccante di aggirarsi per il sistema.
Il concetto di chroot applicato ad ssh si basa sulla stessa filosofia: restringere il set di file visionabili e comandi eseguibili i attraverso una gabbia, un filesystem ridotto all’essenziale.
osshChroot : la patch per openssh
Per utilizzare il chroot con ssh è necessario applicare una patch ai sorgenti originali del pacchetto openssh creata da Ricardo Cerqueira e mantenuta da James Dennis.
Tale patch modifica il comportamento in cui il demone openssh legge le informazioni dell’account dal file di sistema /etc/passwd. Infatti il codice aggiunto prevede che se nella home directory dell’utente che vuole effettuare il login esiste un carattere “.” (punto), allora prima di proseguire con la direzione della console alla homedir viene invocato il comando chroot sulla directory precedente il punto.
Questo significa, ad esempio, che se è stato costruito un ambiente chroot nella directory /chroot ed esiste un utente foo la cui homedir è /chroot/./home/foo, questo effettuerà il login nell’ambiente chroot creato sotto /chroot che corrisponderà per l’utente a / e la directory in cui si troverà sarà /home/foo.
Grazie a questa funzionalità sarà semplice separare utenti privilegiati da utenti “carcerati” all’interno della gabbia /chroot.
Patching, compilazione e creazione del pacchetto openssh
La procedura descritta si riferisce alla compilazione del pacchetto openssh in Debian Etch 4.0.
Per predisporre il sistema a compilare sorgenti e generare pacchetti è necessario installare i due pacchetti (e le dipendenze ad essi correlate) build-essential e devscripts:
apt-get install build-essential devscripts
Il sistema è pronto a compilare e produrre pacchetti, una volta reperiti i sorgenti di openssh attraverso il comando apt-get:
apt-get source openssh
E’ sufficiente scaricare la patch osshChroot tramite wget :
wget http://chrootssh.sourceforge.net/download/osshChroot-4.2p1.diff
Ed applicarla ai sorgenti:
cd openssh-4.3p2/
patch -p1 < ../osshChroot-4.2p1.diff
quindi attraverso la modifica del file debian/changelog o attraverso il comando debchange inseriamo le note per questo pacchetto, che riguardano essenzialmente la patch per il chroot e che hanno questa forma:
openssh (1:4.3p2-9chroot) unstable; urgency=high
[ RaSca ]
* chroot patch
-- root <root@debian.testlan.local> Wed, 6 Feb 2008 16:00:08 +0100
prima di lanciare la compilazione dei sorgenti andranno soddisfatte tutte le dipendenze delle librerie del pacchetto openssh. Attraverso l’opzione build-dep del comando apt-get si può automatizzare questo processo:
apt-get build-dep openssh
E’ possibile quindi avviare la compilazione e generazione dei pacchetti attraverso il comando debuild:
debuild
I pacchetti verranno generati nella directory sottostante quella dei sorgenti:
cd ..
ls -1 *.deb
openssh-client_4.3p2-9_i386.deb
openssh-server_4.3p2-9_i386.deb
ssh_4.3p2-9_all.deb
ssh-askpass-gnome_4.3p2-9_i386.deb
ssh-krb5_4.3p2-9_all.deb
e potranno essere installati nel sistema attraverso il comando dpkg :
dpkg -i ssh_4.3p2-9chroot_all.deb openssh-client_4.3p2-9chroot_i386.deb openssh-server_4.3p2-9chroot_i386.deb
Nel prossimo articolo verrà analizzata la creazione dell’ambiente chroot e della prima utenza che vi effettuerà il login.
La serie comprende questi articoli :
SSH in CHROOT: Una gabbia per la shell sicura (1 di 2)
SSH in CHROOT: Una gabbia per la shell sicura (2 di 2)
Nota :
Questo articolo è originariamente apparso su Tux Journal nel Febbraio 2008.
Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.
Lascia un commento