SSH in CHROOT: la soluzione nativa

35

openssh

Nei precedenti articoli pubblicati nella serie “SSH in CHROOT: Una gabbia per la shell sicura” parte 1 e parte 2, veniva affrontato il tema della messa in sicurezza di SSH attraverso una Patch che obbligava determinati utenti a rimanere chiusi all’interno di una gabbia virtuale.
Dalla versione 5 di SSH però è possibile sfruttare un meccanismo nativo che implementa il CHROOT. Ecco spiegato come.

Capire la versione di SSH installata nel sistema

Prima di procedere con la configurazione del pacchetto è bene accertarsi che la versione di SSH installata nel sistema sia uguale o superiore alla 4.8p1, su sistemi Debian e derivati, l’interrogazione è possibile attraverso il seguente comando:

# dpkg -l openssh-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Nome                                    Versione                                Descrizione
+++-=======================================-=======================================-==============================================================================================
ii  openssh-blacklist                       0.4.1                                   list of default blacklisted OpenSSH RSA and DSA keys
ii  openssh-blacklist-extra                 0.4.1                                   list of non-default blacklisted OpenSSH RSA and DSA keys
ii  openssh-client                          1:5.1p1-5                               secure shell client, an rlogin/rsh/rcp replacement
ii  openssh-server                          1:5.1p1-5                               secure shell server, an rshd replacement

Mentre in sistemi RedHat e derivati è sufficiente interrogare l’elenco pacchetti installati con rpm:

$ rpm -qa openssh*
openssh-4.3p2-16.el5
openssh-askpass-4.3p2-16.el5
openssh-clients-4.3p2-16.el5
openssh-server-4.3p2-16.el5

Nei casi riportati, sul sistema Debian (versione Lenny) la versione di SSH supporta nativamente il Chroot mentre il sistema RedHat (versione 5) no. In questo caso è necessario eseguire l’aggiornamento del pacchetto se ne si vorrà sfruttare la nuova funzionalità, ricompilando localmente la versione 5 partendo dai sorgenti disponibili presso il sito ufficiale del progetto OpenSSH oppure scaricando un rpm precompilato da repository pubblici come http://www.rpmfind.net.

Come funziona il CHROOT nativo

Il metodo con cui il demone SSH, previa configurazione, costruisce la gabbia per l’utente che effettua la login può essere diviso in due tipologie: l’accesso diretto via ssh e quello via sftp.
Nel primo caso la directory nella quale l’utente effettuerà il login dovrà contenere la struttura essenziale di file e directory necessaria alla navigazione all’interno del sistema, mentre attraverso il funzionamento sftp il demone non necessiterà di un ambiente nativo, ma sfruttando il comando interno sftp, fornirà l’interfaccia di accesso al sistema.

Predisposizione del sistema

I test che verranno effettuati nel corso dell’articolo partiranno dal presupposto che esista un gruppo denominato test e che tutte le utenze facenti parte di questo gruppo vengano ingabbiate.
Verrà quindi creato un utente denominato test con cui verranno effettuate le prove:

$ adduser test

Il comando crea automaticamente il gruppo omonimo.
Terminata la creazione dell’utente di test è necessario creare la struttura relativa alla gabbia. Per far questo è possibile utilizzare lo script create_chroot_env.sh contenuto nel file ssh-in-chroot-scripts.tar presentato nella precedente serie di articoli.
Lanciando il comando come segue:

$ ./create_chroot_env.sh /chroot

nella cartella /chroot verrà creato un ambiente con tutti i requisiti imposti da ssh per l’implementazione della gabbia.
Requisito essenziale per il corretto funzionamento del sistema è che la cartella nella quale verrà impostata la gabbia sia accessibile in scrittura alla sola utenza di root. Avendo lanciato lo script come utente root (non sarebbe possibile altrimenti utilizzare il path definito) tale requisito è pienamente rispettato.

Configurazione del demone per l’utilizzo via ssh

A questo punto la configurazione del server ssh andrà variata per supportare il chroot esclusivamente per le utenze facenti parte del gruppo test attraverso l’aggiunta delle seguenti righe nel file /etc/ssh/sshd_config:

Match Group test
        ChrootDirectory /chroot/

terminata la modifica le configurazioni andranno ricaricate attraverso il seguente comando:

$ /etc/init.d/ssh reload

Verifica del funzionamento

Per verificare il funzionamento della gabbia è sufficiente effettuare il login nel sistema e controllare come e se sia possibile muoversi all’interno di questo:

