Configurer un serveur SFTP avec OpenSSH
Le but :
- permettre à des utilisateurs d'accéder à un espace de stockage personnel sur le serveur (via SSH).
- les utilisateurs n'ont pas le droit d'accéder en SSH au serveur, seulement en SFTP
- les utilisateurs doivent être chrootés (enfermés) dans un répertoire particulier sur le serveur (ils ne doivent pas pouvoir en sortir ni consulter l'arborescence antérieure).
On peut utiliser un logiciel (Pro-FTP, VsFTPd etc...)... ou simplement utiliser OpenSSH...
ça se fait en un tour de main !
Je vous montre ici 2 méthodes.
La première est la plus simple, la seconde est un peu plus élaborée.
Méthode 1 :
On se met en root pour la suite !
su -
Création des groupes d'utilisateurs
Créer un groupe pour chaque utilisateur.
groupadd UTILISATEUR1
groupadd UTILISATEUR2
groupadd UTILISATEUR3
groupadd UTILISATEUR4
Création des utilisateurs
Créer les utilisateurs UTILISATEUR1, UTILISATEUR2, UTILISATEUR3 et UTILISATEUR4 sans shell de connexion pour des raisons de sécurité. Assurez-vous de les ajouter au groupe correspondant.
useradd -G UTILISATEUR1 -m -d /SFTP/UTILISATEUR1 -s /sbin/nologin UTILISATEUR1
useradd -G UTILISATEUR2 -m -d /SFTP/UTILISATEUR2 -s /sbin/nologin UTILISATEUR2
useradd -G UTILISATEUR3 -m -d /SFTP/UTILISATEUR3 -s /sbin/nologin UTILISATEUR3
useradd -G UTILISATEUR4 -m -d /SFTP/UTILISATEUR4 -s /sbin/nologin UTILISATEUR4
Définir les mots de passe des utilisateurs
Utiliser la commande passwd pour définir les mots de passe des utilisateurs.
passwd UTILISATEUR1
passwd UTILISATEUR2
passwd UTILISATEUR3
passwd UTILISATEUR4
Création des répertoires
Créer les répertoires nécessaires pour chaque utilisateur.
mkdir -p /SFTP/UTILISATEUR1/DATA
mkdir -p /SFTP/UTILISATEUR2/DATA
mkdir -p /SFTP/UTILISATEUR3/DATA
mkdir -p /SFTP/UTILISATEUR4/DATA
Définir les permissions
Configurer les permissions pour le chroot.
chown root:wheel /SFTP
chmod 755 /SFTP
chown root:UTILISATEUR1 /SFTP/UTILISATEUR1
chmod 755 /SFTP/UTILISATEUR1
chown UTILISATEUR1:UTILISATEUR1 /SFTP/UTILISATEUR1/DATA
chmod 700 /SFTP/UTILISATEUR1/DATA
chown root:UTILISATEUR2 /SFTP/UTILISATEUR2
chmod 755 /SFTP/UTILISATEUR2
chown UTILISATEUR2:UTILISATEUR2 /SFTP/UTILISATEUR2/DATA
chmod 700 /SFTP/UTILISATEUR2/DATA
chown root:UTILISATEUR3 /SFTP/UTILISATEUR3
chmod 755 /SFTP/UTILISATEUR3
chown UTILISATEUR3:UTILISATEUR3 /SFTP/UTILISATEUR3/DATA
chmod 700 /SFTP/UTILISATEUR3/DATA
chown root:UTILISATEUR4 /SFTP/UTILISATEUR4
chmod 755 /SFTP/UTILISATEUR4
chown UTILISATEUR4:UTILISATEUR4 /SFTP/UTILISATEUR4/DATA
chmod 700 /SFTP/UTILISATEUR4/DATA
Configuration de sshd_config
Modifier le fichier de configuration SSH pour activer le chroot et restreindre les utilisateurs.
vi /etc/ssh/sshd_config
Ajouter/modifier les lignes suivantes :
Subsystem sftp internal-sftp
Match Group UTILISATEUR1
ChrootDirectory /SFTP/UTILISATEUR1
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match Group UTILISATEUR2
ChrootDirectory /SFTP/UTILISATEUR2
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match Group UTILISATEUR3
ChrootDirectory /SFTP/UTILISATEUR3
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match Group UTILISATEUR4
ChrootDirectory /SFTP/UTILISATEUR4
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Redémarrage du service SSH
Redémarrer le service SSH pour appliquer les modifications.
service sshd restart
Méthode 2 :
On se met en root pour la suite !
su -
1) Créer le groupe dont les utilisateurs seront autorisés à se connecter en SFTP :
groupadd sftpexclusive
2) Créer un second groupe, qui lui, permettra de désactiver le compte d'un utilisateur :
groupadd nosftp
Vous l'aurez compris, le principe est très simple : si on veut désactiver le compte d'un utilisateur, il suffira de le rajouter au groupe nosftp avec la commande suivante : (le compte sera alors immédiatement désactivé)
usermod -G nosftp marcel
Peu importe qu'il soit aussi dans l'autre groupe, car l'instruction du groupe interdisant la connexion sera placée avant dans le fichier /etc/ssh/sshd_config (voir plus bas).
Pour réactiver le compte, il faudra sortir l'utilisateur du groupe.
3) Ajouter le shell /usr/bin/false à la liste des shells autorisés
echo '/usr/bin/false' >> /etc/shells
Par défaut, ce shell n'est pas autorisé.
4) Créer l'utilisateur marcel, l'ajouter au groupe sftpexclusive, l'empêcher de se connecter en SSH, lui créer son répertoire d'accueil, lui attribuer un mot de passe et enfin s'occuper des permissions d'accès à son répertoire.
useradd -G sftpexclusive -s /sbin/nologin -m -d /SFTP/marcel marcel
/sbin/chown root:sftpexclusive /SFTP/marcel
chmod 755 /SFTP/marcel
Sur NetBSD, le raccourci de la commande chown ne fonctionne pas dans les scripts en shell standard, il faut indiquer le chemin complet (raison pour laquelle je le mets ici en entier).
5) modifier le fichier de configuration d'OpenSSH, /etc/ssh/sshd_config
- on va d'abord empêcher l'affichage des bannières d'accueil ainsi que du motd (je trouve ça drôlement emmerdant de voir que lorsqu'une connexion est refusée, openSSH vous présente qu'il s'agît d'un serveur NetBSD !! pas futefute ce truc !).
La commande suivante modifie directement le fichier sshd_config (à condition que vous n'ayez pas déjà modifié ces éléments avant.. sinon voir plus bas !)
sed -i '' 's/#Banner none/Banner no\nPrintMotd no/' /etc/ssh/sshd_config
- on va modifier le serveur SFTP indiqué par défaut dans le fichier pour le passer sur le serveur SFTP interne
- on va également faire en sorte que les utilisateurs n'ait qu'accès à SFTP, les enfermer, et empêcher tout type de forwarding.
La commande suivante modifie directement le fichier sshd_config (à condition que vous n'ayez pas déjà modifié ces éléments avant.. sinon voir plus bas !)
sed -i'' 's/\/usr\/libexec\/sftp-server/internal-sftp\n\nMatch Group nosftp\n ForceCommand \/usr\/bin\/false\n\nMatch Group sftpexclusive\n ChrootDirectory \/SFTP\/%u\n ForceCommand internal-sftp\n AllowTcpForwarding no\n X11Forwarding no\n/' /etc/ssh/sshd_config
Pour résumer le 5) :
voici ce que donne les 2 commandes imbuvables au-dessus dans votre fichier /etc/ssh/sshd_config :
# no default banner path
Banner no
PrintMotd no
# override default of no subsystems
Subsystem sftp internal-sftp
Match Group nosftp
ForceCommand /usr/bin/false
Match Group sftpexclusive
ChrootDirectory /SFTP/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
6) On redémarre ssh :
service sshd restart
↑ Haut de page