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.