$ ssh test@172.16.1.130
test@172.16.1.130's password: 
Linux anomalia 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun  9 23:09:39 2009 from 172.16.1.1
-bash-3.2$ pwd
/
-bash-3.2$ ls
bin  dev  etc  home  lib
-bash-3.2$ cd ..
-bash-3.2$ pwd
/
-bash-3.2$ ls
bin  dev  etc  home  lib

l’output illustrato conferma le aspettative: a login effettuato non è possibile scorrere il path precedente alla cartella /. La gabbia funziona.

Configurazione del demone per l’utilizzo via sftp

La configurazione impostata non prevede l’utilizzo di sftp, infatti un tentativo di connessione non andrebbe a buon fine:

$ sftp test@172.16.1.130
Connecting to 172.16.1.130...
test@172.16.1.130's password: 
subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer

per fare in modo che questo tipo di connessione sia utilizzabile, è necessario modificare nuovamente /etc/ssh/sshd_config sostituendo la riga

Subsystem sftp /usr/lib/openssh/sftp-server

con

Subsystem sftp internal-sftp

In questo modo si indica ad ssh di utilizzare per il comando sftp non lo script locale /usr/lib/openssh/sftp-server ma la versione interna al demone.

Verifica del funzionamento

A questo punto dopo aver ricaricato il demone, è possibile provare nuovamente la login via sftp:

$ sftp test@172.16.1.130
Connecting to 172.16.1.130...
test@172.16.1.130's password: 
subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer
rasca@anomalia:~$ sftp test@172.16.1.130
Connecting to 172.16.1.130...
test@172.16.1.130's password: 
sftp> ls
bin   dev   etc   home  lib   
sftp> cd ..
sftp> ls 
bin   dev   etc   home  lib   

Come da pronostico, il login ha avuto successo.
E’ da notare che in questo caso la directory di arrivo dell’utenza è sempre la / del chroot ma si può fare in modo che questa corrisponda ad una qualsiasi cartella o alla home dell’utente modificando il parametro ChrootDirectory nel file di configurazione di ssh. E’ consentito l’utilizzo delle diciture speciali %h, corrispondente alla homedir dell’utente, e %u, corrispondente al nome dell’utente.

        ChrootDirectory %h

E’ chiaro che ogni directory scelta dovrà possedere il requisito essenziale di essere di proprietà di root e non scrivibile da alcun gruppo.

Conclusioni

Rispetto alla soluzione presentata nei precedenti articoli, che comportava l’applicazione di una patch ai sorgenti di ssh, quanto illustrato ha l’indubbio vantaggio di sfruttare un’implementazione nativa che non necessita di operazioni sul pacchetto. Certo i requisiti richiesti, in particolare relativamente alla proprietà della cartella madre del chroot, sono piuttosto rigidi ed obbligano a riflettere su come distribuire le utenze.
La soluzione migliore, come sempre, è quella più funzionale allo scopo che ci si prefigge.

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.

