GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer Chroot SFTP sous Linux (Autoriser uniquement SFTP, pas SSH)

Si vous souhaitez configurer un compte sur votre système qui ne sera utilisé que pour transférer des fichiers (et non pour ssh vers le système), vous devez configurer SFTP Chroot Jail comme expliqué dans cet article.

Dans un scénario sftp typique (lorsque chroot sftp n'est pas configuré), si vous utilisez sftp, vous pouvez voir le fichier root comme indiqué ci-dessous.

Si vous souhaitez donner un accès sftp sur votre système à des fournisseurs externes pour transférer des fichiers, vous ne devez pas utiliser sftp standard. Au lieu de cela, vous devez configurer Chroot SFTP Jail comme expliqué ci-dessous.

Environnement SFTP non chroot

Dans l'exemple suivant (un environnement sftp typique), john peut accéder en sftp au système, afficher le dossier /etc et télécharger les fichiers à partir de là.

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
projects  john.txt documents 

sftp> cd /etc
sftp> ls -l passwd
-rw-r--r--    0 0        0            3750 Dec 29 23:09 passwd

sftp> get passwd
Fetching /etc/passwd to passwd
/etc/passwd     100% 3750     3.7KB/s   00:00

Chrooter l'environnement SFTP

Dans l'exemple suivant, john peut accéder au système en sftp et afficher uniquement le répertoire que vous avez désigné pour que john exécute sftp (c'est-à-dire /incoming).

Lorsque John essaie d'exécuter 'cd /etc', un message d'erreur s'affiche. Étant donné que SFTP est configuré dans un environnement chroot, John ne peut afficher aucun autre fichier dans le système.

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
sftp> cd /etc
Couldn't canonicalise: No such file or directory

Maintenant que vous savez ce qu'est l'environnement Chroot SFTP, voyons comment le configurer.

1. Créer un nouveau groupe

Créez un groupe appelé sftpusers. Seuls les utilisateurs appartenant à ce groupe seront automatiquement limités à l'environnement de chroot SFTP sur ce système.

# groupadd sftpusers

2. Créer des utilisateurs (ou modifier un utilisateur existant)

Supposons que vous souhaitiez créer un utilisateur guestuser qui ne devrait être autorisé qu'à exécuter SFTP dans un environnement chroot, et ne devrait pas être autorisé à exécuter SSH.

La commande suivante crée guestuser, affecte cet utilisateur au groupe sftpusers, fait de /incoming comme répertoire personnel, définit /sbin/nologin comme shell (ce qui ne permettra pas à l'utilisateur de ssh et d'obtenir un accès shell).

# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
# passwd guestuser

Vérifiez que l'utilisateur a été créé correctement.

# grep guestuser /etc/passwd
guestuser:x:500:500::/incoming:/sbin/nologin

Si vous souhaitez modifier un utilisateur existant et en faire un utilisateur sftp uniquement et le placer dans la prison chroot sftp, procédez comme suit :

# usermod -g sftpusers -d /incoming -s /sbin/nologin john

Sur une note connexe, si vous devez transférer des fichiers de Windows vers Linux, utilisez l'un des clients sftp mentionnés dans cette liste des 7 meilleurs clients sftp.

3. Configurer le sous-système sftp-server dans sshd_config

Vous devez demander à sshd d'utiliser le sftp interne pour sftp (au lieu du serveur sftp par défaut).

Modifiez le fichier /etc/ssh/sshd_config et commentez la ligne suivante :

#Subsystem       sftp    /usr/libexec/openssh/sftp-server

Ensuite, ajoutez la ligne suivante au fichier /etc/ssh/sshd_config

Subsystem       sftp    internal-sftp
# grep sftp /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

4. Spécifier le répertoire chroot pour un groupe

Vous souhaitez placer uniquement certains utilisateurs (c'est-à-dire les utilisateurs appartenant au groupe sftpusers) dans l'environnement de la prison chroot. Ajoutez les lignes suivantes à la fin de /etc/ssh/sshd_config

# tail /etc/ssh/sshd_config
Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

Dans ce qui précède :

  • Match Group sftpusers – Cela indique que les lignes suivantes ne seront mises en correspondance que pour les utilisateurs appartenant au groupe sftpusers
  • ChrootDirectory /sftp/%u - Il s'agit du chemin qui sera utilisé pour le chroot une fois l'utilisateur authentifié. %u indique l'utilisateur. Donc, pour john, ce sera /sftp/john.
  • ForceCommand internal-sftp - Cela force l'exécution de internal-sftp et ignore toute commande mentionnée dans le fichier ~/.ssh/rc.

5. Créer un répertoire personnel sftp

Puisque nous avons spécifié /sftp comme ChrootDirectory ci-dessus, créez ce répertoire (qui est l'équivalent de votre répertoire /home typique).

# mkdir /sftp

Maintenant, sous /sftp, créez les répertoires individuels pour les utilisateurs qui font partie du groupe sftpusers. c'est-à-dire les utilisateurs qui ne seront autorisés qu'à exécuter sftp et seront dans un environnement chroot.

# mkdir /sftp/guestuser

Ainsi, /sftp/guestuser est équivalent à / pour le guestuser. Lorsque guestuser sftp sur le système, et exécute "cd /", ils ne verront que le contenu des répertoires sous "/sftp/guestuser" (et non le vrai / du système). C'est la puissance du chroot.

Ainsi, sous ce répertoire /sftp/guestuser, créez n'importe quel sous-répertoire que vous souhaitez que l'utilisateur voie. Par exemple, créez un répertoire entrant où les utilisateurs peuvent sftp leurs fichiers.

# mkdir /sftp/guestuser/incoming

6. Configurer l'autorisation appropriée

Pour que chroot fonctionne correctement, vous devez vous assurer que les autorisations appropriées sont correctement configurées sur le répertoire que vous venez de créer ci-dessus.

Définissez la propriété sur l'utilisateur et le groupe sur le groupe sftpusers comme indiqué ci-dessous.

# chown guestuser:sftpusers /sftp/guestuser/incoming

L'autorisation ressemblera à ce qui suit pour le répertoire entrant.

# ls -ld /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming

L'autorisation ressemblera à ce qui suit pour le répertoire /sftp/guestuser

# ls -ld /sftp/guestuser
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser

# ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp

7. Redémarrez sshd et testez Chroot SFTP

Redémarrez sshd :

# service sshd restart

Testez l'environnement chroot sftp. Comme vous le voyez ci-dessous, lorsque gusetuser fait sftp et fait "cd /", ils ne verront que le répertoire entrant.

# sftp [email protected]
guestuser@thegeekstuff's password:

sftp> pwd
Remote working directory: /incoming

sftp> cd /
sftp> ls
incoming

Lorsque guestuser transfère des fichiers vers le répertoire /incoming à partir du sftp, ils seront réellement situés sous le répertoire /sftp/guestuser/incoming sur le système.


Linux
  1. Comment changer le port SSH sous Linux

  2. Comment configurer des jails chroot Linux

  3. Comment autoriser SFTP et interdire SSH ?

  4. Comment configurer les clés SSH pour une connexion ssh "sans mot de passe" sous Linux

  5. Comment autoriser ssh avec des mots de passe vides sous Linux

Comment configurer le serveur Chroot SFTP sous Linux

Comment configurer une connexion SSH sans mot de passe sous Linux avec des clés

Comment créer un alias SSH sous Linux

Comment autoriser ou refuser l'accès SSH à un utilisateur ou à un groupe particulier sous Linux

Comment configurer SFTP chrooté sous Linux

Comment configurer l'authentification multifacteur pour SSH sous Linux