Il est possible de transférer des fichiers sur un serveur linux de plusieurs façons, mais 2 sont souvent utilisées : FTP et SSH. Ici, il est question de permettre à un utilisateur d’initier une connexion FTP over SSH : SFTP.Cette méthode permet donc d’autoriser un utilisateur à faire du transfert de fichier sécurisé assez rapidement en passant par une connexion SSH (port 22 d’origine). En revanche, il est préférable de bloquer (chrooter) ces utilisateurs dans un dossier personnel afin d’éviter les problèmes de sécurité et de visibilité entre utilisateurs.
Normalement tous serveurs Linux peut fournir une connexion SSH et donc SFTP, il suffit de créer l’utilisateur, son répertoire avec les bons droits et modifier le comportement du système à la connexion.
Créer l’utilisateur
useradd -s /sbin/nologin -M -d / sftpuser passwd sftpuser cat /etc/passwd | grep sftpuser sftpuser:x:500:500::/:/sbin/nologin
Vérifier les règles du parefeu pour être certains que le port 22 est bien autorisé en entrée, ou un autre port si vous l’avez modifié.
iptables -L -n
Créer le répertoire racine
Ce répertoire peut être n’importe où, il faut lui mettre les droits root et autoriser les droits en lecture/écriture pour le groupe et les autres:
mkdir /home/data chown root:root /home/data chmod 755 /home/data
Créer un répertoire par utilisateur
Le répertoire utilisateur doit:
- être à l’intérieur du répertoire racine
- appartenir à nobody
- appartenir au groupe de l’utilisateur
- être en droit complet pour le propriétaire et le groupe
- être en lecture/écriture pour les autres
mkdir /home/data/user1 chown nobody:user1_grp /home/data/user1 chmod 755 /home/data/user1
Configurer le serveur SSH
La configuration du serveur SSH se fait dans:
vim /etc/ssh/sshd_config
Les configurations se situent en fin de fichier.
Il faut définir le comportement du serveur SFTP en remplaçant:
Subsystem sftp /usr/libexec/openssh/sftp-server
par
Subsystem sftp internal-sftp
Autoriser le groupe de l’utilisateur à se connecter:
AllowGroups user1_grp*
ou l’utilisateur
AllowUsers user1
Créer une règle pour l’utilisateur:
Match User user1*
ChrootDirectory /home/data/user1
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Il est possible de créer une règle pour un groupe en remplaçant
Match User user1*
par
Match Group group1*
Pour terminer
Si SELinux est de la partie, il est possible d’utiliser un booléen pour autoriser les utilisateurs chrootés à travailler dans leur environnement:
setsebool -P ssh_chroot_full_access 1
Redémarrer le service SSH
service sshd restart
L’utilisateur peut maintenant échanger des fichiers avec le serveur grâce à WinSCP par exemple.
* Minuscules obligatoires