Installation d'OpenLDAP, PAM-LDAP et NFS
Procédure validée sur Debian 10 et Ubuntu 20.04
Présentation du projet
Nous souhaitons créer un serveur central d'authentification et de fichiers sous Debian permettant à des clients Xubuntu de s'y connecter.
Installation et configuration du serveur OpenLDAP
OpenLDAP est un annuaire informatique qui fonctionne sur le modèle client/serveur. Il contient des informations de n'importe quelle nature qui sont rangées de manière hiérarchique.
Pour bien comprendre le concept, il est souvent comparé aux Pages Jaunes (Yellowpages), où le lecteur recherche un numéro de téléphone particulier: il va d'abord sélectionner la profession, puis la ville, puis le nom de l'entrée pour trouver au final le numéro de téléphone. En pratique, il est utilisé pour enregistrer une grande quantité d'utilisateurs ou de services (parfois des centaines de milliers) dans un réseau informatique. Il permet d'organiser hiérarchiquement les utilisateurs par département, par lieu géographique ou par n'importe quel autre critère.
Source : Wikipedia
Installation des paquets
Sur le serveur, installer les paquets slapd
et ldap-utils
:
apt install slapd ldap-utils
Configuration de l'annuaire
Afin de configurer l'annuaire, tapez :
dpkg-reconfigure slapd
Répondez aux questions comme suit :
- Voulez-vous omettre la configuration d'OpenLDAP
- Non
- Nom de domaine
- Votre nom de domaine (exemple : mondomaine.local)
- Nom d'entité
- Votre nom de domaine (exemple : mondomaine.local)
- Mot de passe de l'administrateur
- Un mot de passe assez fort
- Module de base de données à utiliser
- MDB
- Faut-il supprimer la base de données à la purge du paquet
- Comme vous voulez
- Faut-il déplacer l'ancienne base de données
- Oui
Désactivation du compte anonyme et création du compte en lecture seule
Le compte en lecture seule aura accès au mots de passe des comptes utilisateurs. Créez le fichier lecture.ldif :
dn: cn=lecture,dc=mondomaine,dc=local objectClass: simpleSecurityObject objectClass: organizationalRole cn: lecture description: Compte lecture seule pour serveurs de messagerie userPassword: MotDePasseLectureSeule
Créez le fichier anon.ldif :
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: to attrs=userPassword by self write by anonymous auth by dn="cn=lecture,dc=mondomaine,dc=local" read by dn="cn=admin,dc=mondomaine,dc=local" write by * none olcAccess: to dn.base="dc=mondomaine,dc=local" by users read olcAccess: to * by self write by dn="cn=admin,dc=mondomaine,dc=local" write by * read by anonymous none
Modifiez le fichier /etc/ldap/ldap.conf comme suit :
BASE dc=mondomaine,dc=local URI ldap://127.0.0.1
Éxécutez les scripts LDIF :
ldapadd -x -H ldap://localhost -D "cn=admin,dc=example,dc=com" -f lecture.ldif -W ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f anon.ldif
Peuplement de l'annuaire
Trois choix s'offrent à nous :
- Peupler à l'aide d'un script LDIF
- Peupler à l'aide d'un script Python
Nous allons étudier le peuplement par script Python. Nous allons ajouter une librairie au serveur :
apt install python3-ldap
Voici le code permettant de se connecter à l'annuaire (remplacer par vos valeurs) :
import ldap,os,hashlib from base64 import encodebytes as encode from base64 import decodebytes as decode import ldap.modlist as modlist dc="dc=mondomaine,dc=local" l = ldap.initialize('ldap://127.0.0.1') l.simple_bind_s("cn=admin," + dc,"MotDePasseLdap")
Le code permettant d'ajouter un OU (organizational unit) :
dn="ou=Utilisateurs," + dc attrs = {} attrs['objectclass'] = [b"organizationalUnit"] attrs['ou'] = [b"Utilisateurs"] ldif = modlist.addModlist(attrs) l.add_s(dn,ldif)
Voici le code pour hacher le mot de passe :
def makeSecret(password): salt = os.urandom(4) h = hashlib.sha1(password.encode('utf-8')) h.update(salt) salted = (encode(h.digest() + salt)[:-1]).decode('utf-8') return("{SSHA}" + salted)
Le code permettant d'ajouter un utilisateur :
dn="cn=pdubois,ou=Utilisateurs," + dc attrs = {} attrs['objectclass'] = [b"top",b"inetOrgPerson",b"posixAccount"] attrs['cn'] = [b"Paul Dubois"] attrs['userPassword'] = makeSecret("MonMotDePasseSuperSecurise").encode('utf-8') attrs['sn'] = [b"pdubois"] attrs['gidNumber'] = [b"1100"] attrs['homeDirectory'] = [b"/home/pdubois"] attrs['uid'] = [b"pdubois"] attrs['mail'] = [b"pdubois@mondomaine.local"] attrs['uidNumber'] = [b"1200"] ldif = modlist.addModlist(attrs) l.add_s(dn,ldif)
Testez le peuplement du LDAP :
print(l.search_s(dc,ldap.SCOPE_SUBTREE,'(cn=pdubois)',['dn','objectclass','userPassword']))
Rendre le serveur client de l'annuaire
Si vous voulez que le serveur soit client de l'annuaire, installez ces paquets :
apt install libnss-ldapd libpam-ldap nscd ca-certificates
Répondez aux questions comme suit :
- L'URI du serveur LDAP
ldap://127.0.0.1
- Base de recherche du serveur LDAP
dc=mondomaine,dc=local
- Service de nom à configurer
group
,shadow
etpasswd
- L'URI du serveur LDAP
ldap://127.0.0.1
(de nouveau)- Le DN de la base de recherche
dc=mondomaine,dc=local
(de nouveau)- Version de LDAP à utiliser
- 3
- Faut-il que le root local soit l'administrateur de la base de données ?
- Oui
- Est-ce que le LDAP nécessite une connexion
- Oui
- Compte LDAP du root
cn=admin,dc=mondomaine,dc=local
- Mot de passe du compte LDAP du root
- Le mot de passe renseigné lors de l'installation du LDAP.
- Compte utilisateur d'ouverture de session LDAP
- cn=lecture,dc=mondomaine,dc=local
- Mot de passe de l'utilisateur de la base LDAP
- Le mot de passe du compte lecture seule.
Mise en place du client LDAP
Sur votre/vos client(s), installez les paquets suivants : -
apt install ldap-auth-client nscd libnss-ldapd libpam-ldap
Durant l'installation, il vous sera demandé de renseigner les informations suivantes :
- L'URI du serveur LDAP
ldap://192.168.1.100
- Le DN de la base de recherche
dc=mondomaine,dc=local
- L'URI du serveur LDAP
ldap://192.168.1.100
(de nouveau)- Le DN de la base de recherche
dc=mondomaine,dc=local
(de nouveau)- Version de LDAP à utiliser
- 3
- Faut-il que le root local soit l'administrateur de la base de données ?
- Oui
- Est-ce que le LDAP nécessite une connexion
- Oui
- Compte LDAP du root
cn=admin,dc=mondomaine,dc=local
- Mot de passe du compte LDAP du root
- Le mot de passe renseigné lors de l'installation du LDAP.
- Compte utilisateur d'ouverture de session LDAP
- cn=lecture,dc=mondomaine,dc=local
- Mot de passe de l'utilisateur de la base LDAP
- Le mot de passe du compte lecture seule.
- Service de nom à configurer
group
,shadow
etpasswd
Vous pouvez activer la création automatique d'un répertoire personnel en ajoutant la ligne suivante au fichier /etc/pam.d/common-session :
session optional pam_mkhomedir.so skel=/etc/skel umask=077
Finalisez la configuration en entrant :
pam-auth-update service nscd restart
On vous demandera quels modules activer, ajoutez LDAP Authentication et validez.
Testez la configuration de nsswitch.conf avec getent
:
getent passwd getent group
Configurez lightdm en ajoutant ce qui suit au fichier de configuration /etc/lightdm/lightdm.conf.d/50-hide-users-list.conf :
[SeatDefaults] allow-guest=false greeter-hide-users=true greeter-show-manual-login=true
Installation et configuration du serveur NFS
Network File System (ou 'NFS', système de fichiers en réseau) est à l'origine un protocole développé par Sun Microsystems en 1984 qui permet à un ordinateur d'accéder à des fichiers via un réseau. Il fait partie de la couche application du modèle OSI et utilise le protocole RPC.
Ce système de fichiers en réseau permet de partager des données principalement entre systèmes UNIX. Des versions existent pour Macintosh ou Microsoft Windows.
NFS est compatible avec IPv6 sur la plupart des systèmes.
Source : Wikipedia
Installation des paquets
Sur le serveur, installer le paquet nfs-kernel-server
:
apt-get install nfs-kernel-server
Configurer le serveur NFS
Éditez le fichier /etc/exports :
/home/ 192.168.1.0/24(rw,sync)
Redémarrez le service NFS pour prendre en compte de vos modifications :
service nfs-kernel-server reload
Configurer le client NFS
Nous allons installer le module NFS sur le client :
apt-get install nfs-common
Puis effectuons le point de montage. Pour cela, éditez le fichier /etc/fstab et ajoutez-y la ligne suivante :
192.168.1.100:/home/ /home nfs defaults 0 0