Créer un utilisateur SFTP de manière sécurisée et minimaliste

Pré-requis

Avoir déjà configuré son serveur SSH pour se connecter avec un utilisateur ayant accès aux droits d’administration.

Mettre en place l’environnement

Tout ce qui est indiqué dans cette partie a lieu sur le serveur

Pour notre exemple, nous allons assumer que vous souhaitez créer un utilisateur qui va publier du contenu web. Les répertoires indiqués le sont à titre d’exemples, adaptez les chemins en conséquence de vos besoins.

Créer l’utilisateur et son groupe

On créé l’utilisateur, puis son groupe, on rajoute l’utilisateur au groupe et enfin, on s’assure qu’il ne puisse accéder qu’au client SFTP.

sudo useradd <username>
sudo groupadd <groupname>
sudo gpasswd -a <username> <groupname>
sudo usermod -s  /usr/lib/openssh/sftp-server <username>

Créer le répertoire de l’utilisateur

On créé le répertoire, on s’assure qu’il appartiennent bien à l’utilisateur root, de le protégér d’écriture de la part d’autres utilisateurs, puis on le définit comme répertoire d’accueil de l’utilisateur.

sudo mkdir /srv/www/domain.tld/
sudo chown root /srv/www/domain.tld
sudo chmod go-w /srv/www/domain.tld
sudo usermod -d /srv/www/domain.tld/ <username>

Créer le répertoire web

C’est dans ce répertoire que l’utilisateur aura les droits pour créer, supprimer et éditer des fichiers et dossiers. On créé le répertoire, on nomme l’utilisateur et son groupe propriétaires puis on leur donne les droits nécessaires.

sudo mkdir /srv/www/domain.tld/public_html
sudo chown <username>:<groupname> /srv/www/domain.tld/public_html
sudo chmod ug+rwX /srv/www/domain.tld/public_html

Finaliser l’environnement

N’oubliez pas de rajouter la clef publique SSH de votre utilisateur dans le dossier nécessaire.

On créé le répertoire .ssh nécessaire et le fichier authorized_keys dans lequel on va mettre la clef publique, enfin, on rend l’utilisateur propriétaire et on s’assure qu’il puisse lire le fichier.

sudo mkdir /srv/www/domain.tld/.ssh
sudo touch /srv/www/domain.tld/.ssh/authorized_keys
sudo chown -R <username>:<groupname> /srv/www/domain.tld/.ssh
sudo chmod u+rX /srv/www/domain.tld/.ssh

Il n’y a plus qu’à copier-coller la clef publique SSH dans le fichier authorized_keys.

Bloquer l’utilisateur dans l’environnement

Tout ce qui est indiqué dans cette partie a lieu sur le serveur

On édite le fichier /etc/ssh/sshd_config on vérifie si la directive Subsystem est bien comme indiquée ci-dessous, sinon, on la corrige ou la créé.

[…]
Subsystem sftp internal-sftp
[…]

On cherche le bloc AllowUsers, s’il est commenté (avec un en début de ligne #), on le décommente (on efface le #) et puis on y ajoute notre utilisateur.

[…]
AllowUsers <username>
[…]

On se rend à la fin du fichier de configuration, et on rajoute la partie suivante.

[…]
Match User <username> # On indique que notre partie concerne l’utilisateur
	ChrootDirectory /srv/www/domain.tld # Là où on veut enfermer l’utilisateur
	AllowTCPForwarding no
	X11Forwarding no
	ForceCommand internal-sftp # On force l’utilisateur à utiliser seulement le terminal SFTP

On redémarre SSH pour que la nouvelle configuration soit prise en compte.

sudo systemctl restart sshd.service

Côté client

Sur le PC de l’utilisateur·trice, on génère simplement la clef, et on utilisera SFTP pour se connecter de manière sécurisée.

Tester la connexion à l’environnement

En essayant de se connecter via SSH avec l’utilisateur SFTP, on devrait obtenir le message suivant : This service allows sftp connections only.. SFTP devrait se connecter sans soucis, la commande pwd affichant /. Toute tentative d’ajouter du contenu dans le dossier racine devrait échouée mais une fois dans le dossier /public_html, l’utilisateur devrait pouvoir ajouter, éditer et supprimer des fichiers et dossiers.

Sources

Pour aller plus loin…

Créer un seul groupe pour les utilisateurs SFTP

Si on doit créer plusieurs utilisateurs, avoir un seul groupe à gérer peut être plus pratique. On peut par exemple l’appeler sftp. À la création de nouveaux utilisateurs, on n’aura qu’à directement ajouter ces derniers au groupe comme indiqué au début de ce billet.

Un lien pour approfondir

#IT #SysAdmin #SFTP #Linux