Si vous souhaitez configurer des utilisateurs sur votre système qui seront utilisés uniquement pour transférer des fichiers (et non pour accéder en ssh au système), vous devez configurer ce qu'on apelle une SFTP Chroot Jail.
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.
Environnement SFTP non Chroot
Dans l'exemple suivant (un environnement sftp typique), testeur peut utiliser sftp sur le système, afficher le dossier /etc et télécharger des fichiers tel que le fichier /etc/passwd qui contient toutes les informations relatives aux utilisateurs (login, mots de passe, ...).
sftp tester@awoui
tester@awoui's password:
sftp> pwd
Remote working directory: /home/tester
sftp> ls
téléchargements 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
Environnement Chroot SFTP
Dans l'exemple suivant, testeur peut utiliser sftp sur le système et n'afficher que le répertoire que vous avez désigné pour testeur.
Lorsque testeur essaie d'exécuter "cd /etc", il affichera un message d'erreur. Puisque SFTP est configuré dans un environnement chroot, tester ne peut afficher aucun autre fichier du système.
sftp tester@awoui
tester@awoui's password:
sftp> pwd
Remote working directory: /home/testeur
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éez un nouveau groupe
Créez un groupe appelé sftp. Seuls les utilisateurs appartenant à ce groupe seront automatiquement limités à l'environnement chroot SFTP sur ce système.
groupadd sftp
2. Créer des utilisateurs (ou modifier un utilisateur existant)
Supposons que vous souhaitiez créer un utilisateur Tom qui ne devrait être autorisé qu'à exécuter SFTP dans un environnement chroot, et qui ne devrait pas être autorisé à exécuter SSH.
La commande suivante crée l'utilisateur "Tom", affecte cet utilisateur au groupe sftp et fait de /home le répertoire personnel. Définir /sbin/nologin comme shell empêchera l'utilisateur d'utiliser ssh et d'obtenir un accès shell).
useradd -g sftp -d /home -s /sbin/nologin tom
passwd tom
Vérifiez que l'utilisateur a été créé correctement.
grep tom /etc/passwd
tom:x:500:500::/home:/sbin/nologin
Si vous souhaitez modifier un utilisateur existant et en faire un utilisateur sftp uniquement et le mettre dans la prison chroot sftp, procédez comme suit:
usermod -g sftp -d /home -s /sbin/nologin tom
Dans le même ordre d'idées, si vous devez transférer des fichiers de Windows vers Linux, utilisez l'un des clients sftp tels que filezilla ou winscp.
3. Configurer le sous-système sftp-server dans sshd_config
Vous devriez 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
Enregistrez puis quittez le fichier /etc/ssh/sshd_config.
Vous pouvez à nouveau vérifier en utilisant la commande grep :
grep sftp /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
4. Spécifier le répertoire de chroot pour un groupe
Vous ne voulez mettre que certains utilisateurs (c'est-à-dire les utilisateurs appartenant au groupe sftp) dans l'environnement de la prison chroot. Ajoutez les lignes suivantes à la fin de /etc/ssh/sshd_config
nano /etc/ssh/sshd_config
Match Group sftp
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
Au dessus:
Match Group sftp - Ceci indique que les lignes suivantes ne seront mises en application que pour les utilisateurs appartenant au groupe sftp.
ChrootDirectory/sftp/% u - C'est le chemin qui sera utilisé après l'authentification de l'utilisateur. % u indique l'utilisateur. Donc, pour Tom, ce sera /sftp/christophe.
ForceCommand internal-sftp - Ceci force l'exécution du internal-sftp et ignore toute commande mentionnée dans le fichier ~/.ssh/rc file.
5. Créer un répertoire de base 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 sftp. c'est-à-dire les utilisateurs qui ne seront autorisés qu'à exécuter sftp et qui seront dans l'environnement chroot.
mkdir /sftp/tom
Ainsi, /sftp/tom est équivalent à / pour Tom. Lorsque Tom utilise le sftp et exécute «cd /», il ne verra que le contenu des répertoires sous «/sftp/tom» (et non la vraie racine / du système). C'est la puissance du chroot.
Ainsi, sous ce répertoire /sftp/tom, créez n'importe quel sous-répertoire que vous souhaitez que l'utilisateur voie. Par exemple, créez un répertoire entrant dans lequel les utilisateurs peuvent envoyer leurs fichiers.
mkdir /sftp/tom/home
6. Configuration des autorisations appropriées
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 l'appartenance à l'utilisateur et au groupe sftp comme indiqué ci-dessous.
chown tom:sftp /sftp/tom/home
L'autorisation ressemblera à ce qui suit pour le répertoire entrant.
ls -ld /sftp/tom/home
drwxr-xr-x 2 to sftp 4096 Dec 28 23:49 /sftp/tom/home
L'autorisation ressemblera à ce qui suit pour le répertoire /sftp/tom
ls -ld /sftp/tom
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/tom
ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
7. Redémarrer sshd et testez Chroot SFTP
Redémarrez sshd:
service ssh restart
Testez l'environnement chroot sftp. Comme vous le voyez ci-dessous, lorsque tom fait sftp, et fait «cd /», il ne verra que le répertoire entrant.
Comentarios