Pam est un système de bibliothèques qui garantit l'utilisation des commandes d'administration en récupérant les processus d'authentification des services et applications du système.
Peu connu il n'est pas moins utilisé sur beaucoup de distributions, c'est une couche massive de sécurité.
Pam à configurer : Le concept est plutôt simple, un fichier par programme ou daemon.
Bien entendu les développeurs de Jessie nous ont tout bien configuré comme il faut :
ls /etc/pam.d/
pour un petit aperçu. les plus importants sont :
ldd /bin/vers_le_programme | grep libpam
... # here are the per-package modules (the "Primary" block) password [success=1 default=ignore] pam_unix.so obscure sha512 # here's the fallback if no module succeeds password requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around password required pam_permit.so # and here are more per-package modules (the "Additional" block) # end of pam-auth-update config ...
Ici la première chose à noter c'est que la syntaxe employée est toujours de type :
NOM | COMMENTAIRES |
---|---|
Module type | Quel module de sécurité à utiliser (qu'est-ce que PAM va gérer) ? |
Control | que fait un module en cas d'échec |
Module path | le chemin du module |
Arguments | les arguments du module |
Chronologiquement une action PAM se déroule comme suit :
/etc/pam.d/login
, exécute les directives et renvoie au programme.Décortiquons la ligne :
password [success=1 default=ignore] pam_unix.so obscure sha512
/etc/passwd
et /etc/shadow
Success = 1
et default = ignore
c'est un peu plus compliqué j'aborderai ça plus loin.obscure
et sha512
signifient que le module va respectivement tester si votre niveau de complexité de mot de passe est suffisant et que le mot de passe sera crypté avec l'algorithme SHA512.obscure
teste les points suivants sur le mot de passe entré :Pour bien comprendre les mécanismes de PAM nous allons reprendre notre tableau, mais avant il est nécessaire d'aborder un autre point concernant les fichiers de configuration :
ls /etc/pam.d/*
Prenons l'exemple suivant :
auth required /lib/security/pam_securetty.so auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_rootok.so auth required /lib/security/pam_unix.so
Voila comment PAM va les interpréter :
Le module pam_securetty
va vérifier son fichier de configuration dans /etc/securetty
, afin de vérifier que le terminal utilisé est listé dans le fichier.
Si cela n'est pas le cas, les connexions en tant qu'utilisateur root ne seront pas permises.
Vu que le statut est à required
, le module appellera les trois autres modules de la pile mais, même si tous les autres sont ok, la connexion échouera.
Notons que si le module avait le statut requisite
, l'opération aurait été soldée par un échec et aucun des autres modules n'aurait été invoqué, peu importe leur statut.
pam_env
va fixer les variables d'environnement d'après le fichier /etc/security/pam_env.conf
.pam_rootok
va vérifier si l'utilisateur est root.pam_unix
authentifie l'utilisateur.pam_unix
ne sera pas invoqué. les appels système getpw*
.pam_unix
échoue et que pam_rootok
avait échoué, l'opération échouera.pam_rootok
échoue mais que pam_unix”
est correct, l'opération sera exécutée.NOM | COMMENTAIRES |
---|---|
Module type | quel module de sécurité à utiliser (qu'est-ce que PAM va gérer) ? |
Control | que fait un module en cas d'échec ? |
Module path | le chemin du module. |
Arguments | les arguments du module. |
Quatre structures de gestion possibles :
Que doit faire la librairie PAM en cas de réussite ou d'échec du module ?
Plusieurs possibilités :
* required : si un module required
retourne un statut qui n'est pas success
, l'opération échouera mais seulement après que tous les modules en dessous soient invoqués.
La réussite d'au moins un des modules required
est nécessaire.
requisite
échoue, l'application en est tout de suite informée et aucun autre module n'est invoqué. requisite
est nécessaire.sufficient
est suffisant. sufficient
qui suivent ne seront pas invoqués.required
échoue avant un sufficient
, l'opération échouera ignorant les autres modules sufficient
.
optional
est nécessaire si aucun autre n'a réussi.value=action pairs
(Déjà abordé lors de la présentation.)
[success=1 default=ignore]
success
, PAM va sauter 1 ligne dans le fichier de config (2 pour 2 lignes,etc…)if
faut avoir un serveur SSH fonctionnel
On va faire un exemple ça vaut mieux que les grands discours il paraît.
Modifions le comportement par defaut d'un programme en utilisant d'autres modules
/lib/i386-linux-gnu/security
Ici on va utiliser le module pam-dbus, sur le programme sshd
(OPEN-SSH).
On se logue sous X en graphique (dbus fonctionne avec le mode graphique).
On installe le module pam (oui il n'est pas installé par défaut :
apt install libpam-dbus
On édite le fichier /etc/pam.d/sshd
nano /etc/pam.d/sshd
Et on remplace la ligne suivante :
@include common-auth
par
auth required pam_dbus.so
ssh localhost
Résultat :
Ici le module pam-dbus va toujours envoyer un message “dbus” à tous les utilisateurs connectés localement pour autoriser ou non la connexion ssh à votre machine.
Décortiquons maintenant l'option :
auth required pam_dbus.so