Monthly Archives: September 2015

Serveur SFTP

Tutorial de mise en place d’un service de transfert de fichier sécurisé (SFTP) avec possibilité de téléversement.

Pour donner un accès en téléversement à un tiers, la solution la plus logique serait d'utiliser ssh et de limiter ce tiers au serveur sFTP. Bien que ce ne soit obligatoire, celui-ci serait emprisonné dans son répertoire utilisateur (chroot)

Création du groupe et des utilisateurs

Création du groupe sftponly qui limiterait les utilisateurs à l'utilisation de sFTP (accès SSH interdit)

groupadd sftponly

Création d'un utilisateur dont l'accès serait uniquement via sFTP (pas d'ouverture de session possible, en local ou distant) et affectation d'un mot de passe.

useradd -m -s /bin/false -c 'sFTP User Only' sftptest
usermod -aG sftponly  sftptest
passwd sftptest

Modification de la configuration du démon SSH

Dans le fichier /etc/ssh/sshd_config Modifier le programme gérant le sFTP afin d'utiliser le wrapper interne à ssh pour lancer le programme sFTP. En effet le binaire ne sera pas accessible depuis le chroot.

Subsystem       sftp    internal-sftp

Ajouter à la fin du fichier, la configuration des utilisateurs ayant pour groupe sftponly afin de les emprisonner dans leur répertoire personnel et de leur permettre l'accès uniquement au service sFTP.

Match Group sftponly
   ChrootDirectory %h
   ForceCommand internal-sftp
   X11Forwarding no
   AllowTcpForwarding no

Le démon SSH (sshd) doit être rafraichi

service sshd reload

Ajuster les droits des répertoires utilisateurs créés

Le répertoire personnel des utilisateurs sFTP doit avoir pour propriétaire et groupe root et pour permission 755 (root:root rwxr-xr-x). Afin de pouvoir téléverser, il faut créer un répertoire ayant pour propriétaire l'utilisateur (sftptest ici). en effet l'utilisateur ne pourra pas téléverser à sa racine (son répertoire utilisateur).

chown root:sftponly /home/sftptest
chmod 755 /home/sftptest
mkdir /home/sftptest/upload
chown sftptest: sftponly /home/sftptest/upload
chmod 755 /home/sftptest/upload

SELinux

Par défaut, pour SELinux, le chroot sFTP est en lecture seule. Afin d'autoriser le téléversement, il faut qu'il soit en lecture/écriture. SELInux dispose d'un booléen pour ça.

setsebool -P ssh_chroot_rw_homedirs on

Test

Afin de ne pas perturber le démon SSH en cours d'utilisation, on peut lancer une seconde instance (sur un port différent) en mode debug

/usr/sbin/sshd -p 2222 -d

Depuis un autre poste, on test la connexion ssh (qui ne doit pas fonctionner) et le téléversement d'un fichier à la racine (qui doit rapporter une erreur) et dans le répertoire upload (seul ce dernier doit fonctionner).

ssh -p 2222 sftptest@monserver
sftptest@monserver's password:
This service allows sftp connections only.
Connection to monserver closed.
sftp -p 2222 sftptest@monserver
sftptest@monserver's password:
Connected to monserver.
sftp> ls
upload
sftp> put test.txt
Uploading test.txt to /test.txt
remote open("/test.txt"): Permission denied
sftp> cd upload
sftp> put test.txt
Uploading test.txt to /upload/test.txt
test.txt                    100%    5     0.0KB/s   00:00
sftp> exit
source: https://wiki.tartarefr.eu/index.php/Services/FTP/SFTP