J'écris mon propre module PAM qui fera partie d'une application que je développe, mais je ne sais pas exactement où le mettre. Mon module fait essentiellement une authentification au niveau du réseau (avec d'autres mojo bien sûr) similaire à LDAP.
Il y a beaucoup de fichiers de configuration dans mon /etc/pam.d/
répertoire, et je sais ce que font la plupart des services (sauf quelques-uns, comme atd, polkit, ppp). Je suppose que l'authentification avec la pile PAM ressemble à ceci:
- Exécute la pile en fonction du nom du service (s'il existe un fichier de configuration)
- S'il n'est pas authentifié, recourez à common- *, où * est le type de module (auth, compte, etc.)
- Renvoyer le succès ou l'échec de l'application appelante (et toute autre donnée bien sûr)
Ai-je raison dans cette hypothèse? Toutes les plateformes ont-elles l'authentification commune, le compte commun, le mot de passe commun et la session commune?
Si c'est le cas, je pensais simplement le placer en haut de common- * en tant que sufficient
module afin qu'en cas d'échec, la pile PAM régulière ne soit pas affectée. Ceci est particulièrement avantageux car je peux le faire par programme lors de l'installation du logiciel.
Suis-je en train de manquer des failles de sécurité potentielles?
Je n'ai pas pu trouver de très bonne documentation sur l'endroit où intégrer les modules PAM personnalisés ou les problèmes de sécurité concernant l'emplacement des modules.
la source
Réponses:
Lorsque vous appelez à Linux-PAM pour une procédure d'authentification, il y a toujours une et une seule pile qui est exécutée.
La définition de la pile est recherchée à ces endroits; la première tentative réussie détermine quel fichier est lu:
le fichier est
/etc/pam.d
nommé d'après l'application "nom du service" (par exemple,sshd
ougdm
), oule fichier
/etc/pam.d/other
s'il n'existe aucun fichier spécifique au service, oule fichier
/etc/pam.conf
si le répertoire/etc/pam.d
n'existe pas.Voir la documentation de la fonction pam_start pour plus de détails.
Les fichiers common- * sont une convention suivie par de nombreuses distributions Linux mais ne sont pas mandatés par le logiciel PAM lui-même. Ils sont généralement inclus par d'autres fichiers PAM au moyen d'
@include
instructions; par exemple, le/etc/pam.d/other
fichier sur Debian a le contenu suivant:Les mêmes
@include
instructions peuvent également être utilisées par un fichier spécifique au service, et -indeed- elles sont dans la configuration par défaut sur Debian. Notez que c'est une question de configuration: un administrateur système est libre de modifier le fichier pour/etc/pam.d
ne pas inclure de fichiers communs * du tout!Par conséquent: si votre module PAM est spécifique à votre application, créez un fichier de service spécifique à l'application et appelez le module à partir de là. N'ajoutez pas automatiquement un module au fichier PAM d'autres services ni au
others
fichier de secours, car cela pourrait casser d'autres applications installées sur le système. La gestion de la pile logicielle PAM est une tâche pour l'administrateur système, pas pour les développeurs d'applications.la source