GNU/Linux >> Tutoriels Linux >  >> Linux

Lier monter un utilisateur SFTP après avoir utilisé chroot

Cet article est destiné aux administrateurs ou développeurs.

Le montage par liaison d'un utilisateur SFTP (Secure File Transfer Protocol) sur lequel l'opération chroot a été effectuée sur vos serveurs Red Hat® Enterprise Linux® (RHEL®) et CentOS® 6 (OpenSSH est 4.9p1 ou version ultérieure) crée les conditions suivantes :

  • L'utilisateur ne peut utiliser que SFTP et ne dispose pas d'un accès complet au shell via Secure Shell (SSH).
  • L'utilisateur est emprisonné dans son répertoire personnel et n'a aucun moyen d'en sortir.
  • Du point de vue de l'utilisateur, son répertoire personnel se trouve sur le serveur.
  • Ce montage lié est souvent nécessaire pour un développeur qui peut avoir besoin d'un accès en écriture à une ou plusieurs racines de document Apache® ou à un autre répertoire dans le but de télécharger ou de modifier du contenu Web.

Cet article décrit comment utiliser l'opération chroot pour définir le répertoire personnel de l'utilisateur et créer un montage lié dans ce répertoire personnel pour tous les répertoires externes (racine du document) auxquels il a besoin d'accéder. Un montage lié est le seul moyen de donner à l'utilisateur un accès aux données en dehors de son répertoire chroot. Vous n'êtes pas en mesure d'utiliser un lien symbolique (symlink) vers des données en dehors du chrootdirectory (par exemple, ln -s /home/user/http /var/www/http ). Après l'opération chroot, le système de fichiers n'a connaissance d'aucune donnée en dehors du répertoire chroot. Ce manque de connaissances rompt le lien symbolique. Comme alternative, vous pouvez déplacer le répertoire racine du document vers le répertoire personnel de l'utilisateur, puis le lier symboliquement à l'emplacement d'origine (par exemple, ln -s /var/www/html /home/user1/html ).

Le démon SSH (SSHD) propose des variables dynamiques dans la configuration pour l'opération chroot :

  • %u :nom d'utilisateur de l'utilisateur qui se connecte
  • %h :$HOME de l'utilisateur qui se connecte

SSHD est très strict sur la façon dont vous devez définir les autorisations. L'une de ces restrictions est que l'utilisateur ne peut pas écrire au niveau supérieur du répertoire chroot. Vous devez choisir un niveau supérieur approprié pour le répertoire chroot, tel que les paramètres suivants :

  • Définissez ChrootDirectory sur %h :L'utilisateur ne peut pas écrire dans son chemin d'accueil. Ils ont besoin soit d'un sous-dossier dans lequel ils peuvent écrire (par exemple les téléchargements), soit d'un montage lié à un autre emplacement dans lequel ils peuvent écrire (par exemple /var/www/html ).
  • Définissez ChrootDirectory sur /home/chroot  :L'utilisateur peut écrire dans son chemin d'accès personnel, mais le niveau supérieur du répertoire chroot est protégé par les autorisations du système de fichiers, pas la prison chroot.

La première option utilise le répertoire chroot pour garantir la sécurité au lieu de s'appuyer sur les autorisations du système de fichiers. La deuxième option permet d'écrire dans le répertoire personnel mais signifie que le répertoire chroot est partagé avec d'autres utilisateurs, et seules les autorisations du système de fichiers arrêtent la divulgation d'informations. La bonne option dépend de vos besoins.

Lier le montage d'un utilisateur SFTP après une opération chrootée

Utilisez les étapes suivantes pour lier le montage à l'utilisateur :

  1. Créez un groupe auquel vous assignerez tout utilisateur devant être emprisonné dans son répertoire personnel :

    # groupadd sftponly
    
  2. Créez l'utilisateur. Définissez le shell sur /bin/false et affectez l'utilisateur au groupe que vous avez créé ci-dessus :

    # 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. Mettez à jour le /etc/ssh/sshd_config fichier :

    1. Commentez la ligne suivante :

       Subsystem       sftp    /usr/libexec/openssh/sftp-server
      
    2. Ajoutez les lignes suivantes à la fin du fichier :

       Subsystem     sftp   internal-sftp
       Match Group sftponly
       ChrootDirectory /home/chroot   # OR     ChrootDirectory %h
       X11Forwarding no
       AllowTCPForwarding no
       ForceCommand internal-sftp
      
    3. Testez la configuration, puis rechargez le SSHD :

       # sshd -t
       # service sshd reload
      

Configurer le répertoire personnel de l'utilisateur après l'opération chroot

  1. Si le ChrootDirectory est /home/chroot , exécutez les commandes suivantes :

     # 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. Si le ChrootDirectory est %h , exécutez la commande suivante :

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

Créer des montages liés sur n'importe quel chemin en dehors du répertoire chroot auquel le l'utilisateur doit accéder

  1. Ajoutez la ligne suivante au /etc/fstab fichier :

     /var/www/html   /home/chroot/$NEWUSER/www        none    bind    0 0`
    
  2. Montez le répertoire :

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

Autorisations de mise à jour

Mettez à jour les autorisations du système de fichiers sur les répertoires auxquels l'utilisateur accède. Tenez compte des autres utilisateurs qui disposent actuellement d'un accès en lecture/écriture pour vous assurer que vous ne supprimez pas par inadvertance leurs autorisations. Vous pouvez effectuer cette étape de différentes manières, telles que la modification de la propriété de l'utilisateur, la modification de la propriété ou des autorisations du groupe, ou l'ajout de listes de contrôle d'accès aux fichiers (FACL).

L'exemple suivant montre les commandes permettant d'ajouter des FACL :

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

Problèmes potentiels

Les problèmes suivants peuvent survenir.

Autorisations de répertoire

Les autorisations de répertoire peuvent entraîner les problèmes suivants :

  • La fonction chroot intégrée de SFTP est très stricte en ce qui concerne les autorisations. Si les autorisations ne sont pas suffisamment sécurisées, vous recevez l'erreur suivante lorsque vous essayez de vous connecter :

        root@ftp01[ ~ ]# sftp $NEWUSER@localhost
        Connecting to localhost...
        chroottest@localhost's password:
        Write failed: Broken pipe
        Couldn't read packet: Connection reset by peer
    
  • Vous pouvez peut-être vous connecter, mais vous ne pouvez pas télécharger de fichiers. Dans ce cas, vous recevez l'erreur suivante :

        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 ne fonctionne pas

Ce type d'utilisateur fonctionne uniquement avec SFTP et ne fonctionne pas avec d'autres protocoles (par exemple, Remote Shell (RSH), Secure Contain Protect (SCP) ou File Transfer Protocol (FTP)).


Linux
  1. Comment télécharger ou télécharger des fichiers/répertoires à l'aide de sFTP sous Linux

  2. Une monture liée ?

  3. Ssh – Restreindre un utilisateur Ssh/scp/sftp à un répertoire ?

  4. Umount récursif après montage Rbind ?

  5. Y a-t-il des inconvénients à utiliser Mount –bind comme substitut des liens symboliques ?

Comment configurer SFTP chrooté sous Linux

Comment créer un utilisateur SFTP avec des autorisations de répertoire spécifiées dans Ubuntu 20.04

Monter un répertoire distant à l'aide de SSHFS dans Debian Jessie

Lier les montages sous Linux

Utiliser sftp comme scp

SFTP avec chroot en fonction de la clé publique de l'utilisateur qui se connecte