Dopo aver creato ed installato i pacchetti ssh con la patch per effettuare il chroot è tempo di creare fisicamente la gabbia sul disco ed un’utenza di test.
Creazione della gabbia
L’ambiente chroot in cui si muoverà l’utenza dopo aver effettuato il login dovrà essere composto sulla base delle limitazioni che si decideranno di applicare. Per il progetto descritto sinora è stato utilizzato uno script denominato create_chroot_env.sh (scaricabile nella sezione “allegati”) che accetta come parametro una directory nella quale è creato un ambiente base che comprende unicamente gli eseguibili necessari all’esecuzione della shell “bash”, del comando per il listing delle directory “ls” e di ssh stesso, in modo da consentire all’utente il collegamento sicuro ad altre macchine remote.
Una volta scaricato lo script è sufficiente eseguirlo passando come parametro la cartella nella quale verrà creata la gabbia chroot, /chroot:
# ./create_chroot_env.sh /chroot
Lo script creerà i path base, copierà gli eseguibili e le librerie ad essi associate ed infine creerà i device fondamentali al funzionamento del sistema chroot. Nulla vieta di modificare create_chroot_env.sh per aggiungere un programma diverso da quelli menzionati all’ambiente.
Ovviamente insieme ad ogni eseguibile aggiunto andranno aggiunte anche le librerie necessarie al suo funzionamento. Tali librerie sono ricavabili ad esempio attraverso il comando ldd. Per il comando ftp ad esempio l’esito di ldd sarà il seguente:
# ldd /usr/bin/ftp
linux-gate.so.1 => (0xb7f74000)
libreadline.so.5 => /lib/libreadline.so.5 (0xb7f27000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7ef6000)
libc.so.6 => /lib/libc.so.6 (0xb7da9000)
libdl.so.2 => /lib/libdl.so.2 (0xb7da4000)
/lib/ld-linux.so.2 (0xb7f75000)
aggiungendo l’eseguibile /usr/bin/ftp e le librerie ricavate da ldd nella cartella lib/ dell’ambiente chroot, sarà possibile lanciare ftp dalla gabbia creata. Una nota di attenzione va posta sulle librerie ottenute con ldd che in realtà sono link simbolici. Nell’esempio appena riportato libreadline.so.5 è in realtà un link simbolico a libreadline.so.5.2, di conseguenza anche quest’ultimo file andrà copiato nella directory lib della gabbia chroot.
Creazione della prima utenza “carcerata”
Per completare il progetto manca solo la creazione di un utente con password che sia carcerato all’interno dell’ambiente chroot:
# useradd -s /bin/bash -m -d /home/chroottest -g users chroottest
# passwd chroottest
Il primo comando crea l’utente, lo assegna al gruppo users e crea la home directory, il secondo assegna la password per il login. La cartella “/home/chroottest” andrà spostata nella gabbia con i permessi limitati al solo utente:
# mv /home/chroottest /chroot/home/
# chmod 700 /chroot/home/chroottest/
Il comando useradd ha creato la riga relativa all’utente nel file di sistema /etc/passwd, tale riga deve essere presente nel file passwd dell’ambiente chroot. Tale operazione è possibile attraverso questo comando:
cat /etc/passwd | grep “^chroottest” >> /chroot/etc/passwd
A completamento della configurazione dell’utenza è necessaria la modifica della home directory all’interno del file passwd di sistema, vero nodo focale del progetto:
usermod -d /chroot/./home/chroottest chroottest
Questa definizione della home directory permetterà al demone ssh di identificare l’utente come un prigioniero della gabbia e muoverlo prima di aprire una shell all’interno del path che segue il carattere “.”.
Il processo descritto può essere automatizzato con uno script come create_chroot_user.sh (scaricabile nella sezione “allegati”) al quale verrà passato il parametro relativo al nome utente :
# ./create_chroot_user.sh chroottest
Enter new UNIX password:
Retype new UNIX password:
passwd: password aggiornata correttamente
Primo login
Per verificare che le operazioni eseguite abbiano portato al risultato sperato è sufficiente effettuare una connessione ssh alla macchina con l’utente chroottest:
$ ssh [email protected]
[email protected]’s password:
Last login: Thu Jan 31 19:31:18 2008 from 192.168.0.1
chroottest@debian:~$pwd
/home/chroottest
e verificare come non sia possibile retrocedere oltre la directory “/”:
chroottest@debian:~$ cd /
chroottest@debian:/$ ls
bin dev etc home lib
chroottest@debian:/$ cd ..
chroottest@debian:/$ ls
bin dev etc home lib
L’utente chroottest è prigioniero della gabbia creata e possiede un set di comandi limitato a quanto è stato stabilito in origine. Il progetto può dirsi quindi completo.
Siti ufficiali
OpenSSH
Patch CHROOT per OPENSSH
Bibliografia
Le pagine del Securing Debian Manual relative al chroot di ssh
Allegati
Script per la creazione della gabbia e dell’utente
LEZIONI:
13 Febbraio 2008: SSH in CHROOT: Una gabbia per la shell sicura (1/2)
22 Febbraio 2008: SSH in CHROOT: Una gabbia per la shell sicura (2/2)
di Raoul Scarazzini - TuxJournal.net