Niveau :      
Résumé : pam

Le contrôle d'accès est généralement fourni par l'application qui fournit un service. Pour le ftp, on effectue un contrôle des logins et mots de passe, il en va de même pour gdm et les applications qui nécessitent un utilisateur, Pour cela, la bibliothèque pam est toute indiquée.

PAM (Pluggable Authentication Module) est une bibliothèque servant exclusivement à l'authentification. Je vous en ai déjà parlé plusieurs fois ici et encore là. Comme quoi, c'est presque aussi utilisé que ssh.

La bibliothèque PAM

Pam assure une authentification sécurisée et le fait bien, dans la grande tradition unix, 'do only a single thing, but to do it well'. Il ne fournit que 4 fonctionnalités :

  • auth : authentification, je m'appelle Obiwan et je peux le prouver
  • account : accès au compte, j'ai le droit de rentrer dans Mos Eisley à 6h du matin
  • password : gestion de l'authentification, je veux changer mon mot de passe en "Use the force Luke"
  • session : sers moi un verre avant que j'entre dans le bar et fait le ménage quand j'en sors

Une application qui gère une authentification doit au moins appeler une de ces fonctions (généralement auth, account et session). Notez que pam étant une bibliothèque, l'appel est fait en tant que l'utilisateur sous lequel tourne l'application. Généralement, c'est root (il n'y a que root qui puisse devenir un autre utilisateur), par exemple dans le cas de su ou login, mais cela peut aussi être un simple utilisateur comme pour xscreensaver (il n'appelle que la fonctionnalité auth).

Ces fonctions ne sont pas rendues pas la bibliothèque pam elle-même, mais par des modules. Cette conception permet de faire fonctionner des authentifications spéciales sur des outils qui ne sont pas nécessairement conçus pour. En effet, tout le monde utilise le module pam_unix qui fournit les fonctionnalités d'authentification unix historiques, dont la gestion de /etc/shadow et /etc/passwd. Mais il existe bien d'autres modules aux fonctionnalités intéressantes que nous verrons par la suite.

La configuration de PAM

Chaque application utilisant pam est configurée séparément dans un fichier du répertoire /etc/pam.d. Bien sûr, pam autorise l'inclusion de fichiers communs pour vous faciliter la vie. Le format de ces fichiers est assez simple, il s'agit d'une succession de lignes :

# fonctionnalité   priorité   module       paramètres du module
auth               required   pam_unix.so  nullok_secure

Les priorités les plus courantes sont required et sufficient dont le sens est plutôt explicite. Vous pouvez obtenir un contrôle très fin en fonction des valeurs de retour de chaque module, tout ceci est expliqué en détail dans le man de pam.conf.

Les modules PAM

Nous avons donc fait appel à PAM pour savoir si cette personne dans son landspeeder est bien celle qu'elle prétend. La configuration associée au service stormtrooper nous indique qu'il faut contrôler ses papiers à travers le module "kivabien.so". C'est pam qui va se charger de lancer le module et faire appel à ses fonctions. Voyons donc les modules à notre disposition :

$ ls /lib/security/
pam_access.so     pam_filter.so         pam_listfile.so   pam_permit.so       pam_stress.so       pam_unix_session.so
pam_cracklib.so   pam_ftp.so            pam_localuser.so  pam_rhosts_auth.so  pam_succeed_if.so   pam_unix.so
pam_debug.so      pam_gnome_keyring.so  pam_loginuid.so   pam_rhosts.so       pam_tally.so        pam_userdb.so
pam_deny.so       pam_group.so          pam_mail.so       pam_rootok.so       pam_time.so         pam_warn.so
pam_echo.so       pam_issue.so          pam_mkhomedir.so  pam_securetty.so    pam_umask.so        pam_wheel.so
pam_env.so        pam_keyinit.so        pam_motd.so       pam_selinux.so      pam_unix_acct.so    pam_xauth.so
pam_exec.so       pam_lastlog.so        pam_namespace.so  pam_shells.so       pam_unix_auth.so
pam_faildelay.so  pam_limits.so         pam_nologin.so    pam_ssh.so          pam_unix_passwd.so

Wahoo il y a de quoi faire ! Et encore, on ne parle pas des modules non installés sur mon système dont on peut trouver une liste quasi exhaustive. Je vais vous en citer quelques uns particulièrement importants ou intéressants :

  • pam_unix.so : l'indispensable, celui qui gère vos comptes
  • pam_xauth.so : déjà présenté sur ce site il permet de faire fonctionner les application X après un su
  • pam_cracklib.so : déjà présenté sur ce site permet de restreindre les mots de passe autorisés
  • pam_ssh.so : déjà présenté sur ce site permet d'autoriser les connexions à partir de la passphrase ssh
  • pam_ldap.so : pour s'authentifier sur un serveur ldap
  • pam_time.so : limite les accès en fonction de la date et de l'heure
  • pam_usbauth.so : pour s'authentifier avec une clé usb
  • pam_chroot.so : pour chrooter l'utilisateur
  • pam_mount.so : pour monter automatiquement un répertoire lors du login

Et maintenant, imaginez tout ce que vous pouvez faire en écrivant votre propre module pam : authentification par empreinte vocale, par webcam, par téléphone, par mail, par signature manuelle ou même pas la présence de votre portable a proximité.

Vous pouvez aussi à travers la partie session imaginer des actions spécifiques au login et logout d'un utilisateur comme monter un répertoire, lancer un avertissement sonore ou même lancer une machine virtuelle !

Amusez-vous bien, mais n'oubliez pas, une personne authentifiée n'existe pas pour autant pour tout le système. C'est à la bibliothèque nss de s'occuper de la liste des comptes ayant un nom dans le système. On en parle ici aussi.