Académique Documents
Professionnel Documents
Culture Documents
Authentication Modules)
Réalisé par :
2. Quelles sont les familles de modules de PAM, comment cela se traduit-il dans le fichier de
configuration .................................................................................................................................................. 5
b. Configuration 2 : Afficher le dernier accès (via ssh, login ou su) au moment de l'ouverture
de session ................................................................................................................................................... 7
2|Page
Table des illustrations
Figure 1 : Un modèle d'authentification clasique ................................................................................. 4
Figure 2 : Architecture PAM ........................................................................................................................ 5
Figure 3 : Création de l'utilisateur admin ................................................................................................ 7
Figure 4 : Ajouter un mot de passe pour Admin .................................................................................... 7
Figure 5 : Résultat de la première configuration ................................................................................... 7
Figure 6: Résultat de la deuxième configuration ................................................................................... 8
Figure 7: Résultat de la troisième configuration.................................................................................... 9
Figure 8 : Résultat de la troisième configuration ................................................................................10
Figure 9 : Test de l'application PAM Aware .........................................................................................13
3|Page
I. Administration de PAM :
1. Faites un schéma du fonctionnement de PAM
PAM : Pluggable Authentication Modules, est le système sous Linux qui permet de
nombreuses services et application d’authentifier les utilisateurs de manière centralisé. Initialement
développé par Sun Microsystems, il est devenu le système actuel d’authentification.
Le système d’authentification PAM est un ensemble de bibliothèque partagées (ou modules). Pour
chaque modèle on trouve des différentes méthodes d’authentification.
Toute application communique avec le PAM pourra utiliser tous les modules pour authentifier les
utilisateurs :
4|Page
Applications
connexion ftp http SGBD pop
PAM API
PAM
/etc/pam.d/
Pluggable Authentication Modules
PAM SPI
Modules PAM
Figure 2 : Architecture PAM
Pour créer des applications qui communiquent avec le système PAM il ne faut pas se soucier du type
d’authentifications et de l’implémentation dans le code.
2. Quelles sont les familles de modules de PAM, comment cela se traduit-il dans
le fichier de configuration
Pour faire la gestion d’authentification PAM a définit quatre familles au dite type :
5|Page
− auth : Méthode d’authentification de l’utilisateur, généralement par une demande de
login/mot de passe, cette méthode vérifier que l’utilisateur à le droit d’accéder au service
demander et vérifier d’autres choses comme le groupe de l’utilisateur.
− account : Des modules pour la gestion des limites d’un compte, par exemple la définition
d’un plage d’horaires pour la connexion (possible dans la journée, et non dans la nuit par
exemple)
− password : Cette famille contient des modules de modification du mot de passe, ces
modules mise en place des règles et des contraintes à la création d’un nouveau mot de
passe, par exemple le nombre minimum de caractères.
− Session : Une fois l’authentification est établie ce module est activé, il sert à faire la gestion
des sessions. Cela peut inclure par exemple monter/démonter le répertoire personnel de
l’utilisateur, journaliser la connexion/déconnexion.
Normalement il existe un fichier de configuration pour chaque application ou service qui utilisent
PAM. Ces fichiers se trouvent dans le répertoire /etc/pam.d et portent le nom du service auquel il
sont rattachés.
Une ligne dans un fichier de configuration contient trois champs, et respecte la syntaxe suivante :
→ Suivant le résultat renvoyé par le module on applique la stratégie définit dans le deuxième champ.
6|Page
sudo useradd admin
- : root : ALL
- : admin : ALL
Pour tester on essaye de s’authentifier à admin via login, grâce aux modifications quand a fait on trouve
le résultat suivant :
7|Page
Ligne à ajouter fichiers
session required pam_lastlog.so nowtmp /etc/pam.d/su, /etc/pam.d/login et
/etc/pam.d/sshd
Pour faire cette configuration il faut ajouter la ligne dans le fichier correspondant :
8|Page
Pour tester on lance la commande suivante :
Pour faire cette configuration il faut ajouter la ligne dans le fichier correspondant :
9|Page
Figure 8 : Résultat de la troisième configuration
10 | P a g e
II. Applications « PAM aware » :
Afin de développer des applications permettant d’utiliser les modules PAM, il faut installer la paquet
libpam0g-dev, qui contient des fichiers d’entête C et des bibliothèques de développement.
Dans ce paquet il existe plusieurs fonctions de gestion d’authentification, pour les appelées on doit
inclure le fichier d’entête pam_appl.h et aussi pam_misc.h. Sinon pour gérer les opérations d’entrée
sortie on utilise le fameux fichier d’entet stdio.h
#include <stdio.h>
Fichiers d’entête #include <security/pam_appl.h>
#include <security/pam_misc.h>
Initialiser un pointeur pour la fonction de conversation pam_conv, cette dernière est un callback défini
par l’application pour permettre une communication directe entre un module chargé et l’application.
On premier lieu on va vérifier si l’utilisateur a bien passé le nom d’utilisateur en paramètres, dans le
cas échoué on arrête le programme :
Après on crée le contexte du PAM et on lance la transaction PAM avec la fonction pam_start. C’est
la première des fonctions PAM qui doit être appelée par une application. L’état de la transaction est
entièrement contenu dans la structure identifiée par ce handle, il est donc possible d’avoir plusieurs
11 | P a g e
transactions en parallèle. Mais il n’est pas possible d’utiliser le même handle pour différentes
transactions, un nouveau handle est nécessaire pour chaque nouveau contexte.
La fonction pam_set_item permet aux applications et aux modules de service PAM d’accéder aux
informations PAM de type PAM_RUSER et PAM_RHOST et autres (PAM_TTY, PAM_CONV,
etc.), et les mettre à jour.
PAM_USER : Le nom d'utilisateur de l'entité sous laquelle le service d'identité sera fourni. C'est-à-
dire qu'après authentification, PAM_USER identifie l'entité locale qui utilisera le service.
PAM_RHOST : Le nom d'hôte demandeur (le nom d'hôte de la machine à partir de laquelle l'entité
PAM_RUSER demande le service). C'est-à-dire que PAM_RUSER@PAM_RHOST identifie
l'utilisateur demandeur.
pam_authenticate : Une fonction utilisée pour authentifier l’utilisateur. L’utilisateur est tenu de
fournir un jeton (token) d’authentification en fonction du service d’authentification, généralement un
mot de passe.
12 | P a g e
Après si la valeur de pam_authenticate est vaut PAM_SUCCESS (L'utilisateur a été authentifié avec
succès), on détermine si le compte de l’utilisateur est valide pam_acct_mgmt, cette fonction vérifie
le token d’authentification et l’expiration du compte, ainsi que les restrictions d’accès.
Si la function retourne PAM_SUCCESS (Le jeton d'authentification a été mis à jour avec succès) on
affiche le message « welcome », sinon on affiche un message d’erreur.
13 | P a g e
III. Modules PAM
Comme le deuxième exercice on a besoin d’ajouter des fichiers d’entête pour utiliser des fonctions
afin de créer des modules PAM, donc pour cette raison on va inclure les fichiers suivants :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
Fichiers d’entête #include <string.h>
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <security/pam_modules.h>
Aprés on va définir quelques variables globales qu’on va les servirent dans notre aoolication :
SECONDS : le délai d’attente si le résultat est faux dans notre cas 15 seconds
PAM_EXTERN int pam_sm_setcred (pam_handle_t *pam_h, int flags, int argc, const
char **argv)
{return PAM_SUCCESS;}
14 | P a g e
Dans un premier lieu on va récupérer l’information du RHOST pour la vérification à l’aide de la
fonction pam_get_item :
La fonction pam_get_item permet aux applications et aux modules de service PAM d'accéder aux
informations PAM dans notre cas PAM_RHOST et de les récupérer. En cas de retour réussi, rhost
contient un pointeur vers la valeur de l'élément correspondant.
15 | P a g e
Traitement 2 :
srand((unsigned) time(&t));
2.1 Générer deux nombres aléatoires modulo 20 a = rand() % 20;
b = rand() % 20;
2.2 Demander à l'utilisateur de calculer la
scanf("%d", &resultat);
multiplication et renvoyez le résultat
if (resultat == a * b) Traitement 2.3.1
2.3
Attendre 15 seconds et rendre la
Else
main à l’application
if (value == PAM_SUCCESS) Donner l'accès à l'utilisateur
2.3.1
Envoyer une erreur
else
d'authentification
16 | P a g e