L’obiettivo è di avere account utente su mandriva 2007 che accedono via sftp solo ad alcune cartelle del file system su protocollo SFTP.
Questo si ottiene facilmente su protocollo FTP, per esempio con proFTTD, che ha la funzione nativa di chrootare gli utenti ftp. Tuttavia ho scartato il protocollo ftp per ovvi motivi di bassa sicurezza.
OpenSSH che fornisce anche un sftp-server invece non ha la funzione nativa di chroot per gli utenti sftp e così è necessario fare un bel casino per ottenere di non far gironzolare gli utenti per il file system.
Una volta installato OpenSSH e aver abilitato l’sftp (di solito lo è di default), si installa rssh, disponibile come RPM su mandriva 2007.
Si crea quindi un nuovo utente linux (o si modifica un utente esistente che si desidera chrootare), e si edita il file /etc/passwd dandogli come shell proprio rssh al posto di bash:
nomeutente:x:502:503::/home/nomeutente:/usr/bin/bash
diventa
nomeutente:x:502:503::/home/nomeutente:/usr/bin/rssh
Quindi si edita il file /etc/rssh.conf scommentando questa riga:
allowsftp
e impostando la chroot, esempio:
chrootpath = /percorso-che-si-desidera-come-root-del filesystem
Fatto questo viene impedito l’accesso shell via ssh all’utente e ne viene consentito solo l’accesso via sftp. Accedendo però via sftp l’utente si trova un filesystem vuoto senza cartelle. Gli va ricreato un piccolo ambiente con librerie e altri file proprio nella chroot.
Questo compito viene assolto da uno script, mkchroot.sh, che però misteriosamente non è incluso nell’RPM di mandriva 2007.
Lo si può recuperare dall’RPM di un’altra distribuzione, per esempio questo.
Lo si scarica, ma anziché installarlo lo si apre come archvio e si estrae il file mkchroot.sh nella cartella:
/usr/share/doc/rssh-2.3.2/
e magari lo si rende eseguinbile con un
chmod 755 (eseguito come root)
All’interno del file, vanno modificati i percorsi di alcuni file, ovvero i riferimenti a rssh e openssh devono diventare così:
sftp_server_path=”/usr/lib/ssh/sftp-server”
rssh_path=”/usr/bin/rssh”
chroot_helper_path=”/usr/lib/rssh_chroot_helper”
Quindi si lancia lo script:
./mkchroot.sh /percorso-che-si-desidera-come-root-del filesystem
che crea tutta una serie di cartelle e di file proprio nella chroot.
Fatto questo, va copiata nella chroot l’intera cartella /lib/ di sistema. Metodo grezzo, ma non facendo così poi l’accesso non funziona.
Da ultimo, se provando ad accedere in sftp con l’utente chrootato si ottiene un connection close, lanciare questo comando:
mknod -m 666 /percorso-che-si-desidera-come-root-del filesystem/dev/null c 1 3
A questo punto l’utente chrootato può accedere via sftp senza andare a rompere i coglioni in giro per il file system.
Ringrazio caldamente me stesso per aver trovato questa soluzione e tutti quelli (tanti) di cui ho raccolto i suggerimenti a pezzi, ma nessuno aveva a che fare con Mandriva 2007.