Sécurité : Un pas de plus vers la démocratisation du sftp
Posté par TeXitoi (Jabber id, page perso, ). Modéré le 22 février 2008.
Une nouvelle fonctionnalité se rajoute à OpenSSH : ChrootDirectory. Ainsi, il est facile de chrooter suite à la connexion d'un utilisateur. Cela permet de limiter la vision du système de fichier à un sous-ensemble lorsque cet utilisateur se connecte en ssh.
Combiné au serveur sftp intégré à sshd, il est possible de limiter l'utilisateur à une partie du système de fichier ne possédant aucun binaire, aucune bibliothèque, ni aucun node, comme ça aurait du être le cas si le server sftp n'était pas intégré à sshd. Par exemple, les hébergeurs web pourront maintenant, grâce à cette fonctionnalité, remplacer ftp par sftp.
Combiné au serveur sftp intégré à sshd, il est possible de limiter l'utilisateur à une partie du système de fichier ne possédant aucun binaire, aucune bibliothèque, ni aucun node, comme ça aurait du être le cas si le server sftp n'était pas intégré à sshd. Par exemple, les hébergeurs web pourront maintenant, grâce à cette fonctionnalité, remplacer ftp par sftp.
Le commit (498 hits)
La nouvelle chez Undeadly (316 hits)
Les lutins sont prem's (933 hits)
> Lire la dépêche (51 commentaires, moyenne: 2,9).
Vous avez demandé le commentaire #907229.




Plus précisément
Serait-il possible d'attribuer un répertoire d'accueil pour chaque user ?
Je veux dire que là, michu est chrooté dans /var/www/users, et donc il "voit" les autres répertoires, et doit rentrer dans le sien. Même si les droits sont mis en place pour qu'il ne puisse pas rentrer dans les autres répertoires, il les voit.
Y a t-il une possibilité de chroot unique pour un user, ou alors est-ce une feature qui sera fait dans l'avenir/jamais ?
[^]Re: Plus précisément
> les autres répertoires, et doit rentrer dans le sien.
Non, au login sftp va placer l'utilisateur directement dans /chroot/$HOME/
> Même si les droits sont mis en place pour qu'il ne puisse pas
> rentrer dans les autres répertoires, il les voit.
Voila une astuce simple décrite sur Undeadly, pour éviter que
les utilisateurs ne voient les autres homes :
1) Modifier l'indication des chemins des répertoires home
dans /etc/passwd pour qu'ils ressemblent à : /user1, /user2, ...
2) Créer cette structure de répertoires :
/chroot/user1/user1
/chroot/user2/user2
3) Puis, dans ssh_config :
Et hop, c'est réglé, l'utilisateur ne voit pas les autres homes, seulement la sienne.
[^]Re: Plus précisément
Il y a aussi une autre méthode, non ?
Ca peut fonctionner de faire plusieurs directives "Match Group". Comme ça, si chaque user à un GID unique, on peut le chrooter ailleurs.
A voir si ça peut marcher, et si ça peut être mieux...
[^]Re: Plus précisément
Oui, bien entendu. Le but de l'exemple était d'éviter de faire une entrée par utilisateur.
Si on est prêt à faire une entrée dans sshd_config par utilisateur, alors
Match Userconvient aussi bien (dans ce cas, il n'est pas nécessaire que les utilisateurs aient des gid uniques).[^]Re: Plus précisément
Ah ben oui, encore mieux Match User comme directive.
Merci beaucoup.
[^]Re: Plus précisément
l'utilisateur se connecte dans le répertoire /var/www/users/son_login mais il apparait comme racine / pour lui. Il lui est impossible de remonter pour voir les autres répertoires.
[^]Re: Plus précisément
> l'utilisateur se connecte dans le répertoire /var/www/users/son_login mais il apparait comme racine / pour lui.
Non, sftp va se chrooter dans ChrootDir, puis va faire un chdir() dans la home de l'user (telle qu'indiquée dans /etc/passwd, mais relative à la chroot).
Autrement dit, si la home de toto indiquée dans /etc/passwd est "/home/toto", que le ChrootDir indiqué dans sshd_config est est "/chroot", alors sftp :
1- se chrootera dans /chroot
2- puis se déplacera dans /home/toto, relativement à sa chroot (donc en vrai, dans /chroot/home/toto).
3- l'utilisateur toto pourra voir les répertoires contigus à sa home (c'est à dire tout ceux en dessous du répertoire /chroot, y compris /chroot/home/pouet/, s'il existe).
Ce qui me fait penser, au passage et pour compléter la réponse que j'ai donné juste au-dessus, que si on veux garder une arborescence des homes du type /home/user1, /home/user2, alors on doit pouvoir faire :
Et dans /etc/passwd, indiquer "/" comme path de toutes les homes des utilisateurs qu'on veut chrooter.