GNU/Linux >> Linux Esercitazione >  >> Linux

Bind montare un utente SFTP dopo aver usato chroot

Questo articolo è destinato ad amministratori o sviluppatori.

Il montaggio del binding di un utente SFTP (Secure File Transfer Protocol) su cui è stata eseguita l'operazione chroot sui server Red Hat® Enterprise Linux® (RHEL®) e CentOS® 6 (OpenSSH è 4.9p1 o successivo) crea le seguenti condizioni:

  • L'utente può utilizzare solo SFTP e non dispone dell'accesso completo alla shell tramite Secure Shell (SSH).
  • L'utente è incarcerato nella sua home directory e non ha modo di evadere da essa.
  • Dal punto di vista dell'utente, la sua home directory è sul server.
  • Questo montaggio del binding è spesso necessario per uno sviluppatore che potrebbe aver bisogno dell'accesso in scrittura a una (o più) root o root di documenti Apache® o qualche altra directory allo scopo di caricare o modificare contenuti web.

In questo articolo viene descritto come utilizzare l'operazione chroot per impostare la directory home per l'utente e creare un montaggio bind all'interno di tale directory home per qualsiasi directory esterna (root del documento) a cui è necessario accedere. Un montaggio bind è l'unico modo per dare all'utente l'accesso ai dati al di fuori della loro directory chroot. Non sei in grado di utilizzare un collegamento simbolico (collegamento simbolico) a dati al di fuori della directory chroot (ad esempio, ln -s /home/user/http /var/www/http ). Dopo l'operazione chroot, il file system non è a conoscenza di alcun dato al di fuori della directory chroot. Questa mancanza di conoscenza interrompe il collegamento simbolico. In alternativa, puoi spostare la directory principale del documento nella directory home dell'utente, quindi collegarlo simbolicamente alla posizione originale (ad esempio, ln -s /var/www/html /home/user1/html ).

Il demone SSH (SSHD) offre alcune variabili dinamiche nella configurazione per l'operazione chroot:

  • %u :nome utente dell'utente che effettua l'accesso
  • %h :$HOME dell'utente che effettua il login

SSHD è molto severo su come impostare le autorizzazioni. Una di queste restrizioni è che l'utente non può scrivere nel livello superiore della directory chroot. Devi scegliere un livello superiore appropriato per la directory chroot, ad esempio le seguenti impostazioni:

  • Imposta ChrootDirectory su %h :L'utente non può scrivere nel proprio percorso principale. Hanno bisogno di una sottocartella in cui possono scrivere (ad esempio caricamenti) o di un montaggio vincolante in un'altra posizione in cui possono scrivere (ad esempio /var/www/html ).
  • Imposta ChrootDirectory su /home/chroot :L'utente può scrivere nel proprio percorso home, ma il livello superiore della directory chroot è protetto con i permessi del file system, non con la jail chroot.

La prima opzione utilizza la directory chroot per garantire la sicurezza invece di fare affidamento sulle autorizzazioni del file system. La seconda opzione consente di scrivere nella directory home ma significa che la directory chroot è condivisa con altri utenti e solo le autorizzazioni del file system bloccano la divulgazione delle informazioni. L'opzione giusta dipende dalle tue esigenze.

Collega il montaggio di un utente SFTP dopo un'operazione in chroot

Utilizzare i seguenti passaggi per associare il montaggio dell'utente:

  1. Crea un gruppo a cui assegnerai tutti gli utenti che devono essere imprigionati nella loro home directory:

    # groupadd sftponly
    
  2. Crea l'utente. Imposta la shell su /bin/false e assegna l'utente al gruppo che hai creato sopra:

    # mkdir -p /home/chroot/$NEWUSER
    # useradd -d /$NEWUSER -s /bin/false -G sftponly $NEWUSER    # Note: homedir is relative to the chroot
    # pass}wd $NEWUSER
    
  3. Aggiorna il /etc/ssh/sshd_config file:

    1. Commenta la seguente riga:

       Subsystem       sftp    /usr/libexec/openssh/sftp-server
      
    2. Aggiungi le seguenti righe alla fine del file:

       Subsystem     sftp   internal-sftp
       Match Group sftponly
       ChrootDirectory /home/chroot   # OR     ChrootDirectory %h
       X11Forwarding no
       AllowTCPForwarding no
       ForceCommand internal-sftp
      
    3. Testare la configurazione, quindi ricaricare l'SSHD:

       # sshd -t
       # service sshd reload
      