35 risposte a “SSH in CHROOT: la soluzione nativa”

  1. Avatar alessio
    alessio

    I miei complimenti!!! ho risolto l\’errore che ricevevo in sftp-chroot:

    \"Request for subsystem \’sftp\’ failed on channel 0 chroot\"

    siete dei grandi!!

    in barba agli americani che mi dicevano, /./ non è lo standard nel passwd…ma vavava

  2. Avatar Raoul Scarazzini

    Bene Alessio, felici che tu sia riuscito a far funzionare le cose. Ricorda anche che dalla versione 5 di ssh esiste anche la soluzione nativa per il CHROOT, così come spiegato in questo nostro articolo.

    A presto!

  3. Avatar Paolo Ponte
    Paolo Ponte

    Ho utilizato lo script create_chroot_env.sh per una macchina acceduta dall’esterno ed utilizzata come gateway per raggiungere una rete interna. Tutto ok per il jail ma non sono riuscito ad esportare la grafica, neppure con il classico ssh -X. Quindi si accede ‘da fuori’, si e’ in una jail, ma non si usa la grafica (provato con xclock).

  4. Avatar Raoul Scarazzini

    Ciao Paolo,
    potrebbe dipendere dalle librerie grafiche che non sono presenti nell’ambiente chrootato. Se fai un:

    $ ldd /usr/bin/xclock
    	linux-gate.so.1 =>  (0xb77e5000)
    	libX11.so.6 => /usr/lib/libX11.so.6 (0xb76af000)
    	libXaw.so.7 => /usr/lib/libXaw.so.7 (0xb7653000)
    	libXt.so.6 => /usr/lib/libXt.so.6 (0xb7600000)
    	libXmu.so.6 => /usr/lib/libXmu.so.6 (0xb75ea000)
    	libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb75e1000)
    	libXft.so.2 => /usr/lib/libXft.so.2 (0xb75ce000)
    	libxkbfile.so.1 => /usr/lib/libxkbfile.so.1 (0xb75ac000)
    	libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7586000)
    	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb743e000)
    	libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb7425000)
    	libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7421000)
    	libXext.so.6 => /usr/lib/libXext.so.6 (0xb7413000)
    	libXpm.so.4 => /usr/lib/libXpm.so.4 (0xb7403000)
    	libSM.so.6 => /usr/lib/libSM.so.6 (0xb73fa000)
    	libICE.so.6 => /usr/lib/libICE.so.6 (0xb73e2000)
    	libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb73b3000)
    	libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb733c000)
    	/lib/ld-linux.so.2 (0xb77e6000)
    	libXau.so.6 => /usr/lib/libXau.so.6 (0xb7339000)
    	libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7333000)
    	libuuid.so.1 => /lib/libuuid.so.1 (0xb732f000)
    	libz.so.1 => /usr/lib/libz.so.1 (0xb731a000)
    	libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb72f4000)
    

    Vedi di cosa necessita quel comando. Quelle librerie devono essere presenti nella gabbia…

  5. Avatar benjo
    benjo

    Ciao!
    grazie 1000 per la guida! l’ho trovata fantastica!
    ho solo un problema… ossia,
    come abilitare eventuali altri comandi ??

    -bash-3.2$ ps ux
    -bash: ps: command not found
    -bash-3.2$ top
    -bash: top: command not found
    -bash-3.2$ wget
    -bash: wget: command not found
    -bash-3.2$ rar
    -bash: rar: command not found
    -bash-3.2$ unrar
    -bash: unrar: command not found
    -bash-3.2$ chmod
    -bash: chmod: command not found
    -bash-3.2$ man
    -bash: man: command not found

    Grazie!

  6. Avatar Raoul Scarazzini

    Ciao,
    è necessario copiare gli eseguibili dei file in questione e le librerie (la cui lista puoi ottenere con ldd) all’interno dell’ambiente chroot.

    Grazie per i complimenti!

  7. Avatar benjo
    benjo

    ok perfetto, ora ho un ultimo problema,
    comandi tipo “top” o ancora più importante “ps”
    non mi funzionano in nessun modo 🙁

    -bash-3.2$ ps
    Error, do this: mount -t proc none /proc

    ricevo errori sul mount del proc 🙁
    come posso risolvere??? :°

  8. Avatar Raoul Scarazzini

    Beh l’unica credo sia proprio montare il filesystem proc nel chroot. La domanda che mi viene in mente però è: a cosa serve “proteggersi” con un ambiente chroot se poi consenti a chi vi entra di conoscere dettagli su processi, memoria e quant’altro?

    Ciao!

  9. Avatar benjo
    benjo

    Ciao Raoul:)
    beh, la mia idea era di permettere solo i comandi che volevo io (ls, chmod, mv, rm, ecc ecc) oltre alla gabbia per gli utenti, per non farli uscire dalla cartella che gli assegnavo.

    io in pratica creo un ambiente chroot per ogni utente, ossia:

    ./create_chroot_env.sh /home/pippo

    ma si può montare il proc per ogni utente?
    o come potrei fare esattamente? scusa il disturbo ma è l’unica cosa che mi manca :s

  10. Avatar Raoul Scarazzini

    Puoi mettere delle entry in fstab di questo tipo:

    proc    /chroot/path/proc    proc    defaults    0 0
    

    Oppure montare manualmente così:

    mount -t proc proc /chroot/path/proc/
    

    Fammi sapere se riesci… Ciao!

  11. Avatar benjo
    benjo

    Grazie 1000!! sei un grande!!
    ha funzionato benissimo il secondo
    mount -t proc proc /chroot/path/proc/
    :):)

  12. Avatar Tony
    Tony

    Ciao Raoul, prima di tutto grazie per il tuo sito, per la sua chiarezza. Io ti scrivo in quando non sono ancora riuscito a risolvere il mio problema che è il seguente: dovrei applicare chroot in ssh per gli utenti di un dominio windows 2000.

    Ho seguito tutti i tuoi step, ma qualcosa non funziona a dovere.

    Grazie mille

  13. Avatar Raoul Scarazzini

    Ciao Tony,
    grazie per i complimenti. Da quel che ho capito vuoi integrare la tua Linux in un dominio e poi configurarci un ssh in chroot. Sembra proprio un bel progetto!

    Descrivi a fondo il tuo problema, vediamo di risolverlo a dovere.

  14. Avatar Tony
    Tony

    Ciao Raoul,
    il mio linux è già integrato in un dominio windows, si tratta di un file server su cui ho scoperto qualche giorno fà che un paio di utenti, un pò svegli, hanno fatto accesso con putty su questa macchina con il loro account di rete.
    Da qui è nata l’esigenza di settare il parametro chroot in openssh.

    Grazie mille

    Tony

  15. Avatar Raoul Scarazzini

    Allora il primo consiglio è di metterti in ascolto sui log (/var/log/authlog o /var/log/secure a seconda del se usi Debian/Ubuntu o RedHat/Centos/SuSe) mentre cerchi di effettuare un login.
    In particolare controlla i permessi sulle cartelle: è un requisito che la cartella base del chroot sia di proprietà dell’utente root.

  16. Avatar Tony
    Tony

    Si per i log uso ubuntu 10.04 lts, ma in questo momento devo abilitare il “choordirectory” in ssh e sftp.

  17. Avatar Raoul Scarazzini

    Ok, quindi una volta abilitate le opzioni relative in /etc/ssh/sshd_config (così come descritto nell’articolo) e restartato il demone ssh, mettiti in tail sul log:

    # tail -f /var/log/auth.log
    

    e prova ad effettuare un login da una macchina client. Osserva quel che succede, se non va, il messaggio chiarirà il perché.

  18. Avatar rossana
    rossana

    aiutatemi per favore:
    eseguendo questo comando da una macchina linux ad una macchina remota
    ssh -v pubblica@192.168.nn.nnn ‘( cd /export/home/flexsogeiV65/flex/ ; pwd )’ 2> /tmp/2.out, ssh restituisce una serie di righe di cui l’ultima è – debug1: Exit status 0.
    Lo stesso comando eseguito da crontab con lo stesso resistuisce come output una serie di righe di cui l’ultima è – debug1: Exit status -1.
    Facendo un diff dei file di output delle due esecuzioni ho queste differenze:
    > debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    38,39d38
    < debug1: fd 0 clearing O_NONBLOCK
    < debug1: fd 1 clearing O_NONBLOCK
    41c40
    debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.1 seconds
    43c42
    debug1: Exit status 0
    Potete aiutarmi a capire perchè succede questo

  19. Avatar Raoul Scarazzini

    Ciao Rossana,
    non è semplice capire quale sia il tuo problema in quanto non è chiaro quale sia il tuo obiettivo.
    Hai implementato la soluzione chroot e non riesci ad eseguire il comando che indichi?
    Quale risultato vuoi raggiungere?

  20. Avatar Giuseppe
    Giuseppe

    Grazie per la guida, ma ho un paio di problemi.
    Uso una Red Hat Enterprise Linux Server release 5.2 (Tikanga)
    quando ho lanciato il comando “./create_chroot_env.sh /chroot” mi ha dato il seguente errore
    “cp: cannot stat `/bin/rbash’: No such file or directory
    cp: cannot stat `/lib/libncurse*’: No such file or directory”

    comunque sono andato avanti e quando tento di fare login con un utente inserito nel gruppo chroot putty mi si chiude immediatamente

  21. Avatar Raoul Scarazzini

    Ciao Giuseppe,
    i due errori non sono vincolanti, ed è corretto tu abbia proseguito. Il comportamento di ssh (ossia l’uscita immediata) è dovuto quasi certamente ai permessi sulla cartella di destinazione: controlla che questa appartenga a root ed eventualmente segui i log attraverso il file /var/log/secure: lì ti viene indicato cosa effettivamente non sta andando.

    A presto!

  22. Avatar giuseppe
    giuseppe

    ho corretto un’errore di digitazione sul file sshd_config
    ora l’utente entra ma non va nella directory chroot, ma in quella normale
    nei log ‘message’ e ‘secure’ non vedo nulla di anomalo
    i permessi per la cartella chroot e le sotto cartelle sono 755 con proprietario root

  23. Avatar Raoul Scarazzini

    Se l’utente non viene veicolato nel chroot non è nel gruppo definito del file (nell’articolo ad esempio il gruppo è “test”), se invece hai la certezza che lo sia prova fare un restart del servizio ssh.

  24. Avatar giuseppe
    giuseppe

    ho fatto il copia e incolla di quello che è scritto nel tuo articolo e ho riavviato la macchina

  25. Avatar Raoul Scarazzini

    Direi che il problema allora sta nel gruppo dell’utente. A quale gruppo appartiene? Lo verifichi con:

    # groups 
    

    Se il gruppo è quello dichiarato in sshd_config il problema è altrove e va effettuato il debug partendo da /var/log/secure.

  26. Avatar giuseppe
    giuseppe

    il gruppo è test e nel /var/log/secure non ho nulla.
    ho provato a installare un VM con centos 5.5 ma ho i medesimi problemi

  27. Avatar Raoul Scarazzini

    Molto, molto strano. In /var/log/secure non puoi non avere nulla: quantomeno devi avere le prove che l’utente si è collegato con successo.
    Aumentando poi il livello di debug (opzione LogLevel DEBUG in /etc/ssh/sshd_config) di ssh potresti anche riuscire a capir qualcosa in più.
    Esiste anche un modo per effettuare debug lato client, lanciando ssh con l’opzione -v.
    Inoltre controlla la versione di ssh: deve essere obbligatoriamente la 5.

  28. Avatar giuseppe
    giuseppe

    si scusa vedo il login dell’utente, ma in messagge e non in secure
    la versione di ssh usata è 5.1 qualcosa

    questo è il log del message dopo il livello debug

    Feb 17 18:13:00 localhost sshd[5079]: Set /proc/self/oom_adj to 0
    Feb 17 18:13:00 localhost sshd[5079]: Connection from 172.20.1.8 port 54239
    Feb 17 18:13:03 localhost sshd[5079]: Accepted password for test from 172.20.1.8 port 54239 ssh2
    Feb 17 18:13:03 localhost sshd[5079]: User child is on pid 5081
    Feb 17 18:13:05 localhost sshd[5081]: Received disconnect from 172.20.1.8: 11: disconnected by user
    
  29. Avatar Raoul Scarazzini

    Posta anche il tuo file sshd_config… Dai log sembra proprio non agganci il chroot…

  30. Avatar giuseppe
    giuseppe

    un po lungo ma è tutto sshd_config

    #	$OpenBSD: sshd_config,v 1.73 2005/12/06 22:38:28 reyk Exp $
    
    # This is the sshd server system-wide configuration file.  See
    # sshd_config(5) for more information.
    
    # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
    
    # The strategy used for options in the default sshd_config shipped with
    # OpenSSH is to specify options with their default value where
    # possible, but leave them commented.  Uncommented options change a
    # default value.
    
    #Port 22
    #Protocol 2,1
    Protocol 2
    #AddressFamily any
    #ListenAddress 0.0.0.0
    #ListenAddress ::
    
    # HostKey for protocol version 1
    #HostKey /etc/ssh/ssh_host_key
    # HostKeys for protocol version 2
    #HostKey /etc/ssh/ssh_host_rsa_key
    #HostKey /etc/ssh/ssh_host_dsa_key
    
    # Lifetime and size of ephemeral version 1 server key
    #KeyRegenerationInterval 1h
    #ServerKeyBits 768
    
    # Logging
    # obsoletes QuietMode and FascistLogging
    #SyslogFacility AUTH
    SyslogFacility AUTHPRIV
    LogLevel DEBUG
    
    # Authentication:
    
    #LoginGraceTime 2m
    #PermitRootLogin yes
    #StrictModes yes
    #MaxAuthTries 6
    
    #RSAAuthentication yes
    #PubkeyAuthentication yes
    #AuthorizedKeysFile	.ssh/authorized_keys
    
    # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
    #RhostsRSAAuthentication no
    # similar for protocol version 2
    #HostbasedAuthentication no
    # Change to yes if you don't trust ~/.ssh/known_hosts for
    # RhostsRSAAuthentication and HostbasedAuthentication
    #IgnoreUserKnownHosts no
    # Don't read the user's ~/.rhosts and ~/.shosts files
    #IgnoreRhosts yes
    
    # To disable tunneled clear text passwords, change to no here!
    #PasswordAuthentication yes
    #PermitEmptyPasswords no
    PasswordAuthentication yes
    
    # Change to no to disable s/key passwords
    #ChallengeResponseAuthentication yes
    ChallengeResponseAuthentication no
    
    # Kerberos options
    #KerberosAuthentication no
    #KerberosOrLocalPasswd yes
    #KerberosTicketCleanup yes
    #KerberosGetAFSToken no
    
    # GSSAPI options
    #GSSAPIAuthentication no
    GSSAPIAuthentication yes
    #GSSAPICleanupCredentials yes
    GSSAPICleanupCredentials yes
    
    # Set this to 'yes' to enable PAM authentication, account processing, 
    # and session processing. If this is enabled, PAM authentication will 
    # be allowed through the ChallengeResponseAuthentication mechanism. 
    # Depending on your PAM configuration, this may bypass the setting of 
    # PasswordAuthentication, PermitEmptyPasswords, and 
    # "PermitRootLogin without-password". If you just want the PAM account and 
    # session checks to run without PAM authentication, then enable this but set 
    # ChallengeResponseAuthentication=no
    #UsePAM no
    UsePAM yes
    
    # Accept locale-related environment variables
    AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES 
    AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT 
    AcceptEnv LC_IDENTIFICATION LC_ALL
    #AllowTcpForwarding yes
    #GatewayPorts no
    #X11Forwarding no
    X11Forwarding yes
    #X11DisplayOffset 10
    #X11UseLocalhost yes
    #PrintMotd yes
    #PrintLastLog yes
    #TCPKeepAlive yes
    #UseLogin no
    #UsePrivilegeSeparation yes
    #PermitUserEnvironment no
    #Compression delayed
    #ClientAliveInterval 0
    #ClientAliveCountMax 3
    #ShowPatchLevel no
    #UseDNS yes
    #PidFile /var/run/sshd.pid
    #MaxStartups 10
    #PermitTunnel no
    #ChrootDirectory none
    
    # no default banner path
    #Banner /some/path
    
    # override default of no subsystems
    #Subsystem	sftp	/usr/libexec/openssh/sftp-server
    Subsystem sftp internal-sftp
    
    Match Group test
            ChrootDirectory /chroot/
    
  31. Avatar Raoul Scarazzini

    A questo punto sono decisamente curioso, visto che la configurazione sembra decisamente corretta. Lancia questi comandi e posta l’output:

    # cat /etc/passwd | grep test
    # cat /etc/group | grep test
    

    Dopodiché prova ad effettuare un login e vedi se riesci a fare queste cose:

    # cd /
    # ls -la
    
  32. Avatar antonio
    antonio

    Ciao, complimenti per l’articolo che mi ha aiutato tantissimo a creare la gabbia e a limitare il navigazione degli utenti in giro per il filesystem.
    Ora però non riesco a far funzioanre i servizi scp ed sftp. O meglio: ogni volta che provo a copiare un file con scp o con sftp mi viene restituito il messaggio di errore “Permission denied”… hai dei suggerimenti?
    Ho fatto tantissime prove ma non riesco a capire dove sta il problema.
    Grazie
    Ciao

  33. Avatar Raoul Scarazzini

    Ciao Antonio e grazie per i complimenti. Per quanto riguarda il tuo problema, ricorda che la soluzione nativa del chroot di ssh prevede che la cartella “base”, ossia quella di destinazione, sia di proprietà dell’utente root e del gruppo omonimo, con permessi di scrittura SOLO per l’utente root.
    Questo significa che è del tutto normale non poter scrivere direttamente sulla cartella con l’utente non privilegiato. Per “risolvere” il problema non resta quindi che creare una sotto cartella con i privilegi del tuo utente in modo che lì possa scrivere.
    In alternativa, la soluzione non nativa (descritta negli articoli SSH in CHROOT: Una gabbia per la shell sicura 1 di 2 e 2 di 2) ti consente di ottenere invece esattamente quello che vuoi. E’ chiaro che utilizzare quanto gli sviluppatori di ssh danno per “sicuro” è sempre meglio.

    A presto!

  34. Avatar Chalda

    Grazie dell’articolo,
    Una precisazione: in Debian occorre copiare anche la cartella /lib64, altrimenti da quest’errore nella fase di login:

    /bin/sh: No such file or directory
    Connection to x.x.x.x closed.

  35. Avatar Raoul Scarazzini

    Certo, se l’architettura del sistema è 64 bit quella directory diventa indispensabile.

    A presto!

    Raoul

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *