Memo PAM = Pluggable Authentication ( ) |
Ecrit le 11-03-2009 (3563 hits) ... section Administration Linux 3PAM INFOPAM: Pluggable Authentication Modules c'est un système unifié de délégation de l'authentification.
But: Les applications qui le souhaitent peuvent déléguer au système la gestion de l'authentification. PAM fournit une API en langage C aux applications. Tous les services utilisent PAM.
Conséquence et Intérêts: - c'est donc l'administrateur système qui a le contrôle sur le mode d'authentification des applications - finesse de configuration au niveau de chaque application - Cela permet d'étendre sans difficultés les modes d'authentification de chaque application
schéma global:
+-----------------+ | application: X | +-----------------+ / +----------+ +==================+ |authentification-[---->--\--] Linux |--<--|fichier config PAM| | + [----<--/--] PAM | |danss /etc/pam.d/X| | [conversation()][--+ \ | | |==================| +-----------------+ | / +-n--n-----+ | auth .. pam_a.so | | service user | | __| | | auth .. pam_b.so | +-----------------+ A | | | ... _______/ | V A |____,-----' +------|-----|---------+------+------+ +---u-----u----+ | | | | auth.... |--[ a ]--[ b ]--[ c ] +--------------+ | acct.... |--[ b ]--[ d ] +--------------+ | password |--[ b ]--[ c ] +--------------+ | session |--[ e ]--[ c ] +--------------+ \................../ sous /lib/security
sous le répertoire /etc/pam.d/ il existe Un fichier par programme. ex: su,xdm,ssh,ftp,samba,passwd Attention il existe aussi /etc/pam.conf --> obsolete!
FORMAT FICHIER PAMSYNTAXE ======================================================================= format des fichiers PAM:
[phase] [mot de controle] [module] [args] | | | | |-auth |-required | |-(depend du module) |-account |-requisite | |-en commun: debug |-session |-sufficient | +-en commun: use_first_pass +-password +-optional +-pam_xxx.so
Exemple: auth required pam_unix.so shadow nullok use_first_pass password required pam_unix.so nullok obscure min=4 max=8 md5
Arguments optionnels génériques (commun a tous les modules) -------------------------------------------------------- - Debug - use_first_pass
DEFINITION DES PHASES ======================================================================= auth mode d'authentification de l'utilisateur (par mdp ou autre méthode). (correspond à pam_authenticate())
account Utilisé pour s'assurer que l'accès est autorisé. Restriction du compte : expiration, en fonction de l'heure, de la machine source, des ressources disponibles (pam_acct_mgmt())
password Gestion du mots de passe. (pam_chauthtok()).mode de verification, peut etre utilisé pour changer les mots de passe à traver les applications
session Evenements juste avant l'utilisation du service (par ex ouverture d'une session), et juste après. par ex monter le repertoire home, afficher un message.
EMPILEMENT DE MODULES (MOTS DE CONTROLE) ======================================================================= * sufficient: est suffisant pour valider l'authentification. Si le module répond OK, on a immédiatement une acceptation quelquesoit la réponse des autres modules de la phase
* required: Doit réussir pour valider l'authentification, mais les autres modules sont testés malgré tout.
* requisite: Doit réussir pour valider l'authentification, différence par rapport à required: en cas d'echec, on ne continue pas à tester les autres modules
* optional: l'execution du module n'affecte pas l'authentification.
PARTIES COMMUNES (inclusion de fichier) ======================================================================= PAM permet d'include des fichiers dans les fichiers de config. directive: @include fichier c'est utilisé pour gérer des parties commune dans l'authentification des services, c'est à dire l'execution de modules pour tous les services. Quand on modifie un fichier PAM, il faut donc se poser la question: - spécifique à la commande que j'edite ou commun?
MODULES PAM STANDARDS
SECTION AUTH ======================================================================= pam_securetty.so assure que root ne peut se connecter que sur les consoles tty definis dans /etc/securetty pam_unix.so utiliser le password unix : /etc/passwd et /etc/shadow. option nullok : indiquer qu'on accepte les passwd vide pam_pwdb est equivalent pam_nologin.so si /etc/nologin existe, seul root peut se logguer le contenu de /etc/nologin est affiché si essai de login pam_env.so charge les des variables d'environnements présentes dans /etc/security/pam_env.conf
SECTION ACCOUNT ======================================================================= pam_unix.so fait les verifs standards/établi la validité utilisateur ou mot de passe (account expiré,change password forcé)
SECTION PASSWORD ======================================================================= pam_cracklib.so quand on change un password, vérifie que le mot de passe n'est pas dans un dictionnaire option retry=n (le nombre de tentatives) minlen=n (la longueur imposée-ne peux être inférieur à 4) difok=n (nombre de caractères différents entre l'ancien et le nouveau) va aussi gérer la durée de validité du mdp. Plus de détails: voir la rubrique REFERENCES à la fin du support
pam_unix.so politique d'authentification au standard unix options: -shadow (renseigner le fichier shadow) -nullok (passwod vide ok) -use_authtok (utilise le passwd acepte par le precedent .so - par ex cracklib) -md5 pour le type de cryptage -remember=n pour se souvenir des n derniers mdp utilisés
SECTION SESSION ======================================================================= pam_unix.so standard ( envoie un log dans /var/log/messages ) pam_limits.so Permet de limiter les ressources mis à la disposition d'un utilisateur (process,memoire..) quotas defini dans /etc/security/limits.conf pam_lastlog.so affiche la date de dernier login, ou d'echec pam_motd.so affiche le "message of the day", en general ce sont des infos sur le systeme
AUTRES MODULES PAM CLASSIQUES
pam_time (account): 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 à 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.
pam_warm : log les informations à syslog
pam_console : permet de spécifier les autorisations d'accès à la console. Il faut alors configurer /etc/security/console.perms.
EXEMPLES DE FICHIER PAM
PAM POUR SU ======================================================================= #%PAM-1.0 auth sufficient pam_ldap.so # This allows root to su without passwords (normal operation) auth sufficient pam_rootok.so auth required pam_unix.so shadow nullok use_first_pass
account sufficient pam_ldap.so account required pam_unix.so
password sufficient pam_ldap.so nullok md5 password required pam_unix.so nullok obscure min=4 max=8 md5
session required pam_unix.so
PAM POUR LOGIN ======================================================================= #%PAM-1.0 auth sufficient pam_ldap.so auth required pam_nologin.so auth required pam_unix.so shadow nullok use_first_pass auth required pam_env.so
account sufficient pam_ldap.so account required pam_unix.so
password sufficient pam_ldap.so nullok md5 password required pam_unix.so nullok obscure min=4 max=8 md5
session required pam_unix.so session optional pam_lastlog.so session optional pam_motd.so session optional pam_mail.so standard noenv
SELECTION DE MODULES PAM ADDITIONNELSRadius : module PAM associé à FreeRADIUS Server http://www.freeradius.org/pam_radius_auth
OTP: (One-time password) authentification * pam_sotp: http://www.cavecanen.org/cs/projects/pam_sotp/ * module PAM-OPIE : http://www.tho.org/~andy/pam-opie.html voir aussi http://www.inner.net/pub/opie * OTPW (http://www.cl.cam.ac.uk/~mgk25/otpw.html)
USB dongle: http://usbauth.delta-xi.net/doku.php placer une clé USB pour eviter de taper les mdp
PAM BlueTooth: idem avec un peripehrique BlueTooth http://pam.0xdef.net/
authentification base de données SQL: * Postgres SQL http://www.kernel.org/pub/linux/libs/pam/pre/modules http://freshmeat.net/projects/pam_pgsql/download * MySQL http://sourceforge.net/projects/pam-mysql/
pam_require: module de type "account" qui permet de limiter à un utilisateur ou un groupe l'accès à un service (par exemple sur pam pour SSH limité à un groupe admin et à root)
pam_user_auth: permet different type d'authentification selon l'utilisateur http://www-dev.cites.uiuc.edu/pam/
pam_ldap : permet d'effectuer l'authentification sur une base ldap.
REFERENCESpage Linux-PAM http://www.kernel.org/pub/linux/libs/pam/
PAM CRACKLIB http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_cracklib.html
Le guide Administrateur Systeme de Linux PAM http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html
La liste des modules Linux-PAM http://www.kernel.org/pub/linux/libs/pam/modules.html
|