Restreindre un utilisateur SSH / SCP / SFTP à un répertoire
36
Existe-t-il un moyen simple de restreindre un utilisateur SCP / SFTP à un répertoire? Toutes les méthodes que j'ai rencontrées m'obligent à configurer une prison chroot en copiant des fichiers binaires, mais je ne pense pas que cela soit nécessaire.
SSH Permet de chrooter un utilisateur SFTP en mode natif. Vous avez juste besoin de fournir
ChrootDirectory
Dans votre fichier de configuration sshd, puis redémarrez sshd.
Si vous ne faites que du sftp, alors vous n’avez rien à faire de plus. Malheureusement, cela ne fonctionne pas pour scp. Pour un shell interactif, vous devez copier les fichiers binaires et les nœuds / dev dans le chroot.
Un exemple de configuration, pour un seul utilisateur, testuser:
Match User testuser
ChrootDirectory /home/testuser
ForceCommand internal-sftp
Quelques éléments à prendre en compte, dans la page de manuel sshd_config:
Tous les composants du chemin doivent être des répertoires appartenant à la racine qui ne sont pas
accessible en écriture par tout autre utilisateur ou groupe. Après le chroot, sshd (8) change le
répertoire de travail dans le répertoire de base de l'utilisateur.
Recherchez ChrootDirectory dans man sshd_config pour plus d'informations.
Notez que la partie commençant par "Match User testuser" doit se trouver à la FIN du fichier, car elle ne comprendra les lignes de configuration que si l'utilisateur est "testuser" à partir de ce moment.
Magnus
1
Est-il également possible de chroot uniquement pour le protocole SFTP, tout en autorisant les connexions SCP normales?
Lanoxx
1
Sur ma machine Ubuntu 14.04, il était également nécessaire de changer la Subsystem sftp /usr/lib/openssh/sftp-serverligneSubsystem sftp internal-sftp -f AUTH -l VERBOSE
partie
@Magnus ou jusqu'à une autre Matchsection.
Roaima
12
Un chroot est une méthode relativement simple. Étant donné que le système d'exploitation possède déjà cette fonctionnalité de sécurité, les auteurs de démons ont tendance à ne pas tenter de la réimplémenter.
Rssh vient avec un guide pour la mise en place d'une prison chroot. C'est dans le CHROOTfichier dans la distribution source. En un mot, vous devez avoir:
Quelques binaires, copiés à partir de la racine: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
Les bibliothèques ( {/usr,}/lib/lib*.so.[0-9]) qu’elles utilisent, également copiées
A /etc/passwd(très probablement pas une copie mais dérivé du maître)
Quelques dispositifs: /dev/null, /dev/ttyet aussi une /dev/logprise pour l' enregistrement (et vous devez dire à votre démon syslog à écouter sur cette prise)
Conseil supplémentaire qui ne figure pas dans la documentation rssh: Si vous souhaitez que certains fichiers soient accessibles dans une prison chroot, vous pouvez utiliser bindfs ou Linux mount --bindpour créer des hiérarchies de répertoires supplémentaires à partir de la prison. bindfspermet au répertoire remonté d'avoir des autorisations plus restrictives, par exemple en lecture seule. ( mount --bindsauf si vous appliquez un correctif de noyau; Debian a inclus ce correctif depuis East Lenny, mais la plupart des autres distributions ne l'ont pas encore fait en 2011.)
Vous voudrez peut-être regarder scponly (ou plus récemment, rssh ); c'est essentiellement un shell de connexion qui ne peut être utilisé que pour lancer scp ou le sous-système sftpd. Dans la scponlycvariante, il exécute un chroot avant d'activer le sous-système en question.
Subsystem sftp /usr/lib/openssh/sftp-server
ligneSubsystem sftp internal-sftp -f AUTH -l VERBOSE
Match
section.Un chroot est une méthode relativement simple. Étant donné que le système d'exploitation possède déjà cette fonctionnalité de sécurité, les auteurs de démons ont tendance à ne pas tenter de la réimplémenter.
Rssh vient avec un guide pour la mise en place d'une prison chroot. C'est dans le
CHROOT
fichier dans la distribution source. En un mot, vous devez avoir:/usr/bin/scp
,/usr/libexec/openssh/sftp-server
,/usr/bin/rssh_chroot_helper
{/usr,}/lib/lib*.so.[0-9]
) qu’elles utilisent, également copiées/etc/passwd
(très probablement pas une copie mais dérivé du maître)/dev/null
,/dev/tty
et aussi une/dev/log
prise pour l' enregistrement (et vous devez dire à votre démon syslog à écouter sur cette prise)Conseil supplémentaire qui ne figure pas dans la documentation rssh: Si vous souhaitez que certains fichiers soient accessibles dans une prison chroot, vous pouvez utiliser bindfs ou Linux
mount --bind
pour créer des hiérarchies de répertoires supplémentaires à partir de la prison.bindfs
permet au répertoire remonté d'avoir des autorisations plus restrictives, par exemple en lecture seule. (mount --bind
sauf si vous appliquez un correctif de noyau; Debian a inclus ce correctif depuis East Lenny, mais la plupart des autres distributions ne l'ont pas encore fait en 2011.)la source
Vous voudrez peut-être regarder scponly (ou plus récemment, rssh ); c'est essentiellement un shell de connexion qui ne peut être utilisé que pour lancer scp ou le sous-système sftpd. Dans la
scponlyc
variante, il exécute un chroot avant d'activer le sous-système en question.la source