Vous êtes sur la page 1sur 33

Chapitre 3

PAM

1
P.A.M - centralisation

2
P.A.M - découplage

PAM est un mécanisme permettant d'intégrer


différents schémas d'authentification de bas
niveau dans une API de haut niveau,
permettant de rendre indépendants la
technique d’authentification des applications
réclamant une authentification.

PAM est une création de Sun Microsystems


et est supporté ensuite par les architectures
Solaris, Linux, FreeBSD, NetBSD, AIX et HP-
UX.
3
Ahmed Toumanari
Modules d'authentification
Ahmed Toumanari

enfichables (P.A.M.)
L'administrateur système peut alors définir une
stratégie d'authentification sans devoir
recompiler des programmes d'authentification.
PAM permet de contrôler la manière dont les
modules sont enfichés dans les programmes en
modifiant un fichier de configuration.

Les programmes qui donnent aux utilisateurs un


accès à des privilèges doivent être capables de
les authentifier..
4
Ahmed Toumanari

SPI Auth account password session

5
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 system-auth 6
Ahmed Toumanari
Ahmed Toumanari

Configuration

7
Ahmed Toumanari

Configuration

8
Ahmed Toumanari

Configuration
Les modules appelés dans les différents
fichiers de configuration se trouvent dans
/lib/security.
On trouve dans /etc/security des fichiers
complémentaires suivant qui sont utilisés par
certaines modules:
 access.conf utilisé par le module pam_access.so
 group.conf utilisé par le module pam_group.so
 limits.conf utilisé par le module pam_limits.so
 time.conf utilisé par le module pam_time.so
 pam_env.conf utilisé par le module pam_env.so
 console.apps utilisé par le module pam_console.so 9
 ...
Ahmed Toumanari

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

 La première colonne indique le nom du service ou


l’application. Il n'existe que pour le fichier /etc/pam.conf
10
Ahmed Toumanari

La deuxième colonne indique le type de


module. Il peut prendre les valeurs
suivantes :

11
Ahmed Toumanari
La troisième colonne est l’indicateur de
contrôle. Il peut prendre les valeurs
suivantes :

Le dernier champ indique l'endroit où se


12
trouvent les modules.
Ahmed Toumanari

Configuration

13
Ahmed Toumanari

