web-dev-qa-db-fra.com

Restreindre un utilisateur SSH / SCP / SFTP à un répertoire

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 à mettre en place une prison chroot en copiant des binaires, mais je ne pense pas que cela devrait être nécessaire.

37
user4518

SSH prend en charge le chrootage natif d'un utilisateur SFTP. Vous avez juste besoin de fournir

ChrootDirectory

Dans votre fichier de configuration sshd et redémarrez sshd.

Si vous ne faites que sftp, vous n'avez rien d'autre à faire. Malheureusement, cela ne fonctionne pas pour scp. Pour Shell interactif, vous devrez copier les 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, à partir de la page de manuel sshd_config:

 Tous les composants du nom de chemin doivent être des répertoires appartenant à la racine qui ne sont 
 Accessibles en écriture par aucun autre utilisateur ou groupe. Après le chroot, sshd (8) change le répertoire de travail 
 En répertoire personnel de l'utilisateur. 

Recherchez ChrootDirectory dans man sshd_config pour plus d'informations.

30
gabe.

Un chroot est une méthode relativement simple. Étant donné que le système d'exploitation dispose déjà de cette fonction de sécurité, les rédacteurs de démons ne tentent généralement pas de la réimplémenter.

Rssh est livré avec un guide sur la mise en place d'une prison chroot. Il se trouve dans le fichier CHROOT de la distribution source. En bref, vous devez avoir:

  • Quelques binaires, copiés depuis 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ée du maître)
  • Quelques appareils: /dev/null, /dev/tty, Ainsi qu'une prise /dev/log Pour la journalisation (et vous devez dire à votre démon syslog d'écouter sur cette prise)

Astuce supplémentaire qui n'est pas dans la documentation rssh: Si vous avez besoin 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 de l'extérieur la prison. bindfs permet au répertoire remonté d'avoir des autorisations plus restrictives, par exemple en lecture seule. (mount --bind Ne l'est pas sauf si vous appliquez un correctif du noyau; Debian a inclus ce correctif depuis à East Lenny mais la plupart des autres distributions ne l'ont pas été en 2011.)

Vous voudrez peut-être regarder scponly (ou plus récemment, rssh ); il s'agit essentiellement d'un shell de connexion qui peut uniquement être utilisé pour lancer scp ou le sous-système sftpd. Dans la variante scponlyc, il effectue un chroot avant d'activer le sous-système en question.

7
Shadur