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.

phunehehe
la source

Réponses:

29

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.

gabe.
la source
2
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.)

Gilles, arrête de faire le mal
la source
7

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.

Shadur
la source
semble plutôt obsolète, du moins dans Ubuntu
tobixen