Modules (/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 tester que le
mot de passe est robuste.
Vous pouvez le faire suivre des paramètres suivants

password required pam_cracklib.so retry=3 minlen=6 difok=3


lcredit=1 ucredit=1 dcredit=3 ocredit=1 14
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 :

15
Ahmed Toumanari

Vous pouvez associer quelques options dont :

pam_time : autorise un accès par heure.


La configuration se faisant dans le fichier
/etc/security/time.conf (services;ttys;users;times)

$ vi /etc/security/time.conf
login ; * ; ensa;MoTuWeThFr0800-2000
http ; * ; ensa;Al0000-2400 16
Ahmed Toumanari

pam_wheel: limite l’accès à la commande su aux


membres du groupes wheel..
$ vi /etc/pam.d/su
……………………
auth required pam_wheel.so
……………………
Désormais, aucun utilisateur (autre que root et ceux dans le groupe wheel)
ne peut exécuter su.

$ addgroup --system wheel

$ adduser user1 wheel


Désormais, user1 peut exécuter su.

Répétez l' appel adduser pour les autres si nécessaire. Ou modifier :


$ usermod -aG wheel toto
17
Ahmed Toumanari

pam_limits : permet de limiter les ressources


mises à la disposition d'un utilisateur. Il faut alors
configurer le fichier /etc/security/limits.conf

@users soft nproc 100


@users hard nproc 120
manager hard nproc 200

 fsize : taille des fichiers ;


 nofile : nombre de fichiers ouverts ;
 cpu : temps CPU maximale pour un processus
 nproc : nombre de processus ;
 priority : priorité des processus
 maxlogins : nombre de login simultanés maximum par user (non applicable
à root) ;
 maxsyslogins : nombre maximum d’utilisateurs logués sur le système
18
18
Ahmed Toumanari

Exemple /etc/security/limits.conf
<domain> <type> <item> <value>
<domain> : utilisateur ou group d'utilisateur
<type> : soft ou hard limit
<item> : ce que tu veux controler/limiter
<value> : la valeur de cette limite

* hard nofile 512


@student hard nproc 20
@faculty soft nproc 20
@faculty hard nproc 50
ensa hard nproc 10
@student - maxlogins 4
:123 hard cpu 5000
@500: soft cpu 10000
600:700 hard locks 10
19
pam_nologin: permet d’interdire le login à tous les
usagers sauf root si le fichier /etc/nologin existe. Si
c’est le cas et que l’utilisateur n’est pas un utilisateur
root, l’authentification échoue et le contenu du fichier
est affiché.
pam_access: ce module permet de contrôler les
utilisateurs par machine ou adresse IP ou terminal.
Vous devez alors configurer le fichier
/etc/security/access.conf
permission : users/groups : origins
+ : root : 192.168.200.1 192.168.200.4 192.168.200.9
+ : root : 127.0.0.1
+ : root : 192.168.201.
+ : root : .ensa.ac.ma
- : root : ALL 20
pam_deny : permet d’interdire l’accès. Vous
pouvez l'utiliser dans /etc/pam.d/other pour
auth, account, password et session avec
required.
auth required pam_deny.so
auth required pam_warn.so
account required pam_deny.so
account required pam_warn.so
password required pam_deny.so
password required pam_warn.so
session required pam_deny.so
session required pam_warn.so

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.
Si /etc/securetty n’éxiste pas, root est autorisé de se connecté qlq tty
Si /etc/securetty éxiste et vide, l’accès root est limité aux programmes non 21
limité par pam_securetty (i.e. su, sudo, ssh)
Ahmed Toumanari
pam_warm : permet de loguer les
informations à syslog
pam_console: permet de spécifier les
autorisations des périphériques lors de
l'accès à la console. Il faut alors configurer
/etc/security/console.perms. De plus accès
au programmes /etc/security/console.apps
pam_stack: généralement suivi de
service=system-auth, permet de renvoyer sur
system-auth (inclure une configuration à
l'échelle du système pour modif central)
pam_ldap: permet d'effectuer
l'authentification sur une base ldap. 22
Ahmed Toumanari

Module Arguments Description


pam_cracklib.so Vérifie la robustesse des mots de passe (modtype : password)
retry=n [fac] Nombre d'essais
infructueux autorisés
minlen=n [fac] Taille minimum du
mot de passe
pam_deny.so Interdit le type du module (modtype : n'importe) : authentification, connexion,
changement de mot de passe...
pam_unix.so Utilise l'authentification UNIX /etc/passwd (modtype: tous)
pam_warn.so Loggue les connexions (modtype : auth, password)

pam_nologin.so Indique que le compte n'existe pas (modtype: auth,account)


pam_stack.so Indique un fichier de configuration PAM à inclure au fichier en cours (modtype
: tous)
service=nom_service Nom du service du fichier
de configuration PAM à
inclure
pam_limits.so Utilise le fichier /etc/security/limits.conf et le support noyau de la mesure des
ressources à l'authentification (modtype : session)
conf=filename Indique le chemin du
fichier limits.conf
pam_time.so Utilise le fichier /etc/security/time.conf pour indique des restrictions horaires à
23
l'authentification(modtype : account)
Ahmed Toumanari

Le répertoire /etc/pam.d
-rw-r--r-- 1 root root 330 aoû 14 2003 chfn
-rw-r--r-- 1 root root 330 aoû 14 2003 chsh
-rw-r--r-- 1 root root 125 sep 18 2003 cups
-rw-r--r-- 1 root root 225 sep 18 2003 halt
-rw-r--r-- 1 root root 157 aoû 14 2003 kbdrate
-rw-r--r-- 1 root root 380 sep 18 2003 kde3
-rw-r--r-- 1 root root 222 sep 13 2003 kppp
-rw-r--r-- 1 root root 287 sep 18 2003 kscreensaver3
-rw-r--r-- 1 root root 427 aoû 14 2003 login
-rw-r--r-- 1 root root 225 sep 19 2003 net_monitor
-rw-r--r-- 1 root root 210 sep 1 2003 other
-rw-r--r-- 1 root root 169 jui 21 2003 passwd
-rw-r--r-- 1 root root 182 sep 18 2003 pmsuspend2
-rw-r--r-- 1 root root 225 sep 18 2003 poweroff
-rw-r--r-- 1 root root 204 aoû 13 2003 ppp
-rw-r--r-- 1 root root 225 sep 18 2003 reboot
-rw-r--r-- 1 root root 254 sep 1 2003 secure-mcserv
-rw-r--r-- 1 root root 384 sep 18 2003 simple_root_authen
-rw-r--r-- 1 root root 659 aoû 3 2003 su
-rw-r--r-- 1 root root 278 jui 18 2003 sudo
-rw-r--r-- 1 root root 573 mar 10 2004 system-auth
-rw-r--r-- 1 root root 386 sep 10 2003 xdm
-rw-r--r-- 1 root root 157 sep 10 2003 xserver

24
Ahmed Toumanari

Exemple
N'autoriser que certains utilisateurs à effectuer la
commande su vers l'utilisateur root (ceux du
groupe wheel)

/etc/pam.d/su
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_wheel.so group=wheel

25
Ahmed Toumanari

Exemple - login

Soit le fichier /etc/pam.d/login:

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_unix.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_unix.so shadow nullok use_authtok
session required /lib/security/pam_unix.so

26
Exercice
1- Créez un utilisateur ensa2. Ne pas lui donner de mot de passe.
Dans une autre console, se loguer avec ce compte. Peut il se loguer ?
2- Dans /etc/pam.d/login modifier la ligne :
auth required /lib/security/pam_unix.so shadow nullok
en enlevant nullock, essayez de vous reloguer avec le compte précédent. Que
remarquez vous?
3- Créer un fichier vide :
touch /etc/nologin.
Essayez de vous connecter avec le compte ensa2. Que remarquez vous?
4-Soit le fichier /etc/pam.d/su
auth sufficient pam_rootok.so
auth required pam_unix.so
account requisite pam_time.so
account required pam_unix.so
session required pam_unix.so
Et le fichier /etc/security/time.conf:
su;*;*;!Su0000-2400
a- « root » est-il obligé d’entrer le mot de passe lors de l’utilisation de su. Sinon
comment faire en sorte qu’il soit obligé de l’entrer.
b– les utilisateurs peuvent t-ils utiliser « su » pendant toute la semaine, sinon
27
pourquoi ?
Ahmed Toumanari

Pam-ification d’application

28
Ahmed Toumanari

29
Ahmed Toumanari
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdio.h>

//indique une fonction de conversation par défaut


static struct pam_conv conv = {
misc_conv, int misc_conv
(
NULL int num_msg,
}; const struct pam_message ** msgm,
struct pam_response ** response,
int main(int argc, char *argv[]) void * appdata_ptr
)
{
//handle de l'instance de PAM
pam_handle_t *pamh=NULL;
//résultat de l'authentification
int retval;
//nom de l'utilisateur à authentifier
const char *user="nobody";
//si un nom d'utilisateur est spécifié
if(argc == 2) {
user = argv[1]; 30

}
Ahmed Toumanari
//controle du nombre d'argument du programme
if(argc > 2) {
fprintf(stderr, "Usage: nom_service [username]\n");
exit(1);
}

//initialisation de PAM pour l'utilisateur user


retval = pam_start("nom_service", user, &conv, &pamh);

//on essaie d'authentifier l'utilisateur passé en argument (ou nobody)


if (retval == PAM_SUCCESS)
retval = pam_authenticate(pamh, 0); /* is user really user? */

//on vérifie l’expiration du comptes et times access


if (retval == PAM_SUCCESS)
retval = pam_acct_mgmt(pamh, 0);

/* A partir de maintenant, on va pouvoir savoir


si l'utilisateur est autorisé ou pas */ 31
Ahmed Toumanari

//c'est le résultat de pam_acct_mgmt qui indique l'authentification


if (retval == PAM_SUCCESS) {
fprintf(stdout, "OK\n");
} else {
fprintf(stdout, "Pas OK\n");
}

//on libère PAM


if (pam_end(pamh,retval) != PAM_SUCCESS) {
/* close Linux-PAM */
pamh = NULL;
fprintf(stderr, "check_user: failed to release authenticator\n");
exit(1);
}
return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
}

32
Ahmed Toumanari

inclure un fichier /etc/pam.d/nom_service :

# configuration pour nom_service


nom_service auth required pam_unix.so
nom_service account required pam_unix.so

33

Vous aimerez peut-être aussi