« Sftp-server » : différence entre les versions
(Page créée avec « Category:shell =N'autoriser que le SFTP= Pour limiter l'accès à un utilisateur au seul transfert de fichier via SFTP (SSH), il faut ajouter le shell <source lang="ba... ») |
(Déplacement de la section "Source" dans la section "N'autoriser que le SFTP" en tant que "Source de la section" + Création de la section "Limiter le SFTP d'un groupe utilisateurs à un répertoire".) |
||
Ligne 1 : | Ligne 1 : | ||
[[Category:shell]] | [[Category:shell]] | ||
=N'autoriser que le SFTP= | =N'autoriser que le SFTP= | ||
Pour limiter l'accès à un utilisateur au seul transfert de fichier via SFTP (SSH), il faut ajouter le shell <source lang="bash" inline>/usr/lib/stfp-server</source> dans le fichier <source lang="bash" inline>/etc/shells</source> avec cette commande : | Pour limiter l'accès à un utilisateur au seul transfert de fichier via SFTP (SSH), il faut ajouter le shell <source lang="bash" inline>/usr/lib/stfp-server</source> dans le fichier <source lang="bash" inline>/etc/shells</source> avec cette commande : | ||
echo '/usr/lib/stfp-server' >> /etc/shells | echo '/usr/lib/stfp-server' >> /etc/shells | ||
et définir le shell de connexion de l'utilisateur souhaité | et définir le shell de connexion de l'utilisateur souhaité | ||
vim /etc/passwd | vim /etc/passwd | ||
Mettre <source lang="bash" inline>/usr/lib/stfp-server</source> à la place de <source lang="bash" inline>/bin/bash</source>. | Mettre <source lang="bash" inline>/usr/lib/stfp-server</source> à la place de <source lang="bash" inline>/bin/bash</source>. | ||
=Source= | |||
https://debian-administration.org/article/94/How_to_restrict_users_to_SFTP_only_instead_of_SSH | ==Source de la section== | ||
* https://debian-administration.org/article/94/How_to_restrict_users_to_SFTP_only_instead_of_SSH | |||
=Limiter le SFTP d'un groupe utilisateurs à un répertoire= | |||
Cette section va expliquer la mise en œuvre d'un ''chroot'' pour le ''shell'' SFTP d'un groupe utilisateurs. | |||
Pour cette partie, je vais prendre pour exemple deux personnes qui travaillent sur un même projet WEB et doivent apporter des modifications simultanées sur le site. | |||
{{info|Le ''chroot'' du serveur [[Openssh|OpenSSH]] est un peu bizarre (pour ne pas dire merdique). Il n'autorise la racine qu'à l'utilisateur "root" (et seulement lui). Aucun autre utilisateur ne doit avoir de droits dans le répertoire de destination du ''chroot'' ("/var/www" dans mon cas). Ce détail est expliqué dans la section ''ChrootDirectory'' du [https://linux.die.net/man/5/sshd_config manuel]. | |||
Il est donc obligatoire d'avoir deux niveaux de répertoire: la racine (en droit ''root'' uniquement) et le répertoire de travail (avec les droits des utilisateurs) contenu dans la nouvelle racine.}} | |||
==Configuration du serveur SSH== | |||
Il va falloir changer le module SFTP pour pouvoir supporter cette fonctionnalité et ajouter une section propre au groupe utilisateurs à limiter. | |||
vim /etc/ssh/sshd_config | |||
<source lang="bash"> | |||
# Remplacer le sous système SFTP par défaut par le module adéquat. | |||
#Subsystem sftp /usr/lib/openssh/sftp-server | |||
Subsystem sftp internal-sftp | |||
Match group toto | |||
# Forcer la connexion à utiliser SFTP et changer la racine au répertoire requis. | |||
ForceCommand internal-sftp | |||
ChrootDirectory /var/www/ | |||
# Désactiver la tunnelisation, l'agent d'authentification ainsi que le routage TCP et X11. | |||
PermitTunnel no | |||
AllowAgentForwarding no | |||
AllowTcpForwarding no | |||
X11Forwarding no | |||
</source> | |||
==Configuration de la partie utilisateurs== | |||
groupadd toto | |||
apt install acl | |||
setfacl -Rm g:toto:rwx,u:www-data:rw-,o:--- /var/www/notresite/ | |||
useradd ycharbi | |||
useradd lesmorin | |||
usermod -s /usr/lib/sftp-server ycharbi | |||
usermod -s /usr/lib/sftp-server lesmorin | |||
Ces commandes ont pour effet: | |||
# Création du groupe ''toto'' | |||
# Ajout du paquet permettant la [[Gestion_des_droits_linux#Droits_.C3.A9tendus|gestion des droits étendus]] | |||
# Ajout des droits étendus sur le répertoire de travail pour permettre la lecture/écriture des développeurs | |||
# Création de l'utilisateur ''ycharbi'' | |||
# Création de l'utilisateur ''lesmorin'' | |||
# Les deux dernières commandes auront pour effet de changer le ''shell'' des utilisateurs. Elles modifient le fichier <source lang="bash" inline>/etc/passwd</source> comme suit: | |||
ycharbi:x:1000:1000::/home/ycharbi:/usr/lib/sftp-server | |||
lesmorin:x:1001:1001::/home/lesmorin:/usr/lib/sftp-server | |||
Modifier le fichier <source lang="bash" inline>/etc/group</source> afin de mettre vos utilisateurs dans le groupe concerné par le ''chroot'' (''toto'' en l'occurrence): | |||
ycharbi:x:1000: | |||
mysql:x:112: | |||
ssl-cert:x:113: | |||
toto:x:1001:ycharbi,lesmorin | |||
lesmorin:x:1002: | |||
Vous avez maintenant un accès SFTP limité au répertoire donné sur le serveur de développement. | |||
==Sources de la section== | |||
* https://passingcuriosity.com/2014/openssh-restrict-to-sftp-chroot/ | |||
* https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/ |
Version du 7 juillet 2019 à 18:01
N'autoriser que le SFTP
Pour limiter l'accès à un utilisateur au seul transfert de fichier via SFTP (SSH), il faut ajouter le shell /usr/lib/stfp-server
dans le fichier /etc/shells
avec cette commande :
echo '/usr/lib/stfp-server' >> /etc/shells
et définir le shell de connexion de l'utilisateur souhaité
vim /etc/passwd
Mettre /usr/lib/stfp-server
à la place de /bin/bash
.
Source de la section
Limiter le SFTP d'un groupe utilisateurs à un répertoire
Cette section va expliquer la mise en œuvre d'un chroot pour le shell SFTP d'un groupe utilisateurs.
Pour cette partie, je vais prendre pour exemple deux personnes qui travaillent sur un même projet WEB et doivent apporter des modifications simultanées sur le site.
INFORMATION
Le chroot du serveur OpenSSH est un peu bizarre (pour ne pas dire merdique). Il n'autorise la racine qu'à l'utilisateur "root" (et seulement lui). Aucun autre utilisateur ne doit avoir de droits dans le répertoire de destination du chroot ("/var/www" dans mon cas). Ce détail est expliqué dans la section ChrootDirectory du manuel. Il est donc obligatoire d'avoir deux niveaux de répertoire: la racine (en droit root uniquement) et le répertoire de travail (avec les droits des utilisateurs) contenu dans la nouvelle racine.Configuration du serveur SSH
Il va falloir changer le module SFTP pour pouvoir supporter cette fonctionnalité et ajouter une section propre au groupe utilisateurs à limiter.
vim /etc/ssh/sshd_config
# Remplacer le sous système SFTP par défaut par le module adéquat.
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match group toto
# Forcer la connexion à utiliser SFTP et changer la racine au répertoire requis.
ForceCommand internal-sftp
ChrootDirectory /var/www/
# Désactiver la tunnelisation, l'agent d'authentification ainsi que le routage TCP et X11.
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Configuration de la partie utilisateurs
groupadd toto apt install acl setfacl -Rm g:toto:rwx,u:www-data:rw-,o:--- /var/www/notresite/ useradd ycharbi useradd lesmorin usermod -s /usr/lib/sftp-server ycharbi usermod -s /usr/lib/sftp-server lesmorin
Ces commandes ont pour effet:
- Création du groupe toto
- Ajout du paquet permettant la gestion des droits étendus
- Ajout des droits étendus sur le répertoire de travail pour permettre la lecture/écriture des développeurs
- Création de l'utilisateur ycharbi
- Création de l'utilisateur lesmorin
- Les deux dernières commandes auront pour effet de changer le shell des utilisateurs. Elles modifient le fichier
/etc/passwd
comme suit:
ycharbi:x:1000:1000::/home/ycharbi:/usr/lib/sftp-server lesmorin:x:1001:1001::/home/lesmorin:/usr/lib/sftp-server
Modifier le fichier /etc/group
afin de mettre vos utilisateurs dans le groupe concerné par le chroot (toto en l'occurrence):
ycharbi:x:1000: mysql:x:112: ssl-cert:x:113: toto:x:1001:ycharbi,lesmorin lesmorin:x:1002:
Vous avez maintenant un accès SFTP limité au répertoire donné sur le serveur de développement.