Modules PAM
Transcription
Modules PAM
Table des matières 1 LES MODULES PAM ............................................................................................... 2 1.1 Introduction .......................................................................................................... 2 1.2 Configuration ....................................................................................................... 2 1.3 La syntaxe de configuration ................................................................................. 3 1.4 Modules à connaître (/lib/security) ...................................................................... 4 1.5 Documentation ..................................................................................................... 6 1.6 Exemples .............................................................................................................. 6 1.6.1 login........................................................................................................... 6 1.6.2 Mot de passe .......................................................................................... 6 1.6.3 Imposer le groupe wheel ............................................................... 8 1.6.4 Authentification .............................................................................. 10 _____________________________________________________________________ 2011 Hakim Benameurlaine 1 1 LES MODULES PAM 1.1 Introduction Les PAM (pluggable module authentification) est un moyen modulable d'authentifier des utilisateurs. On peut ainsi définir des stratégies sans avoir à recompiler les programmes qui supportent PAM. En fait PAM, évite que chaque application ne vous redemande une authentification avec des règles différentes à chaque fois. Si vous souhaitez renforcer la sécurité (obliger des mots de passe qui ne sont pas dans un dictionnaire par exemple), l'uniformiser ou adopter une autre méthode d'authentification (ldap par exemple) alors la réponse est oui. 1.2 Configuration On peut mettre l'ensemble de la configuration dans /etc/pam.conf ou bien avoir un fichier par service dans /etc/pam.d/ (par défaut). Si le fichier PAM correspondant au service existe dans le répertoire /etc/pam.d alors le fichier /etc/pam.conf est ignoré. Le fichier principal dans le cas de l'existence de /etc/pam.d est systemauth. Les modules appelés dans les différents fichiers de configuration se trouvent dans /lib/security. Enfin on trouve dans /etc/security des fichiers complémentaires suivant qui sont utilisés par certaines applications : access.conf group.conf limits.conf time.conf pam_env.conf console.apps ... utilisé par le module pam_access.so utilisé par le module pam_group.so utilisé par le module pam_limits.so utilisé par le module pam_time.so utilisé par le module pam_env.so utilisé par le module pam_console.so _____________________________________________________________________ 2011 Hakim Benameurlaine 2 1.3 La syntaxe de configuration Il y a une petite différence si on utilise le fichier /etc/pam.conf ou le répertoire /etc/pam.d mais le principe est le même. Le fichier /etc/pam.conf contient une colonne supplémentaire qui identifie le service. login auth login account required requisite /lib/security/pam_securetty.so /lib/security/pam_roles.so a) La première colonne indique le nom du service ou l’application. Il n'existe que pour le fichier /etc/pam.conf. b) La deuxième colonne indique le type de module. Il peut prendre les valeurs suivantes : auth account password session Authentifie l'utilisateur par une demande de mot de passe ou par une autre méthode. Restriction du compte : expiration, en fonction de l'heure, de la machine source, des ressources disponibles. Gestion des mots de passe. Tout ce qui concerne l'ouverture d'une session, avant et après. c) La troisième colonne est l’indicateur de contrôle. Il peut prendre les valeurs suivantes : required Doit réussir, mais on continue à tester les autres modules en cas d’échec. Contrairement à requisite, on ne donne pas la raison de l'échec de l’authentification. requisite Doit réussir, on ne continue pas à tester les autres modules. L’échec est renvoyé immédiatement. optional Que le test réussisse ou pas cela ne change pas la suite (s’il n’est pas seul). sufficient En cas de succès, l’authentification sera acceptée. include Inclure toutes les lignes du fichier spécifié comme argument. substack Inclure toutes les lignes du fichier spécifié comme argument. (evaluer comme un seul module). Une autre syntaxe plus complexe a la forme suivante : [valeur1=action1 valeur2=action2 ...] d) Le dernier champ indique l'endroit où se trouvent les modules. _____________________________________________________________________ 2011 Hakim Benameurlaine 3 1.4 Modules à connaître (/lib/security) pam_cracklib Permet d'accepter ou de rejeter un mot de passe, si celui-ci se trouve dans un dictionnaire ( /usr/lib/cracklib.pwd ). Il permet aussi de vérifier que vous ne réutilisez pas le même mot de passe. Vous pouvez le faire suivre des parametres suivants: retry=n minlen=n difok=n type=xxx le nombre de tentatives la longueur imposée nombre de caractères qui sont dans le vieux mot de passe et que l'on ne peut pas retrouver dans le nouveau Le message ‘New xxx password :’ sera afficher lors du changement de mot de passe. pam_env Permet de spécifier des variables d'environnements dans : /etc/security/pam_env.conf à tout utilisateur qui se connecte sur la machine. pam_unix Module de base. Gère à la mode Unix la politique d'authentification. Il peut être avec les quatre types de modules : account auth password session établi la validité utilisateur/mot de passe et peut forcer la modification de celui-ci compare avec la base le mot de passe la politique de changement du mot de passe pour loguer les connexions Vous pouvez associer quelques options dont : nullok md5 debug remember=n pour autoriser un mot de passe vide pour le type de cryptage pour loguer les informations à syslog pour ce souvenir des n derniers mots de passe utilisés pam_time Autorise un accès par heure. La configuration se faisant dans le fichier /etc/security/time.conf pam_wheel Permet de limiter l'accès à l’usager root via la commande su qu'aux seuls membres du groupe wheel. On peut changer le nom du groupe par défaut avec l'option group=mon_group _____________________________________________________________________ 2011 Hakim Benameurlaine 4 pam_limits Permet de limiter les ressources mises à la disposition d'un utilisateur. Il faut alors configurer le fichier /etc/security/limits.conf pam_nologin Permet d’interdire le login à tous les usagers sauf root. Il faut alors créer le fichier /etc/nologin. pam_access Ce module permet de contrôler les utilisateurs par nom, machine, domaine, adresse IP, terminal. Vous devez alors /etc/security/access.conf configurer le fichier pam_deny Permet d’interdire l’accès. Vous pouvez l'utiliser dans /etc/security/other pour auth, account, password et session avec required. Si dans le répertoire /etc/security vous avez des noms d'applications que vous n'utilisez pas vous pouvez renommer ces fichiers avec un autre nom au cas..! Si quelqu'un cherche à utiliser l'application le fichier other sera alors utilisé par défaut. pam_securetty Vérifie que le compte root a la possibilité de se connecter sur cette console. Pour cela il faut qu'elle soit indiquée dans le fichier /etc/securetty. pam_warm Permet de loguer les informations à syslog pam_console Permet de spécifier les autorisations d'accès à la console. Il faut alors configurer /etc/security/console.perms. pam_stack Généralement suivi de service=system-auth, permet de renvoyer sur system-auth. pam_ldap Permet d'effectuer l'authentification sur une base ldap. _____________________________________________________________________ 2011 Hakim Benameurlaine 5 1.5 Documentation Sur votre machine : /usr/share/doc/pam-0.99.6.2/html Sur le web: http://www.kernel.org/pub/linux/libs/pam 1.6 Exemples 1.6.1 login Voici un exemple du fichier /etc/pam.d/login. 1:auth 2:auth 3:auth 4:account 5:password 6:password 7:session required required required required required required required /lib/security/pam_securetty.so /lib/security/pam_unix.so shadow nullok /lib/security/pam_nologin.so /lib/security/pam_unix.so /lib/security/pam_cracklib.so /lib/security/pam_unix.so shadow nullok /lib/security/pam_unix.so Ligne 1 interdit à l’usager root de se connecter sur la console si elle n'est pas autorisée dans /etc/securetty. Ligne 2 vérifie le mot de passe, on peut aussi utiliser pam_pwdb Ligne 3 vérifie l'existence du fichier /etc/nologin. Si celui-ci existe, il n'est plus possible de ce loguer sauf pour root. Affiche son contenu. Ligne 4 comptabilise la "vie" du mot de passe. Ligne 5 teste la validité du mot de passe. Ligne 6 impose les règles de modification du mot de passe. Ligne 7 est utilisée pour gérer la session. 1.6.2 Mot de passe Il est important que tous les mots de passe utilisateur soient bien choisis. Ils doivent contenir plus de deux caractères et éviter d’avoir une signification intrinsèque. Nous allons décrire le fichier /etc/pam.d/passwd qui inclut une bonne mise en vigueur des mots de passe. Vérifier la présence du module /lib/security/pam_cracklib.so qui permet de mettre en œuvre une bonne protection par mots de passe. _____________________________________________________________________ 2011 Hakim Benameurlaine 6 Fichier /etc/pam.d/passwd par défaut : auth required /lib/security/pam_statck.so service=system-auth account required /lib/security/pam_statck.so service=system-auth passwd required /lib/security/pam_statck.so service=system-auth Fichier /etc/pam.d/system-auth par défaut : auth required auth sufficient auth required account required password required password sufficient md5 shadow password required session required session required /lib/security/pam_env.so /lib/security/pam_unix.so likeauth nullok /lib/security/pam_deny.so /lib/security/pam_unix.so /lib/security/pam_cracklib.so retry=3 type= /lib/security/pam_unix.so nullok use_authtok /lib/security/pam_deny.so /lib/security/pam_limits.so /lib/security/pam_unix.so Exemples: Dans l’exemple suivant, deux modules sont appelés. Dans le premier module, l’usager a droit à trois tentatives (retry=3) pour entrer un bon mot de passe. Dans le deuxième module, l’utilisant de l’argument use_authtok, permet de ne pas demander le mot de passe de nouveau mais d’utiliser celui fourni par pam_cracklib. passwd passwd password required password required pam_cracklib.so retry=3 pam_pwdb.so use_authtok Si on veut utiliser le chiffrement MD5 : # # # # # # These lines allow a md5 systems to support passwords of at least 14 bytes with extra credit of 2 for digits and 2 for others the new password must have at least three bytes that are not present in the old password password password required pam_cracklib.so \ difok=3 minlen=15 dcredit= 2 ocredit=2 required pam_pwdb.so use_authtok nullok md5 Si on ne veut pas utiliser les crédits : _____________________________________________________________________ 2011 Hakim Benameurlaine 7 # These lines require the user to select a password with a # minimum length of 8 and with at least 1 digit number, 1 upper # case letter, and 1 other character # password required pam_cracklib.so \ dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8 password required pam_pwdb.so use_authtok nullok md5 Un mot de passe avec une longueur minimale de 8 sans crédits : password password required pam_cracklib.so \ dcredit=0 ucredit=0 ocredit=0 lcredit=0 minlen=8 required pam_pwdb.so use_authtok nullok md5 Fichier /etc/pam.d/passwd renforcé : passwd required /lib/security/pam_cracklib.so type=usr retry=3 passwd required /lib/security/pam_pwdb.so use_authtok Le mécanisme qui se cache derrière cette petite pile de passwd est le suivant : Quand un utilisateur entre le mot de passe de son choix, vérifie le mot de passe à l’aide du dictionnaire des termes courants. Cette tâche est effectuée par le module pam_cracklib.so. Elle est requise pour continuer le traitement de la pile. Demande un bon mot de passe jusqu`à trois fois avant d’abandonner (retry=3). Si l’utilisateur entre un bon mot de passe (le module pam_cracklib.so termine avec succès), met à jour le mot de passe à l’aide du module pam_pwdb.so (responsable de la base de données des mots de passe). 1.6.3 Imposer le groupe wheel Dans les systèmes de type Unix, la tradition est de ne permettre certaines actions qu’aux utilisateurs du groupe wheel, réservé par convention aux utilisateurs possédant un accès de type administration système. Parmi les actions restreintes au groupe wheel, on trouve la commande su qui permet à un utilisateur de prendre l’ID d’un autre utilisateur, souvent l’utilisateur root. Malheureusement sur Linux, le groupe wheel n’est pas mis en vigueur par défaut, signifiant que n’importe quel utilisateur peut exécuter la commande su. Ce qui présente un risque du point de vue de la sécurité. Nous allons remédier à cette situation. Nous allons modifier le fichier /etc/pam.d/su qui contrôle le comportement de l’authentification de la commande su, afin qu’il : _____________________________________________________________________ 2011 Hakim Benameurlaine 8 Permette uniquement aux membres du groupe wheel d’utiliser la commande su. Demande à tous les utilisateurs, même root, d’entrer un mot de passe lorsqu’ils tentent d’utiliser su pour obtenir un accès au niveau du root. Crée une entrée dans le journal pour chaque utilisation de la commande su. Voici le fichier /etc/pam.d/su par défaut : auth sufficient /lib/security/pam_rootok.so # Uncomment the following line to implicitly trust users in the #"wheel" group. #auth sufficient /lib/security/pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the #"wheel" group. #auth required /lib/security/pam_wheel.so use_uid auth required /lib/security/pam_stack.so service=system-auth account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_xauth.so Voici le fichier /etc/pam.d/su modifié : auth auth auth account passwd session required requisite required required required required pam_warn.so pam_wheel.so group=wheel pam_pwdb.so pam_pwdb.so pam_pwdb.so use_authtok pam_pwdb.so Le module pam_wheel.so vérifie que l’utilisateur est bien membre du groupe wheel. Il est paramétré sur requisite donc si cette entrée échoue, la pile est immédiatement quittée en échec. Sans continuation. Seuls les membres du groupe wheel se verront demander un mot de passe. Tous les autres seront éconduits dès le départ. _____________________________________________________________________ 2011 Hakim Benameurlaine 9 1.6.4 Authentification Le plus important des fichiers de configuration PAM est peut-être celui que l’on pourrait appeler le fichier par défaut. Le fichier other contrôle l’authentification de tous les services qui ne sont pas explicitement configurés sous d’autres noms de services. Par conséquent, il est très important que le fichier other soit configuré de manière crédible. Voici le contenu du fichier /etc/pam.d/other par défaut: auth account password session required required required required /lib/security/pam_deny.so /lib/security/pam_deny.so /lib/security/pam_deny.so /lib/security/pam_deny.so Voici le contenu du fichier /etc/pam.d/other: auth auth account account passwd passwd session session required required required required required required required required pam_warn.so pam_deny.so pam_warn.so pam_deny.so pam_warn.so pam_deny.so pam_warn.so pam_deny.so L’indicateur de contrôle est le même pour tous les types de modules, required, et deux modules sont invoqués : D’abord, le module pam_warn.so est appelé pour enregistrer dans le journal l’information sur la tentative en cours. Ensuite, le module pam_deny.so est appelé pour simplement retourner un échec et prévenir toutes sortes de connexions ou d’authentification. Ainsi, tout service qui utilise PAM doit être explicitement paramétré pour autoriser l’authentification, sinon les tentatives échoueront. _____________________________________________________________________ 2011 Hakim Benameurlaine 10