Skip to main content

Debian: Configuration serveur SFTP + chroot

Explication pour mettre en place un serveur SFTP avec chroot. Le but étant de permettre à un utilisateur de se connecter à une machine via SFTP (transfert de fichier via SSH) et qu'il ait uniquement accès à son dossier personnel qu'il lui est dédié.
Cela étant très utile dans le cas d'un serveur Web, où l'ont veut donner uniquement accès au dossier web à un utilisateur, sans qu'il puisse accéder au reste du système.
Dans cette documentation, la configuration est pour debian, mais elle fonctionne sur d'autres distributions.

Pré-requis

Il faut s'assurer que le serveur SSH est installé (la plupart du temps il est déjà installé):

apt installe openssh-{client,server} openssh-sftp-server

Configuration et mise en place

Dans un premier temps, on va créer notre arborescence. Notre utilisateur s’appellera luc et son dossier home sera dans /var/sftp/luc

Création dossier /var/sftp, et affectations droits à root:

mkdir /var/sftp
chown root:root /var/sftp
chmod 755  /var/sftp
On créer le groupe sftpusers:
groupadd sftpusers
Création utilisateur sftp (luc), son dossier HOME dans /var/sftp, et sans shell "nologin":
useradd -g sftpusers -m -d /var/sftp/luc -s /sbin/nologin luc
Il faut lui définir un mot de passe:
passwd luc
On met les droits root sur son dossier home, sinon le chroot ne fonctionnera pas:
chown root:root /var/sftp/luc
Notre utilisateur ne pourra pas créer de fichiers et dossier dans son home, car les droits sont assignés à root. On va donc créer un sous dossier, où il aura tous les droits:
mkdir /var/sftp/luc/data
chown -R luc:sftpusers /var/sftp/luc/data

Configuration service sshd

Nous allons créer une règles dans notre service SSH, afin que les utilisateurs du groupe sftpusers puissent seulement se connecter en sftp sur notre machine, et qu'ils aient uniquement accès à leur dossier, via chroot

Sur debian, on va créer un fichier sftp_users.conf dans /etc/ssh/sshd_config.d/:

Match group sftpusers
ChrootDirectory /var/sftp/%h
X11Forwarding no
AllowTcpForwarding no
Forcecommand internal-sftp
On redémarre le service, pour prise en compte:
systemctl restart ssh
Test connexion:
sftp luc@IP_MACHINE
Si c'est OK, après saisie du mot de passe:
Connected to localhost.
sftp> ls
data
On peut aussi utiliser un client graphique (winscp, filezilla, nautilus...) pour se connecter.

Liens

lt.fr - Installer et configurer un serveur SFTP