Pam, NSS et LDAP

L'objectif de ce rapide article est de stocker la configuration de mon serveur, sur lequel j'ai ramé pour remettre PAM et NSS avec LDAP. Pourquoi ? C'est pourtant pas compliqué… Tout simplement parce que je n'avais pas de copie de cette conf, et qu'a force de bidouiller au lieu de réfléchir, on fout vite la merde dans une config.

Bref, tout ça pour dire que, pour les explications, go google. Ici, c'est du brut !

Dedieu !

Slap ton LDAP

Slapd sous debian, c'est bien, ca marche bien, et c'est facile a configurer… alors pour un serveur a la maison, c'est pratique.

# necessaire pour la retro compatibilite avec postfix entre autres
allow bind_v2

include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema   
include         /etc/ldap/schema/inetorgperson.schema

pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args
loglevel        0

modulepath      /usr/lib/ldap
moduleload      back_bdb     

sizelimit 500

tool-threads 1

# les directives qui suivent s'appliqueront a ce backend jusque ce que l'on definisse un autre backend
backend         bdb
database        bdb
suffix          "dc=linuxwall,dc=info"
checkpoint 512 30

rootdn          "cn=admin,dc=linuxwall,dc=info"

# mdp root obtenu avec "slappasswd -h '{SSHA}' -v"
rootpw {SSHA}Supermotdepassedelamort

directory       "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500

index           objectClass eq
lastmod         on

# on definit les ACL
access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=linuxwall,dc=info" write
        by anonymous auth
        by self write
        by * none

access to dn.base="" by * read

access to *
        by dn="cn=admin,dc=linuxwall,dc=info" write
        by * read

Voila, avec cela il ne vous reste plus qu'a placer un phpldapadmin dans un coin de votre serveur web SSL (évidemment) et d'attaquer la config de vos comptes et groupes.

NSS & PAM

Je ferais ici un affreux copié collé du site de Jean-Francois Giraud (et ceci sans meme demander son autorisation, ce qui est mal) car ce charmant monsieur y a effectué une présentation des modules nécessaires qu'il me semble superflue de paraphraser.

Pour permettre l'authentification auprès d'un annuaire LDAP, vous devez installer les packages suivants :

  • libpam-ldap
  • libnss-ldap
  • libpam-cracklib
  • libpam-pwdb

Le paquet libnss-ldap fournit un service de nommage qui authorise votre serveur LDAP d'être utilisé comme service de nom. Ceci signifie qu'il fournit les données informatives concernant compte utilisateur, identificateurs, informations machines, alias, groupes réseau et de manière générale, tout ce qui est en général à plat dans les fichiers du répertoire /etc ou NIS.

Le paquet libpam-ldap permet l'authentification des utilisateurs dans les programmes qui utilisent PAM (Pluggable Authentication Module). S'il est utilisé avec libnss-ldap, vous pouvez remplacer la structure de configuration par fichiers /etc ou NIS avec LDAP.

Les paquets libpam-cracklib et libpam-pwdb sont utilisés par PAM-LDAP pour l'authentification.

Une fois que l'on a tout cela d'installé, il faut remplir les différents fichiers.

NSS config file

Le fichier de conf pour LDAP, ya quatres lignes….

# cat /etc/libnss-ldap.conf |grep -v '^#'

base dc=linuxwall,dc=info

uri ldap://127.0.0.1/

ldap_version 3

rootbinddn cn=admin,dc=linuxwall,dc=info

Le mot de passe du serveur LDAP est également nécessaire.

# cat /etc/libnss-ldap.secret
Supermotdepassedelamort

et le fichier de conf pour NSS

# cat /etc/nsswitch.conf |grep -v '^#'

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

hosts:          files dns
networks:       files


protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

PAM le tux

Ici, on a le meme fichier “secret” dans /etc/pam_ldap.secret (note: pensez a la mettre en 0400 quand meme….) puis on a un fichier pam_ldap.conf, pas bien gros lui non plus

# cat /etc/pam_ldap.conf |grep -v '^#'
base dc=linuxwall,dc=info

uri ldap://127.0.0.1/

ldap_version 3

rootbinddn cn=admin,dc=linuxwall,dc=info
port 389

scope sub
bind_timelimit 30
idle_timelimit 3600
pam_filter objectclass=posixaccount
pam_login_attribute uid
pam_password crypt

Il reste enfin à dire a PAM d'utiliser LDAP pour ses différents services. Sous Debian, ces services appellent géneralement les fichiers communs : * common-auth * common-account * common-session * common-password

Ces fichiers reprennent les différents modes que propose PAM :

       account - provide account verification types of service: has the user´s
       password expired?; is this user permitted access to the requested
       service?

       authentication - authenticate a user and set up user credentials.
       Typically this is via some challenge-response request that the user
       must satisfy: if you are who you claim to be please enter your
       password. Not all authentications are of this type, there exist
       hardware based authentication schemes (such as the use of smart-cards
       and biometric devices), with suitable modules, these may be substituted
       seamlessly for more standard approaches to authentication - such is the
       flexibility of Linux-PAM.

       password - this group´s responsibility is the task of updating
       authentication mechanisms. Typically, such services are strongly
       coupled to those of the auth group. Some authentication mechanisms lend
       themselves well to being updated with such a function. Standard UN*X
       password-based access is the obvious example: please enter a
       replacement password.

       session - this group of tasks cover things that should be done prior to
       a service being given and after it is withdrawn. Such tasks include the
       maintenance of audit trails and the mounting of the user´s home
       directory. The session management group is important as it provides
       both an opening and closing hook for modules to affect the services
       available to a user.

Dans chacun de ces fichiers, il faut rajouter une ligne.

common-auth

auth sufficient pam_ldap.so

common-account

account sufficient pam_ldap.so

common-session

session sufficient pam_ldap.so

common-password

# use_first_pass precise au module d'utiliser le password saisie pour
# toutes les operations, ce qui evite a 'su' de le demander 2 fois, par exemple

password sufficient pam_ldap.so use_first_pass

La methode LDAP est toujours sufficient. Si elle marche, tant mieux, sinon ce n'est pas bloquant, on peut toujours s'authentifier avec un compte dans /etc/passwd

Le test

Facile a tester avec su, on peux aussi ajouter rapidement un service, comme vsftpd, pour regarder comment ca marche :

# cat /etc/pam.d/vsftpd

# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusersonerr=succeed

# Note: vsftpd handles anonymous logins on its own.  Do not enable
# pam_ftp.so.

# Standard blurb.
@include common-account
@include common-session

@include common-auth
auth    required        pam_shells.so

Et dans /etc/vsftpd.conf, on rajoute :

pam_service_name=vsftpd

Enjoy ;)~~DISCUSSION~~

fr/ressources/articles/pam_ldap.txt · Last modified: 2011/03/16 01:41 (external edit)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0