Forum Linux.général PAM : filtrer sur l'adresse IP avec pam_access

Posté par  .
Étiquettes : aucune
0
4
avr.
2007
J'aimerais n'autoriser l'utilisateur toto à se connecter sur mon serveur que depuis la machine client1d'adresse IP 1.2.3.4

Dans mon /etc/security/access.conf j'écris :
+:toto:1.2.3.4
-:toto:ALL

ça ne marche pas, l'accès est refusé depuis client1.
Par contre si je mets :
+:toto:client1
-:toto:ALL

Là ça fonctionne. Je précise que 1.2.3.4 est résolu en client1par le fichier /etc/hosts

Si je supprime la référence à client1 dans /etc/hosts, je peux ne laisser que l'adresse IP dans access.conf et ça fonctionne.
Mais dès que l'adresse peut être résolue en un nom (DNS ou fichier hosts donnent le même résultat), seul ce nom semble pris en compte par pam_access, à tel point que l'accès est autorisé si j'écris :
-:toto:1.2.3.4
+:toto:client1
-:toto:ALL

alors que logiquement la première ligne devrait entraîner un refus.

Cela me chagrine, je souhaiterais n'avoir que des adresses IP dans access.conf sans pour autant me priver de la résolution de nom.

Une idée ?
  • # A mon avis ...

    Posté par  . Évalué à 4.

    En regardant le code source du module en question, on constate qu'il récupère l'ip ou le hostname de la façon suivante:


    /* remote host name */

    if (pam_get_item(pamh, PAM_RHOST, (const void **)&from)
    != PAM_SUCCESS) {
    _log_err("cannot find the remote host name");
    return PAM_ABORT;
    }
    /** SNIP SNIP **/
    loginfo.from = from;


    Il matche ensuite directement le champ loginfo.from avec le contenu de ta conf.

    Or, en regardant le guide de développeur PAM[1], on constate que PAM_RHOST contient le nom résolu ou, si pas de résolution possible, l'adresse IP.
    Ta problématique n'a donc pas de solution,

    [1]: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/old/(...)
    • [^] # Re: A mon avis ...

      Posté par  . Évalué à 1.

      C'est bien ce dont j'avais l'intuition hélas.

      Merci pour la réponse, je n'aurais pas été capable d'explorer moi-même les sources (en tout cas pas si vite).
    • [^] # Re: A mon avis ...

      Posté par  . Évalué à 1.

      Je viens de parcourir le lien que tu donnes, mais je n'y trouve rien que j'arrive à traduire par "PAM_RHOST contient le nom résolu ou, si pas de résolution possible, l'adresse IP"
      • [^] # Re: A mon avis ...

        Posté par  . Évalué à 2.

        Pour ma part, je lis:

        The requesting hostname (the hostname of the machine from which the PAM_RUSER entity is requesting service).


        Après, pour ce qui est du fallback sur l'ip, cela me semble évident mais se démontre facilement en jetant un oeil dans les logs:
        Sur mon serveur depuis une machine n'ayant pas d'enregistrement reverse:

        Apr 5 11:27:05 rei sshd[27518]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=*.*.181.134 user=root

        J'ai substitué les deux premiers digits pour plus de discrétion...

        Sur mon serveur depuis une machine ayant un enregistrement reverse:

        Apr 5 11:30:10 rei sshd[30390]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=6.102.97-84.rev.gaoland.net user=root
        • [^] # Re: A mon avis ...

          Posté par  . Évalué à 1.

          On est d'accord.
          J'avais fais le même constat sur les logs, et le même raisonnement m'avais conduit à la même conclusion.
          Mais ton commentaire me laissait penser que tu avais trouvé une description explicite de ce fonctionnement dans la doc (ça m'aurait arrangé pour y faire référence auprès d'autres personnes).

          Merci encore pour tes réponses.

Suivre le flux des commentaires

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