follow me !

Documentations - Sécurité

Améliorer l'authentification sur son système Debian à l'aide de Linux-PAM

1. Introduction

Tous les systèmes basés sur Unix possèdent un système d'authentification reposant sur les mots de passe. A partir de 1995, la bibliothèque PAM a été créée et a fournie une API pour les services relevant de l'authentification permettant à un administrateur système de "jouer" avec l'authentification sur le système à l'aide de modules. Nous allons voir comment, à l'aide de Linux-PAM, améliorer l'authentification des utilisateurs sur notre système Debian.

Les mots de passe des utilisateurs affectent la sécurité d'un système car ils peuvent être mal choisis et donc faciles à deviner ou être révélés par inadvertance ou découverts de diverses façons. Il existe différents moyens pour enrayer ce type de problème.


2. Bien choisir son mot de passe

Avant toute chose, chaque utilisateur du système se doit de choisir un mot de passe convenable. Les mots de passe sont souvent découvert du fait qu'ils ont mal été choisis. La sécurité de ceux-ci résident dans la sélection appropriée de mots ou combinaisons de mots, de symboles ou de caractères afin qu'ils ne soient pas facile à deviner. Ainsi, le mot de passe ne doit pas être un nom, surtout si celui-ci est un nom ou prénom de votre famille, ni un numéro de téléphone, ni une date de naissance ou une adresse. Les "crackers" se renseignent en général sur leurs victimes et essayent en premier ce type de mot de passe avant d'aller chercher ailleurs. Il faut également éviter d'associer son mot de passe avec des séquences clavier du type "azerty" ou autre.

Votre mot de passe doit être facile à retenir et ne doit surtout pas être noté sur un bout de papier collé sur votre écran par exemple. Pour vous faciliter la tâche pensez à utiliser des moyens simples pour vous souvenir de votre mot de passe. Par exemple, vous pouvez utiliser une phrase facile à se rappeler et sélectionner la première lettre de chaque mot pour constituer votre mot de passe :

Jeu de main jeu de vilain !
vous donne :
J2mjdv!
Vous pouvez également utiliser votre propre méthode de construction de mots de passe et ne pas prendre en compte la méthode proposée ici.


3. Le système Linux-PAM

Le système PAM (Pluggable Authentication Modules) est, à la base, une suite de librairies partagées qui permet à l'administrateur de choisir comment les applications authentifieront les utilisateurs. PAM est donc une collection de modules qui forment une barrière entre un service de votre système et son utilisateur. L'utilisation de ces modules varie énormément allant du rejet de connexion de certains utilisateurs de certains groupes UNIX à l'implémentation de limites quant aux ressources de votre système.

La plupart des UNIX commerciaux actuels intègre ce système ainsi que pratiquement toutes les distributions Linux. Le pouvoir et la souplesse qu'offre PAM est une aubaine pour les développeurs d'applications pour systèmes Linux car cela leur évite de coder une interface d'authentification à part, ils leur suffit d'écrire un module PAM et ainsi les administrateurs pourront configurer leur application simplement avec toutes celles utilisant PAM. Ceci rend également la vie plus facile à l'administrateur qui ne devra connaitre que PAM et non tous les systèmes d'authentification pour chaque service mis en place.


3.1. Le fichier de configuration de Linux-PAM

Nous verrons comment PAM s'applique à un système GNU/Linux et plus particulièrement à Debian. Solaris et d'autres systèmes UNIX commerciaux ont une configuration un peu différente basée sur un seul fichier /etc/pam.conf. Cependant le système reste le même, sous Linux chaque service utilisant PAM aura son propre fichier de configuration. Sur la plupart des systèmes GNU/Linux, ces fichiers de configurations se situent dans le répertoire /etc/pam.d et sont nommés selon le nom du service. Par exemple, le fichier de configuration "login" se nomme /etc/pam.d/login. Jetons un oeil au fichier pour voir à quoi cela ressemble :

	auth required /lib/security/pam_securetty.so
	auth required /lib/security/pam_nologin.so
	auth sufficient /lib/security/pam_ldap.so
	auth required /lib/security/pam_unix_auth.so try_first_pass
	account sufficient /lib/security/pam_ldap.so
	account required /lib/security/pam_unix_acct.so
	password required /lib/security/pam_cracklib.so
	password required /lib/security/pam_ldap.so
	password required /lib/security/pam_pwdb.so use_first_pass 
	session required /lib/security/pam_unix_session.so
	


3.2. Le royaume de l'administration PAM

