Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

: 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.

> Lire la dépêche (51 commentaires, moyenne: 2,9).  

Vous avez demandé le commentaire #907229.

Plus précisément

Posté par Nicolas (page perso, ) le 22/02/2008 à 22:35. (lien). Évalué à 3.

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

    Posté par herodiade () le 22/02/2008 à 23:47. (lien). Évalué à 6.

    > 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 :

    Match Group sftpusers
    ChrootDirectory /chroot/%u
    ForceCommand internal-sftp


    Et hop, c'est réglé, l'utilisateur ne voit pas les autres homes, seulement la sienne.

    • [^]Re: Plus précisément

      Posté par Nicolas (page perso, ) le 24/02/2008 à 11:23. (lien). Évalué à 1.

      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

        Posté par herodiade () le 24/02/2008 à 12:30. (lien). Évalué à 2.

        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 User convient aussi bien (dans ce cas, il n'est pas nécessaire que les utilisateurs aient des gid uniques).

        • [^]Re: Plus précisément

          Posté par Nicolas (page perso, ) le 24/02/2008 à 16:35. (lien). Évalué à 1.

          Ah ben oui, encore mieux Match User comme directive.
          Merci beaucoup.

    [^]Re: Plus précisément

    Posté par Mathieu () le 22/02/2008 à 23:47. (lien). Évalué à 1.

    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

      Posté par herodiade () le 23/02/2008 à 00:00. (lien). Évalué à 6.

      > 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 :

      Match Group sftpusers
      ChrootDirectory /home/%u
      ForceCommand internal-sftp


      Et dans /etc/passwd, indiquer "/" comme path de toutes les homes des utilisateurs qu'on veut chrooter.