Linux:Configuration de NSS/PAM pour une authentification via un LDAP

De WIKI.minetti.org
Révision de 7 avril 2016 à 18:46 par Jp (discussion | contributions) (Page créée avec « == But == Permet au système Linux: * d'authentifier les utilisateurs via le LDAP, * d'obtenir les informations des utilisateurs à trav... »)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

But

Permet au système Linux:

  • d'authentifier les utilisateurs via le LDAP,
  • d'obtenir les informations des utilisateurs à travers le LDAP.

Étape préliminaire

Avant de commencer, il est impératif:

Installation

Taper la commande suivante pour installer les composants nécessaires à NSS et PAM pour faire de l'authentification à travers un LDAP sur une CentOS/RedHat/Fedora:

yum install pam_ldap nss-pam-ldapd

ou sur une Debian:

aptitude install libnss-ldapd libpam-smbpass libpam-mount

Configuration au niveau du serveur LDAP

Création du compte pour l'accès au LDAP

Créer le compte que NSS/PAM va utiliser pour accéder au LDAP:

  • pour cela, commencer par créer le fichier LDIF:
dn: cn=linux,ou=sysaccount,ou=localnet,dc=minetti,dc=org
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: linux
description: Compte NSS/PAM
userPassword: ....
  • REMARQUE: Ne jamais mettre le mot de passe en clair (userPassword). Utiliser la commande suivante pour chiffrer le mot de passe:
slappasswd
  • Taper la commande suivante pour importer le nouveau compte dans le LDAP:
ldapadd -x -v -ZZ -D "cn=Manager,dc=minetti,dc=org" -W -f linux.ldif

Ajout des droits d'accès pour NSS/PAM

Voir chapitre Ajout des droits d'accès pour samba.

Configuration de NSS

  • Modifier le fichier /etc/nslcd.conf pour qu'il ressemble à ceci:
# UID/GID du démon nslcd
uid nslcd
gid ldap            # pour CentOS/RedHat/Fedora
gid nslcd           # pour Debian

# Connexion
uri ldap://ldap.srv.minetti.org
base dc=minetti,dc=org
binddn cn=linux,ou=sysaccount,ou=localnet,dc=minetti,dc=org
bindpw LeMotDePasseEnClair
rootpwmoddn cn=Manager,dc=minetti,dc=org
ldap_version 3
#bind_timelimit 30
#timelimit 30
#idle_timelimit 3600

# Certificats SSL
ssl             start_tls
tls_reqcert     demand
tls_cacertdir   /etc/openldap/cacerts               # pour CentOS/RedHat/Fedora
tls_cacertfile  /etc/ssl/certs/minetti-ca.pem       # pour Debian
#tls_randfile   /var/run/egd-pool
#tls_ciphers    TLSv1
tls_cert        /etc/pki/tls/certs/amon.pem         # pour CentOS/RedHat/Fedora
tls_cert        /etc/ssl/certs/amon.pem             # pour Debian
tls_key         /etc/pki/tls/private/amon.key       # pour CentOS/RedHat/Fedora
tls_key         /etc/ssl/private.amon/amon.key      # pour Debian

# Recherche arborescence du LDAP
scope   sub
base    group           ou=group,ou=localnet,dc=minetti,dc=org
base    passwd          ou=people,ou=localnet,dc=minetti,dc=org
base    shadow          ou=people,ou=localnet,dc=minetti,dc=org
base    hosts           ou=hosts,ou=localnet,dc=minetti,dc=org
base    services        ou=services,ou=localnet,dc=minetti,dc=org
base    networks        ou=networks,ou=localnet,dc=minetti,dc=org
base    protocols       ou=protocols,ou=localnet,dc=minetti,dc=org
base    rpc             ou=rpc,ou=localnet,dc=minetti,dc=org
base    ethers          ou=ethers,ou=localnet,dc=minetti,dc=org
base    aliases         ou=aliases,ou=localnet,dc=minetti,dc=org
base    netgroup        ou=netgroup,ou=localnet,dc=minetti,dc=org

# PAM (pour Debian uniquement)
pam_authz_search        (&(objectClass=posixAccount)(uid=$username))
  • Créer le fichier /etc/ldap.secret et mettez y le mot de passe du manager du LDAP:
echo "MonMotDePasse" > /etc/ldap.secret
chmod 600 /etc/ldap.secret
  • Modifier le fichier /etc/nsswitch.conf pour qu'il ressemble à ceci:
passwd:     files ldap
shadow:     files ldap
group:      files ldap

hosts:      files ldap dns

bootparams: nisplus [NOTFOUND=return] files

ethers:     files ldap
netmasks:   files 
networks:   files ldap
protocols:  files ldap
rpc:        files ldap
services:   files ldap

netgroup:   nisplus ldap

publickey:  nisplus

