Rendez-vous sur Arrakis, Le site perso d'un hacker libriste curieux crêpophile étourdi
Le 19/06/2019 à 15:43 dans /Journal/2018/

Serveur de stockage avec sftp et authentification par clé

Suite à la mise en ligne de https://www.reiva.xyz (fermé) proposant de sauvegarder ses fichiers avec syncthing, on m'a contacté pour savoir si je proposais aussi un accès SSH.

C'est désormais le cas. Enfin seulement un accès SFTP, dont je vais décrire la mise en place ci-dessous. SFTP est semble-t-il à préférer devant scp, pour au moins ces raisons :

Voici donc comment j'ai pu mettre en place un serveur de ce type avec uniquement identification par clé (pas de mot de passe).

Côté serveur

Tout d'abord, on édite la configuration de SSH dans le fichier /etc/ssh/sshd_config :

PermitRootLogin no
PasswordAuthentication no
Match Group sftpusers
        ChrootDirectory /var/sftp/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

On désactive les connexions par mot de passe et on indique que tous les utilisateurs appartenant au groupe sftpusers seront placés dans un chroot situé dans /var/sftp/nom-d-utilisateur.

Pensons quand même à créer ce groupe :

groupadd sftpusers

Pour créer un utilisateur, on procède ainsi :

useradd -G sftpusers -s /sbin/nologin -m user

Hop, pas de shell, c'est encore plus sûr :) .

N'oublions pas de créer le dossier du chroot :

mkdir -p /var/sftp/user
chown root:wheel /var/sftp/user

L'utilisateur chrooté ne pourra pas écrire dans son dossier avec ces permissions, pourtant nécessaires afin que le chroot soit actif, et qu'un utilisateur n'aille pas fouiller dans les documents des autres. On termine donc par créer un dossier dans lequel user pourra écrire :

mkdir -p /var/sftp/user/docs
chown user:sftpusers /var/sftp/user/docs

Enfin, nous enregistrons la clé publique de l'utilisateur dans le fichier /home/user/.ssh/authorized_keys qu'il aura pris soin de générer comme il faut.

Utilisation côté client

L'utilisateur pourra se servir de la commande sftp ainsi :

sftp -o IdentityFile=~/.ssh/private_key user@host

Ou n'importe quel client sftp (filezilla…)

Il est aussi possible de monter ce répertoire de sauvegarde sur son ordinateur et se servir de n'importe quel client graphique ensuite pour gérer ses fichiers :

sshfs user@host /mnt/sftp -o IdentityFile=~/.ssh/private_key