Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:systeme:pam [28/01/2016 15:43] greenmerlin [Introduction] |
doc:systeme:pam [14/08/2020 13:48] (Version actuelle) --gilles-- [PAM Pluggable Authentication Modules] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Titre de Votre Tuto ====== | + | ====== PAM Pluggable Authentication Modules ====== |
- | * Objet : Apprendre qu'est-ce que PAM et comment le configurer FIXME | + | * Objet : Apprendre qu'est-ce que PAM(Pluggable Authentication Modules) et comment le configurer |
* Niveau requis : {{tag>avisé}} | * Niveau requis : {{tag>avisé}} | ||
- | * Commentaires : La modiifcation de PAM ne ce fait que sur des machines de type serveur ou pour les acharnées de la sécurité, les options par default de Debian convienne à n'importe quelle usagé lambda | + | * Commentaires : //La modification de PAM se fait sur des machines de type serveur ou pour des usagers avisés qui tiennent à la sécurité. \\ Les options par défaut de Debian conviennent dans la quasi-totalité des cas à n'importe quel usager lambda.// |
- | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | + | * Suivi : {{tag>à-tester}} |
- | * Suivi : {{tag>en-chantier à-tester à-placer}} - | + | |
* Création par [[user>greenmerlin]] 26/01/2016 | * Création par [[user>greenmerlin]] 26/01/2016 | ||
- | * Testé par <...> le <...> FIXME | + | * Testé par <...> le <...> |
- | * Commentaires sur le forum : [[:url-invalide | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=13185 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
- | **Nota :** | ||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | Pam est un système de bibliothèques qui récupère les "processus d'authentification" des services et application du système. Peu connu il n'est a pas moins utilisé sur beaucoup de distribution, c'est une couche massive de sécurité. | + | 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é. | ||
- | Ce système de bibliothèques "garanti" l'utilisation des commandes d'administration. | + | <note warning>il est grandement recommandé de faire des essais de configuration PAM sur une machine virtuelle avant de toucher à la machine réelle.</note> |
+ | * [[https://debian-facile.org/viewtopic.php?pid=160711#p160711 |De Philou92 sur le forum]] ^_^ | ||
- | ===Découverte=== | + | ====Découverte==== |
- | Pam à configurer : Le concept est plutôt simple, un fichier par programme ou daemon | + | Pam à configurer : Le concept est plutôt simple, un fichier par programme ou daemon.\\ |
- | Bien entendu les développeur de la Jessie nous ont tous bien configuré comme il faut | + | Bien entendu les développeurs de Jessie nous ont tout bien configuré comme il faut : |
<code user>ls /etc/pam.d/</code> | <code user>ls /etc/pam.d/</code> | ||
pour un petit aperçu. | pour un petit aperçu. | ||
- | les plus important sont : | + | les plus importants sont : |
* /etc/pam.d/common-auth | * /etc/pam.d/common-auth | ||
* /etc/pam.d/common-account | * /etc/pam.d/common-account | ||
Ligne 35: | Ligne 34: | ||
<code=root>ldd /bin/vers_le_programme | grep libpam</code></note> | <code=root>ldd /bin/vers_le_programme | grep libpam</code></note> | ||
- | ===Exemple=== | + | ====Exemple==== |
<file conf common-password> | <file conf common-password> | ||
... | ... | ||
Ligne 51: | Ligne 51: | ||
</file> | </file> | ||
- | Ici la première choses à noter c'est que la syntaxe employé est toujours de type : | + | Ici la première chose à noter c'est que la syntaxe employée est toujours de type : |
^NOM ^ COMMENTAIRES ^ | ^NOM ^ COMMENTAIRES ^ | ||
Ligne 59: | Ligne 59: | ||
|Arguments | les arguments du module | | |Arguments | les arguments du module | | ||
- | Chronoliquement une action PAM se séroule comme il suit : | + | Chronologiquement une action PAM se déroule comme suit : |
- | - L'utilisateur rentre son nom de connexion et mot de passe | + | - L'utilisateur entre **son nom de connexion** et **mot de passe**. |
- | - Le programme login traite la demande puis délègue l'authentification à PAM | + | - Le programme login traite la demande puis délègue l'authentification à PAM. |
- | - PAM lit le fichier /etc/pam.d/login et exécute les directives et renvoi au programme | + | - PAM lit le fichier ''/etc/pam.d/login'', exécute les directives et renvoie au programme. |
Ligne 68: | Ligne 68: | ||
<code>password [success=1 default=ignore] pam_unix.so obscure sha512</code> | <code>password [success=1 default=ignore] pam_unix.so obscure sha512</code> | ||
- | Ici le module est pam_unix.so, ce qui signifie que pam va vérifier la concordance avec les fichiers /etc/passwd et /etc/shadow | + | * Ici le module est **pam_unix.so**, ce qui signifie que pam va vérifier la concordance avec les fichiers ''/etc/passwd'' et ''/etc/shadow'' |
+ | * Pour ''Success = 1'' et ''default = ignore'' c'est un peu plus compliqué j'aborderai ça plus loin. | ||
+ | * Les Options ''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**. | ||
- | Pour Success = 1 et default = ignore c'est un peu plus compliqué j'aborderais ça plus loin | + | <note tip>Par défaut l'option ''obscure'' teste les points suivants sur le mot de passe entré : |
+ | * Palindrome. | ||
+ | * Changement de la casse uniquement (ex :password, PAsSworD). | ||
+ | * Si il est trop similaire au dernier. | ||
+ | * Si il est vraiment trop simple (ex : 0000). | ||
+ | * Si il est retourné (ex : user:root;passwd:toor). | ||
+ | </note> | ||
- | Les Options obscure et sha512 signifient que le modules va respectivement tester si votre niveau de complexité de mot de passe est suffisant et que le mot de passe sera crypter avec l'algorithme SHA512 | ||
- | |||
- | <note tip>Par défaut l'options obsucre teste les points suivant sur le mot de passe rentré | ||
- | * Palindrome | ||
- | * Changement de la casse uniquement (ex :password, PAsSworD) | ||
- | * Si il est trp similaire au dernbier | ||
- | * Si il est vraiment trop simple (ex : 0000) | ||
- | * Si il est retourné (ex : user:root;passwd:toor) | ||
- | </note> | ||
===== Comprendre PAM ===== | ===== Comprendre PAM ===== | ||
- | 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 (/etc/pam.d/*) | + | 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 : |
+ | <code user>ls /etc/pam.d/*</code> | ||
- | ===L'empilement des modules=== | + | ==== L'empilement des modules ==== |
Prenons l'exemple suivant : | Prenons l'exemple suivant : | ||
Ligne 94: | Ligne 94: | ||
</code> | </code> | ||
- | Voila comment PAM va interpréter : | + | Voila comment PAM va les interpréter : |
- | 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_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.\\ | ||
- | Le module “pam_env” va fixer les variables d'environnement d'après le fichier /etc/security/pam_env.conf. | + | 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. |
- | Le module “pam_rootok” va verfifier si l'utilisateur est root. Si cela échoue, l'opération peut réussir tout de même si le module “pam_unix” authentifie l'utilisateur. Si “pam_rootok” authentifie l'utilisateur, “pam_unix” ne sera pas invoqué. | + | 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. |
- | Le module “pam_unix” Il essaiera d'authentifier l'utilisateur en utilisant les appels systèmes getpw*. Si “pam_unix” échoue et que “pam_rootok” avait échoué, l'opération échouera. Si “pam_rootok” échoue mais “pam_unix” est correct, l'opération sera exécutée. | + | * Le module ''pam_env'' va fixer les variables d'environnement d'après le fichier ''/etc/security/pam_env.conf''. |
+ | * Le module ''pam_rootok'' va vérifier si l'utilisateur est root. | ||
+ | * Si cela échoue, l'opération peut réussir tout de même si le module ''pam_unix'' authentifie l'utilisateur. | ||
+ | |||
+ | * Si “pam_rootok” authentifie l'utilisateur, ''pam_unix'' ne sera pas invoqué. | ||
+ | * Le module “pam_unix” essaiera alors d'authentifier l'utilisateur en utilisant ''les appels système getpw*''. | ||
+ | |||
+ | - Si ''pam_unix'' échoue et que ''pam_rootok'' avait échoué, l'opération échouera. | ||
+ | - Si ''pam_rootok'' échoue mais que ''pam_unix”'' est correct, l'opération sera exécutée. | ||
+ | |||
+ | == On reprend notre tableau pour la suite == | ||
^NOM ^ COMMENTAIRES ^ | ^NOM ^ COMMENTAIRES ^ | ||
- | |Module type |Quel module de sécurité à utiliser (qu'est-ce que PAM va gérer) ? | | + | |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 | | + | |Control |que fait un module en cas d'échec ? | |
- | |Module path |le chemin du module | | + | |Module path |le chemin du module. | |
- | |Arguments | les arguments du module | | + | |Arguments | les arguments du module. | |
- | ===Le module-type=== | + | ==== Le module-type ==== |
- | Quatre structures de gestion possible : | + | Quatre structures de gestion possibles : |
- | * 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. | + | * 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. |
- | * 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. | + | * gestion de compte : permet la gestion des comptes utilisateurs. |
- | * 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 crypter, etc … | + | * Par exemple, des restrictions peuvent être définies selon les horaires ou la charge du serveur. |
- | * 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. | + | * 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 cryptés, etc … | ||
+ | * 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. | ||
- | ===Control=== | + | ==== Control ==== |
- | Que doit faire la librairie PAM doit faire en cas de réussite ou d'echec du module ? | + | Que doit faire la librairie PAM en cas de réussite ou d'échec du module ? \\ |
+ | Plusieurs possibilités : | ||
- | 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** : 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. | ||
+ | <note important> Il faut noter, toutefois, que si un module ''required'' échoue avant un ''sufficient'', l'opération échouera ignorant les autres modules ''sufficient''. | ||
+ | </note> | ||
+ | * **optional** : la réussite d'au moins un des modules ''optional'' est nécessaire si aucun autre n'a réussi. | ||
- | * 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. | + | <note tip>Une syntaxe un peu plus complète peut-être employée sous la forme de : ''value=action pairs''</note> |
- | * 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 “optional” est nécessaire si aucun autre n'a réussi. | + | |
- | une syntaxe un peut plus complète peut-être employé sous la forme de : value=action pairs | + | == Exemple == |
- | =exemple que j'ai abordé lors de la présentation= | + | (Déjà abordé lors de la présentation.) |
<code>[success=1 default=ignore]</code> | <code>[success=1 default=ignore]</code> | ||
- | success=1 : Si le module PAM renvoie success, PAM va sauter 1 lignes dans le fichier de config(2 pour 2 lignes,etc...) | + | * **success=1** : Si le module PAM renvoie ''success'', PAM va sauter 1 ligne dans le fichier de config (2 pour 2 lignes,etc...) |
- | default=ignore : Le status de retour du module, n'influencera pas le reste des règles dans le fichier de config | + | * **default=ignore** : Le statut de retour du module, n'influencera pas le reste des règles dans le fichier de config |
+ | ====Cas concret N°1==== | ||
- | ===Cas concret N°1=== | + | <note important>Pour tester le 1er cas concret ''if'' faut avoir [[doc:reseau:ssh|un serveur SSH]] fonctionnel</note> |
- | <note important>Pour tester le 1er cas concret if faut avoir un serveur SSH fonctionel</note> | + | On va faire un exemple ça vaut mieux que les grands discours il paraît. |
- | On va faire un exemple ça vaut mieux que les grands discours il parait, | + | Modifions le comportement par defaut d'un programme en utilisant d'autres modules |
+ | <note tip>Retrouvez la liste des modules disponibles par défaut sur debian ici --> ''/lib/i386-linux-gnu/security''</note> | ||
- | modifions le comportement par default d'un programme en utilisant d'autres modules | + | Ici on va utiliser le module **pam-dbus**, sur le programme ''sshd'' (OPEN-SSH). |
- | <note tip>retrouver la liste des modules disponible par default sur debian ici --> /lib/i386-linux-gnu/security</note> | + | |
- | 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 : m( | ||
+ | <code root>apt install libpam-dbus</code> | ||
- | On se logue sous X en graphique(dbus fonctionne avec le mode graphique) | + | On édite le fichier /etc/pam.d/sshd |
+ | <code root>nano /etc/pam.d/sshd</code> | ||
- | On install le module pam (oui il n'est pas installé par défaut :p) | + | Et on remplace la ligne suivante : |
- | <code root>apt install libpam-dbus</code> | + | |
- | on édite le fichier /etc/pam.d/sshd | + | |
- | <code root>vi /etc/pam.d/sshd</code> | + | |
- | et on remplace la ligne suivante : | + | |
<code>@include common-auth</code> | <code>@include common-auth</code> | ||
par | par | ||
<code>auth required pam_dbus.so</code> | <code>auth required pam_dbus.so</code> | ||
- | ===Test=== | + | ====Test==== |
<code=user>ssh localhost</code> | <code=user>ssh localhost</code> | ||
+ | Résultat : | ||
- | résultat : <url>http://pix.toile-libre.org/?img=1453979480.png</url> | + | {{https://debian-facile.org/images/file-Reda0b8260517f425575ddbdefef3ed2f.png?500}} \\ |
- | Ici le module pam-dbus va toujours envoyé un message "dbus" au(x) utilisateurs connecté localement pour autorisé ou non la connexion ssh à votre machine. | + | 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 :<code>auth required pam_dbus.so </code> | + | Décortiquons maintenant l'option : |
+ | <code>auth required pam_dbus.so </code> | ||
* auth : Utiliser un module de type Authentifier et Autoriser | * auth : Utiliser un module de type Authentifier et Autoriser | ||
* required : Le module renvoie une erreur et rend la main à la prochaine option PAM | * required : Le module renvoie une erreur et rend la main à la prochaine option PAM | ||
- | * pam-dbus : le nom du module que j'utilise | + | * pam-dbus : Le nom du module que j'utilise |
- | + | ||
- | + | ||
- | ===== Utilisation ===== | + | |