automount:  files nisplus ldap
aliases:    files nisplus ldap
  • Pour CentOS/RedHat/Fedora, modifier la ligne suivante dans le fichier /etc/sysconfig/authconfig:
USELDAP=yes
  • Démarrer le démon nslcd:
service nslcd start

Configuration de PAM (CentOS/RedHat/Fedora)

  • Modifier le fichier /etc/pam_ldap.conf pour qu'il ressemble à ceci:
# Connexion
uri                             ldap://ldap.srv.minetti.org
base                            dc=minetti,dc=org
binddn                          cn=linux,ou=sysaccount,ou=localnet,dc=minetti,dc=org
bindpw                          LeMotDePasseEnClair
rootbinddn                      cn=Manager,dc=minetti,dc=org
ldap_version                    3
#timelimit                      30
#bind_timelimit                 30
#bind_policy                    hard
#idle_timelimit                 3600

# Certificats SSL
ssl                             start_tls
tls_checkpeer                   yes
tls_cacertdir                   /etc/openldap/cacerts
#tls_randfile                   /var/run/egd-pool
#tls_ciphers                    TLSv1
tls_cert                        /etc/pki/tls/certs/amon.pem
tls_key                         /etc/pki/tls/private/amon.key

# Recherche arborescence du LDAP
scope                           sub
pam_filter                      objectclass=posixAccount
pam_login_attribute             uid
pam_check_host_attr             no
pam_check_service_attr          no
#pam_groupdn                    cn=pam,ou=group,ou=localnet,dc=minetti,dc=org
pam_member_attribute            memberUid
pam_min_uid                     10001
#pam_max_uid                    0
#pam_login_attribute            userPrincipalName
#pam_template_login_attribute   uid
#pam_template_login             nobody
pam_password                    md5

# Paramètres pour NSS (normalement obsolète)
nss_base_passwd                 ou=people,ou=localnet,dc=minetti,dc=org?sub
nss_base_shadow                 ou=people,ou=localnet,dc=minetti,dc=org?sub
nss_base_group                  ou=group,ou=localnet,dc=minetti,dc=org?sub
nss_base_hosts                  ou=hosts,ou=localnet,dc=minetti,dc=org?sub
nss_base_services               ou=services,ou=localnet,dc=minetti,dc=org?sub
nss_base_networks               ou=networks,ou=localnet,dc=minetti,dc=org?sub
nss_base_protocols              ou=protocols,ou=localnet,dc=minetti,dc=org?sub
nss_base_rpc                    ou=rpc,ou=localnet,dc=minetti,dc=org?sub
nss_base_ethers                 ou=ethers,ou=localnet,dc=minetti,dc=org?sub
nss_base_netmasks               ou=networks,ou=localnet,dc=minetti,dc=org?sub
nss_base_bootparams             ou=ethers,ou=localnet,dc=minetti,dc=org?sub
nss_base_aliases                ou=aliases,ou=localnet,dc=minetti,dc=org?sub
nss_base_netgroup               ou=netgroup,ou=localnet,dc=minetti,dc=org?sub
  • Créer le fichier /etc/pam_ldap.secret et mettez y le mot de passe du manager du LDAP:
echo "MonMotDePasse" > /etc/pam_ldap.secret
chmod 600 /etc/pam_ldap.secret
  • Modifier le fichier /etc/pam.d/system-auth pour qu'il ressemble à ceci:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so
session     optional      pam_mkhomedir.so skel=/etc/skel umask=077

Configuration de PAM (Debian)

Debian configure automatiquement PAM au moment de l'installation de libnss-ldapd. Néanmoins il faudra s'assurer d'avoir la configuration suivante:

  • pour /etc/pam.d/common-account:
account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so
account requisite                       pam_deny.so
account required                        pam_permit.so
account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=10001
  • pour /etc/pam.d/common-auth:
auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_ldap.so minimum_uid=10001 use_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
auth    optional                        pam_mount.so
auth    optional                        pam_smbpass.so migrate
  • pour /etc/pam.d/common-password:
password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 default=ignore]      pam_ldap.so minimum_uid=10001 md5 try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so
password        optional                        pam_smbpass.so nullok use_authtok use_first_pass
  • pour /etc/pam.d/common-session:
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so
session optional                        pam_mount.so
session [success=ok default=ignore]     pam_ldap.so minimum_uid=10001
session required                        pam_mkhomedir.so skel=/etc/skel umask=0077

Test

Pour tester, taper les commandes suivantes pour lister les utilisateurs du système:

getent passwd
getent shadow

Vérifier que les utilisateurs du LDAP apparaissent bien à la fin de la liste.

Taper la commande suivante:

getent group

Vérifier que les groupes du LDAP apparaissent bien à la fin de la liste.

Ouvrir une session et tester l'authentification.