Forum Linux.général PAM : empêcher un user de se connecter

Posté par  .
Étiquettes : aucune
0
8
août
2006
Bonjour,

J'ai la problématique suivante : j'ai un fichier /etc/passwd générique sur des serveurs, et je souhaite que seuls quelques users puissent se logger sur chaque serveur.

A cet effet, j'ai pensé à mettre en oeuvre un mécanisme qui me parait simple : si je crée le home directory d'un user sur un serveur, celui-ci doit pouvoir se logger. Si le home directory du user n'existe pas, le user ne doit pas pouvoir se connecter.

J'ai pensé à utiliser PAM pour cette tâche ... Je connais le module qui permet de créer automatiquement le home directory d'un user se connectant pour la première fois, mais y a-t-il un module permettant de faire ce que je veux ? Contrôler la validité du home directory, et si celui-ci n'existe pas empêcher le login ?

Et pour mettre cette solution en oeuvre, faut-il que que login (ou un autre outil) ait été compilé "pam enabled" ?

Merci. :)
  • # /bin/false

    Posté par  . Évalué à 1.

    Bonjour,

    En indiquant pour chaque utilisateur restreint un shell à false dans le fichier /etc/passwd, l'utilisateur ne peut théoriquement se connecter.
    • [^] # Re: /bin/false

      Posté par  . Évalué à 1.

      Oui mais ce n'est pas ce que je veux, mon passwd est générique, je ne le changerais pas au cas par cas.
      • [^] # Re: /bin/false

        Posté par  . Évalué à 1.

        Effectivement.
        Si tu as beaucoup d'utilisateurs cela ne peut être la solution.
    • [^] # Re: /bin/false

      Posté par  . Évalué à 1.

      dans le même style, tu peux mettre un unique shell pour chaque utilisateur du style /bin/sh_nomuser et de linker selon les cas ce fichier soit à /bin/false soit à /bin/bash.

      Toutefois, je te recommande soit d'utiliser soit un annuaire du style LDAP (qui permet une gestion centralisé) soit de passer par des modules pam.

      Sinon tout les outils utilisant les comptes systèmes passe par pam. Il n'y a rien à recomplier par défaut donc.
      • [^] # Re: /bin/false

        Posté par  . Évalué à 1.

        Notre distrib est une LFS, donc au contraire, il faudra compiler les outils au besoin. :)
        Devoir gérer tout une liste de liens pour les shells utilisateurs est trop contraignant également, pour certaines raisons il ne faut pas toucher au passwd, d'où ma recherche d'une astuce liée aux home directory ...
  • # pam_listfile

    Posté par  (site web personnel) . Évalué à 1.

    Le truc qui me vient à l'esprit, c'est d'utiliser pam_listfile dans /etc/pam.d/ssh avec une ligne du style :

    auth    required        pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail
    

    puis de mettre la liste des utilisateurs autorisés à utiliser ssh dans /etc/sshusers.

    Après, y'a peut-être moyen d'utiliser un autre module pam pour tester la présence du répertoire personnel mais je ne trouve pas. Cette solution nécessite que openssh-server ait le support de pam.
    • [^] # Re: pam_listfile

      Posté par  . Évalué à 1.

      Cette solution implique d'avoir à gérer des listes de users en + du fichier passwd, mais elle est intéressante.
      Par contre elle n'empêchera pas des "su - toto" ...
      • [^] # Re: pam_listfile

        Posté par  (site web personnel) . Évalué à 1.

        Cette solution implique d'avoir à gérer des listes de users en + du fichier passwd, mais elle est intéressante.
        Un find /home -type d -maxdepth 1 -mindepth 1 -exec basename {} \; | grep -v '^lost+found' > /etc/sshusers pourrait te faciliter la tâche.

        Par contre elle n'empêchera pas des "su - toto" ...
        Dans ce cas peut-être utiliser /etc/pam.d/login au lieu de /etc/pam.d/ssh et cette fois il faut bien que login soit compilé avec le support pam.
  • # Avec un simple script shell

    Posté par  . Évalué à 1.

    Pour limiter les connections (en mode texte) aux utilisateurs ayant un répertoire personnel, attribue aux utilisateurs le shell /bin/connection-autorisee

    Le fichier /bin/connection-autorisee a pour propriétaire root:root et pour droits 755. Il est exécutable et contient les six lignes suivantes :
    #!/bin/bash
    if [ -d /home/${USER} ] ; then
    /bin/bash
    else
    echo "Vous n'avez pas le droit de vous connecter"
    fi

    Cela bloque les "su - utilisateur" si utilisateur n'est pas autorisé.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.