====== Pam, NSS et LDAP ======
{{tag>pam nss ldap debian vsftpd}}
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 [[http://phpldapadmin.sourceforge.net/|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 [[http://jfgiraud.free.fr/programmation/ldapauth/|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~~