La première chose à noter est que la première colonne du fichier indique le type de tâche que PAM va gérer parmis les quatre types suivant : auth (gestion des authentification), account (gestion des comptes), password (gestion des mots de passes) et session (gestion des sessions). Tandis que de nombreux modules supportent plus d'une structure (pam_unix par exemple les utilisent tous), d'autres, comme pam_craklib, ne sont destinés qu'à une seule (dans le cas de pam_craklib seule la structure 'password' sera utilisée). La compréhension de ces quatres structures est très importante pour une utilisation efficace de PAM. Voyons comment ils fonctionnent :

  • authentication management (authentification) : ceci permet à l'utilisateur de s'authentifier et de définir les droits du compte.Les modules utilisant ce système demandent en général un mot de passe.

  • account management (gestion de compte) : permet la gestion des comptes utilisateurs. Par exemple, des restrictions peuvent être définies selon les horaires ou la charge du serveur.

  • session management (gestion de session) : Ce sont les tâches à effectuer en début et fin de chaque session. Par exemple, démarrer un agent ssh, monter des disques, etc ...

  • password management (gestion des mots de passe) : mise à jour du jeton d'authentification du compte d'un utilisateur, soit parce qu'il a expiré soit parce que celui-ci désire le modifier.


3.3. Contrôle de réussite des modules PAM

La colonne du milieu contient un mot clé qui détermine ce que la librairie PAM doit faire en cas de réussite ou d'echec du module. L'application n'est pas au courant du succès ou des échecs des modules dans /etc/pam.d, elle reçoit uniquement une réponse sommaire de la librairie PAM. Voici une présentation de ces quatres mots-clés :

required   :	
si un module "required" retourne un status 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  :	
si un module "requisite" échoue, l'application en est tout de suite informée et aucun autre 
module n'est invoqué. La réussite de tous les modules "requisite" est nécessaire.

sufficient : 	
la réussite d'un seul module "sufficient" est suffisant. Tous les modules "sufficient" qui 
suivent ne seront pas invoqués. Il faut noter, toutefois, que si un module "required" échoue
avant un "sufficient", l'opération échouera ignorant les autres modules "sufficient".
	
optional   :	
la réussite d'au moins un des modules "required" est nécessaire si aucun autre n'a réussi.


3.4. "Stacking" modules

Dans la colonne la plus à droite, nous voyons le chemin où est stocké le module. Dans notre exemple, quatre modules différents sont listés pour le type "auth". En anglais le terme "stacking" est employé dans le jargon PAM pour indiquer le fait qu'on empile les modules. Ceci sous-entend que l'ordre dans lequel passent les modules est important (nous le verrons un peu plus bas). De plus, on peut également passer des options aux modules comme c'est le cas dans notre exemple avec le module "pam_unix" qui prend l'argument "try_first_pass".


3.5. Fonctionnement de l'empilage des modules

Maintenant que nous avons vu comment se présentait un fichier de configuration, attardons-nous un peu plus sur notre exemple et plus précisement sur le type "auth" et sa pile d'exécution en détaillant ce qui pourrait se produire en fonction de différents scénarios.

Dans notre fichier d'exemple, nous avons quatre modules empilés pour le type auth :

	auth       required     /lib/security/pam_securetty.so
	auth       required     /lib/security/pam_env.so
	auth       sufficient   /lib/security/pam_ldap.so
	auth       required     /lib/security/pam_unix.so try_first_pass
	

Comme les modules sont invoqués dans l'ordre, voici ce qui va arriver :

Le module "pam_securetty" va vérifier son fichier de configuration, /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 appelera 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é par un échec et aucun des autres modules n'auraient été invoqué, peu importe de leur statut.

Le module "pam_env" va fixer les variables d'environnement d'après le fichier /etc/security/pam_env.conf.

Le module "pam_ldap" va demander à l'utilisateur un mot de passe et vérifier ensuite le répertoire ldap indiqué dans le fichier /etc/ldap.conf pour authentifier l'utilisateur. Si cela échoue, l'opération peut réussir tout de même si le module "pam_unix" authentifie l'utilisateur. Si "pam_ldap" authentifie l'utilisateur, "pam_unix" ne sera pas invoqué.

Le module "pam_unix", dans ce cas, ne demandera pas de mot de passe. L'argument "try_first_pass" lui indique d'utiliser le mot de passe fourni dans le module précédent (ici "pam_ldap"). Il essaiera d'authentifier l'utilisateur en utilisant les appels systèmes getpw*. Si "pam_unix" échoue et que "pam_ldap" avait échoué, l'opération échouera. Si "pam_ldap" échoue mais "pam_unix" est correct, l'opération sera exécutée.


3.6. Les modules PAM disponibles

Vous pouvez trouver sur le site http://www.kernel.org une liste de modules disponibles pour PAM. Elle est assez impressionnante et vous permettra d'expérimenter toute sorte de configuration pour augmenter le degré d'authentification de votre système.


4. Conclusion

Cette petite introduction à PAM nous a permis de voir son fonctionnement. Si vous avez des exemples d'utilisation plus avancées ou des problèmes récurrents qui n'ont pas été abordés ici, envoyez-moi un mail (webmaster at debianworld dot org).