Configura la homedir dell'utente dopo l'operazione chroot

  1. Se ChrootDirectory è /home/chroot , esegui i seguenti comandi:

     # chmod 711 /home/chroot            # This prevents chrooted users from seeing other chrooted users' homedirs
     # chmod 755 /home/chroot/$NEWUSER
     # chown $NEWUSER:sftponly /home/chroot/$NEWUSER
    
  2. Se ChrootDirectory è %h , esegui il comando seguente:

     # chown root:root /home/chroot/$NEWUSER
    

Crea bind mounts su qualsiasi percorso al di fuori della directory chroot che il l'utente deve accedere

  1. Aggiungi la seguente riga a /etc/fstab file:

     /var/www/html   /home/chroot/$NEWUSER/www        none    bind    0 0`
    
  2. Monta la directory:

     # mkdir /home/chroot/$NEWUSER/www
     # mount /home/chroot/$NEWUSER/www
    

Aggiorna le autorizzazioni

Aggiorna i permessi del file system sulle directory a cui accede l'utente. Prendi in considerazione altri utenti che attualmente hanno accesso in lettura/scrittura per assicurarti di non rimuovere inavvertitamente i loro permessi. Puoi completare questo passaggio in diversi modi, ad esempio modificando la proprietà dell'utente, modificando la proprietà o le autorizzazioni del gruppo o aggiungendo elenchi di controllo di accesso ai file (FACL).

L'esempio seguente mostra i comandi per l'aggiunta di FACL:

     # setfacl -Rm u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/
     # setfacl -Rm d:u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/

Potenziali problemi

Possono verificarsi i seguenti problemi.

Autorizzazioni della directory

I permessi della directory possono causare i seguenti problemi:

  • La funzione chroot incorporata di SFTP è molto rigorosa riguardo alle autorizzazioni. Se le autorizzazioni non sono sufficientemente sicure, viene visualizzato il seguente errore quando si tenta di accedere:

        root@ftp01[ ~ ]# sftp $NEWUSER@localhost
        Connecting to localhost...
        chroottest@localhost's password:
        Write failed: Broken pipe
        Couldn't read packet: Connection reset by peer
    
  • Potresti riuscire ad accedere, ma non puoi caricare file. In questo caso ricevi il seguente errore:

        sftp> put test
        Uploading test to /$NEWUSER/test
        Couldn't get handle: Permission denied
        In both cases the problem is directory permissions.  Here's what a known-good directory structure looks like:
        root@ftp01[ ~ ]# ls -ld / /home /home/chroot /home/chroot/$NEWUSERdrwxr-xr-x. 28 root     root     4096 Aug 22 10:31 /
        drwxr-xr-x. 18 root     root     4096 Oct 10 10:49 /home
        drwx--x--x   3 root     root     4096 Oct 10 10:49 /home/chroot
        drwxr-xr-x   3 $NEWUSER $NEWUSER 4096 Oct 10 11:40 /home/chroot/$NEWUSER
        root@ftp01[ ~ ]#
    

SCP non funziona

Questo tipo di utente funziona solo con SFTP e non funziona con altri protocolli (ad esempio Remote Shell (RSH), Secure Conte Protect (SCP) o File Transfer Protocol (FTP)).


Linux
  1. Come configurare le jail chroot di Linux

  2. Montare una directory remota usando SSHFS in Debian Jessie

  3. Ssh:limitare un utente Ssh/scp/sftp a una directory?

  4. Ci sono degli svantaggi nell'usare Mount-bind come sostituto dei collegamenti simbolici?

  5. Esiste uno strumento linux vfs che consente di associare una directory in una posizione diversa (come mount --bind) nello spazio utente?

Come configurare SFTP in chroot in Linux

Come creare un utente SFTP con autorizzazioni di directory specificate in Ubuntu 20.04

Uso di / quando si usa cd

Usando sftp come scp

SFTP con chroot a seconda della chiave pubblica dell'utente che si connette

Chroot SFTP - Possibilità di consentire all'utente di scrivere nella directory corrente (chroot).