Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TP OpenLdap
- Installation
- Modifier le fichier /etc/apt/sources.list
- deb http://http.debian.net/debian jessie main
- deb-src http://http.debian.net/debian jessie main
- deb http://http.debian.net/debian jessie-updates main
- deb-src http://http.debian.net/debian jessie-updates main
- deb http://security.debian.org/ jessie/updates main
- deb-src http://security.debian.org/ jessie/updates main
- # apt update
- Sur une distribution de type Debian (Debian, Ubuntu, ...), les paquets à installer sont les suivants : slapd et ldap-utils. Saisissez donc, en tant que root, la commande suivante :
- # apt install slapd ldap-utils
- (On vous demande le mot de passe associé à l'annuaire)
- Les outils fournis par OpenLDAP
- Le projet OpenLDAP implémente un serveur LDAP, mais également les commandes clientes permettant de manipuler des informations contenues dans l'annuaire.
- Les commandes liées au serveur
- /usr/sbin/slapd
- /usr/sbin/slurpd
- /usr/sbin/slapadd
- /usr/sbin/slapcat
- /usr/sbin/slapdn
- /usr/sbin/slapindex
- /usr/sbin/slappasswd
- /usr/sbin/slaptest
- Chacune de ces commandes permet d'agir directement au niveau du serveur OpenLDAP, notamment au niveau de sa base de données. Il est donc impératif de les exécuter sur le serveur où fonctionne le serveur OpenLDAP.
- Démons :
- • slapd : le démon OpenLDAP !
- • slurpd : le démon de réplication
- Commandes de manipulation de la base (backend) gérée par OpenLDAP
- • slapindex : crée les index au sein de la base
- • slapcat : effectue un dump (une copie intégrale) de la base
- • slapadd : ajoute des entrées LDIF dans la base
- • slappasswd : utilitaire de conversion de mots de passe
- Commandes de test/validation :
- • slaptest : teste la validité du fichier de configuration slapd.conf
- • slapdn : teste la conformité d'un DN donné en ligne de commande
- Les commandes clientes
- /usr/bin/ldapsearch
- /usr/bin/ldapmodify
- /usr/bin/ldapdelete
- /usr/bin/ldapmodrdn
- /usr/bin/ldappasswd
- /usr/bin/ldapwhoami
- /usr/bin/ldapcompare
- /usr/bin/ldapadd
- Chaque commande cliente utilise le protocole LDAP pour agir sur l'annuaire. Elles peuvent donc, cette fois-ci, être utilisées à distance. Elles agissent en tant que clients LDAP standard.
- Il existe d'autres clients, graphiques notamment.
- • ldapsearch : effectue une recherche au sein de l'annuaire
- • ldapadd : ajoute une entrée
- • ldapdelete : supprime une entrée
- • ldapmodify : modifie une entrée (ajoute/suppr. un attribut, ajoute/suppr. une entrée, ...)
- • ldapmodrdn : modifie le rdn d'une entrée (renomme une entrée)
- • ldappasswd : modifie le mot de passe d'une entrée LDAP
- • ldapwhoami : affiche avec quel utilisateur le binding a eu lieu
- • ldapcompare : permet de comparer l'attribut d'une entrée à une valeur spécifiée
- Configuration du serveur
- La configuration du serveur OpenLDAP (le démon slapd) s'effectue après l’installation :
- # dpkg-reconfigure -plow slapd
- (On vous demande le mot de passe associé à l'annuaire, ainsi que le suffix DNS : meritXX.local, le reste mettre par défaut)
- Contrôle d’accès
- Créer un fichier access.ldif (dans /root)
- # ACLs de notre premiere arborescence :
- dn: olcDatabase={1}mdb,cn=config
- changetype: modify
- add: olcAccess
- olcAccess: {0}to attrs=userPassword
- by dn="cn=admin,dc=meritXX,dc=local" write
- by self write
- by * none
- olcAccess: {1}to *
- by dn="cn=admin,dc=meritXX,dc=local" write
- by * read
- # ldapmodify -Y EXTERNAL -H ldapi:/// -f access.ldif
- Dans le Rapport : expliquer ce que font ces ACL (ligne par ligne)
- Initialiser l'annuaire
- L'initialisation de l'annuaire n'est qu'un ajout massif de plusieurs entrées. Cet ajout massif peut se faire par le biais de slapadd si vous possédez déjà un dump de l'annuaire et si vous vous situez sur le serveur.
- A distance, c'est l'outil ldapadd qui va nous permettre d'effectuer cette opération. Il suffit de fournir à ldapadd un fichier LDIF contenant plusieurs entrées qui seront ajoutées dans le même ordre avec lequel elles apparaissent dans le fichier.
- Fichier LDIF à insérer (fichier.ldif) :
- #dn: dc=meritXX,dc=local
- #objectClass: ,dcObject
- #objectClass: organization
- #dc: meritXX
- #o: meritXX
- dn: ou=users,dc=meritXX,dc=local
- objectClass: top
- objectClass: organizationalUnit
- ou: users
- dn: ou=groups,dc=meritXX,dc=local
- objectClass: top
- objectClass: organizationalUnit
- ou: groups
- dn: cn=utilisateurs,ou=groups,dc=meritXX,dc=local
- objectClass: posixGroup
- cn: utilisateurs
- gidNumber: 2000
- dn: uid=user1,ou=users,dc=meritXX,dc=local
- objectClass: account
- objectClass: posixAccount
- cn: user1
- uid: user1
- uidNumber: 10001
- gidNumber: 2000
- homeDirectory: /home/user1
- userPassword: user1
- loginShell: /bin/sh
- description: user1
- dn: uid=user2,ou=users,dc=meritXX,dc=local
- objectClass: account
- objectClass: posixAccount
- cn: user2
- uid: user2
- uidNumber: 10002
- gidNumber: 2000
- homeDirectory: /home/user2
- userPassword: user2
- loginShell: /bin/sh
- description: user2
- Dans le Rapport : Faire un schéma ou expliquer l’arborescence de notre annuaire
- Insertion :
- ldapadd -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f fichier.ldif
- Rechercher une entrée : ldapsearch
- La commande ldapsearch permet d'effectuer une recherche au sein de l'annuaire. Voici sa syntaxe :
- ldapsearch -x -H ldap://<serveur> -b <base> [-s portée] [filtre] [attributs]
- Exemples à tester:
- On recherche tous les uid à partir de la racine de l'annuaire :
- ldapsearch -x -H ldap://localhost -b "dc=meritXX,dc=local" "(uid=*)"
- On recherche toutes les entrées ayant un gidNumber égal à 2000 :
- ldapsearch -x -H ldap://localhost -b "dc= meritXX,dc=local" "(gidNumber=2000)"
- ldapsearch -x -H ldap://localhost -b "dc= meritXX,dc=local" "(&(gidNumber=2000) (objectClass=posixAccount))" homeDirectory
- Dans le Rapport : indiquer la ligne de commande qui permet d’afficher les attributs de l’utilisateur « user1 »
- Supprimer une entrée : ldapdelete
- La suppression d'une entrée se fait par la commande ldapdelete. Voici sa syntaxe :
- ldapdelete -W -D <binddn> -x -H ldap://<serveur> <dn>
- Suppression d'un utilisateur :
- ldapdelete -x -H ldap://localhost -W -D "cn=admin,dc=meritXX,dc=local" "uid=user2,ou=users,dc=meritXX,dc=local"
- Modifier une entrée : ldapmodify
- Elle va permettre d'effectuer toutes sortes d'opérations, y compris l'ajout et la suppression d'entrées.
- Sa syntaxe est la suivante :
- ldapmodify -W -D <binddn> -x -H ldap://<serveur> -f <fichier.ldif>
- Ajouter une entrée :
- Ajoutons un utilisateur "user3" (user3.ldif)
- dn: uid=user3,ou=users,dc=meritXX,dc=local
- changetype: add
- objectClass: account
- objectClass: posixAccount
- cn: user3
- uid: user3
- uidNumber: 10003
- gidNumber: 2000
- homeDirectory: /home/user3
- userPassword: user3
- loginShell: /bin/sh
- description: user3
- Présence d'un attribut "changetype" en plus de chacun des attributs de l'entrée que nous souhaitons ajouter.
- Application de la modification :
- ldapmodify -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f user3.ldif
- Ajouter un attribut :
- L'ajout d'un attribut s'effectue par le changetype "modify" et par un nouvel attribut "add" qui précise quel attribut ajouter.
- dn: uid=user3,ou=users,dc=meritXX,dc=local
- changetype: modify
- add: description
- description: chef
- Modifier un attribut :
- Pour modifier un attribut, le "changetype" à employer est, ici encore, "modify". L'attribut supplémentaire à ajouter est l'attribut "replace" qui va préciser quel attribut remplacer. Enfin, nous spécifions la nouvelle valeur de l'attribut.
- dn: uid=user3,ou=users,dc=meritXX,dc=local
- changetype: modify
- replace: description
- description: grand chef
- Supprimer un attribut :
- La suppression d'attribut s'effectue via le changetype "modify" et l'utilisation d'un nouvel attribut : "delete".
- dn: uid=user3,ou=users,dc=meritXX,dc=local
- changetype: modify
- delete: description
- description: grand chef
- Supprimer une entrée :
- Le principe est le même que pour l'ajout d'une entrée. Cette fois, la valeur de "changetype" n'est plus "add" mais "delete".
- dn: uid=user3,ou=users,dc=meritXX,dc=local
- changetype: delete
- SAMBA
- Préparation de l'annuaire
- Samba gère 3 types de comptes : les comptes d'utilisateurs, de groupes et de machines. Je vous propose donc de créer 3 "ou" qui permettront de les stocker.
- Effaçons tout d'abord les anciennes données de notre annuaire :
- # /etc/init.d/slapd stop
- # rm -f /var/lib/ldap/*
- # /etc/init.d/slapd start
- Ajoutons ensuite l'arborescence de base que nous avons présentée (fichier base.ldif) :
- dn: dc=meritXX,dc=local
- objectClass: dcObject
- objectClass: organization
- dc: meritXX
- o: meritXX
- description: meritXX
- dn: ou=users,dc=meritXX,dc=local
- objectClass: top
- objectClass: organizationalUnit
- ou: users
- dn: ou=groups,dc=meritXX,dc=local
- objectClass: top
- objectClass: organizationalUnit
- ou: groups
- dn: ou=machines,dc=meritXX,dc=local
- objectClass: top
- objectClass: organizationalUnit
- ou: machines
- ldapadd -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f base.ldif
- Samba a besoin d'un compte POSIX pour pouvoir créer un compte Samba associé.
- La première étape est donc de configurer notre serveur GNU/Linux pour aller chercher les comptes POSIX sur l'annuaire. Nous allons pour ceci utiliser le mécanisme "nsswitch".
- Nsswitch (Name Service Switch) permet de rediriger les requêtes de noms vers des sources très diverses.
- Une requête de nom est le fait d'obtenir des informations concernant un nom particulier (résoudre un login en uid, un nom de machine en adresse IP, connaître le répertoire home d'un utilisateur, etc...).
- La source de ces données est habituellement un fichier (/etc/passwd, /etc/shadow, /etc/hosts) mais elle peut être une base de données, un annuaire, etc... car Nsswitch propose un mécanisme de plugins qui permet d'étendre ses capacités d'interconnexion.
- Installation de libnss-ldap
- Nous allons commencer par installer le plugin (la librairie) qui permet à nsswitch d'utiliser un annuaire LDAP comme source de données
- apt install libnss-ldap
- Configuration de libnss-ldap
- La librairie est installée, il faut maintenant la configurer pour lui indiquer notamment sur quel serveur se trouvent les comptes.
- La configuration de la librairie se trouve dans le fichier /etc/libnss-ldap.conf :
- # Emplacement du serveur LDAP à utiliser
- host 127.0.0.1
- port 389
- # Racine de notre annuaire
- base dc=meritXX,dc=local
- # Version du protocole a utiliser
- ldap_version 3
- bindpw “mot de passe admin LDAP”
- rootbinddn cn=admin,dc=meritXX,dc=local
- # Portee de la recherche par defaut
- scope sub
- # Emplacement des comptes
- nss_base_passwd dc=meritXX,dc=local?sub
- nss_base_group ou=groups,dc=meritXX,dc=local?one
- La partie importante du fichier concerne l'emplacement des comptes : il faut spécifier où trouver les informations fournies habituellement par /etc/passwd (les comptes utilisateurs) et celles fournies par /etc/group (les comptes de groupes).
- Pour les comptes utilisateurs, nous utilisons une astuce : pour Samba, nsswitch doit connaître à la fois les comptes utilisateurs et les comptes machines. Puisque nous ne pouvons spécifier qu'une base de recherche et une portée, nous indiquons une recherche à partir du niveau supérieur (ici, la racine de l'annuaire) avec une portée sub. Cette méthode permettra à nsswitch de descendre à la fois dans l'"ou" "users", mais aussi dans l'"ou" "machines".
- Les groupes ne posent pas de problème car ils sont tous stockés dans la même "ou". La portée choisie ici est "one".
- Remarquez que dans notre exemple, aucun compte n'est utilisé pour nous connecter à l'annuaire.
- Utilisation de libnss-ldap dans nsswitch
- Une fois notre librairie configurée, il faut activer la recherche dans LDAP au niveau de nsswitch.
- Ceci se fait très simplement en modifiant le fichier /etc/nsswitch.conf :
- passwd: compat ldap
- group: compat ldap
- ………..
- Il suffit d'ajouter "ldap" à la fin des entrées passwd et group. Ceci signifie que pour chaque type de résolution, nsswitch utilisera tout d'abord le mode compat (recherche dans les fichiersappropriés) en priorité, puis le mode LDAP.
- reboot
- Ajout d'un compte
- Testons notre configuration en ajoutant deux objets à l'annuaire : un groupe "utilisateurs" et un utilisateur "user1" appartenant à ce groupe (fichier utilisateur.ldif) :
- dn: cn=utilisateurs,ou=groups,dc=meritXX,dc=local
- objectClass: posixGroup
- cn: utilisateurs
- gidNumber: 2000
- dn: uid=user1,ou=users,dc=meritXX,dc=local
- objectClass: account
- objectClass: posixAccount
- cn: user1
- uid: user1
- uidNumber: 10001
- gidNumber: 2000
- homeDirectory: /home/user1
- userPassword: user1
- loginShell: /bin/sh
- description: user1
- ldapadd -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f utilisateur.ldif
- Test de la reconnaissance du compte
- Voyons si nos nouveaux comptes sont bien reconnus et pris en compte par le système. Les commandes "getent" et "id" vont nous donner la réponse :
- # getent group
- [...]
- utilisateurs:x:2000:
- # getent passwd
- [...]
- User1:x:10001:2000:user1:/home/user1:/bin/sh
- # id user1
- uid=10001(user1) gid=2000(utilisateurs) groups=2000(utilisateurs)
- Notre groupe et notre utilisateur apparaissent parmi la liste de ceux connus ! De plus,
- l'utilisateur appartient bien au groupe "utilisateurs" !
- Connexion de Samba à l'annuaire
- Le système est désormais "connecté" à l'annuaire... Il reste à configurer OpenLDAP pour qu'il soit capable de gérer les comptes Samba et Samba pour qu'il aille chercher ses comptes sur l'annuaire.
- apt install samba samba-doc smbclient
- Copie du schema Samba
- La première étape est de copier le schéma de Samba (fourni par le paquet samba-doc) dans le répertoire schema d'OpenLDAP et de l'inclure dans la configuration. De cette manière, OpenLDAP pourra gérer les comptes Samba :
- # cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema
- # cd /etc/ldap/schema ; gunzip samba.schema.gz
- Créer un fichier smb.conf :
- include /etc/ldap/schema/core.schema
- include /etc/ldap/schema/cosine.schema
- include /etc/ldap/schema/nis.schema
- include /etc/ldap/schema/inetorgperson.schema
- include /etc/ldap/schema/samba.schema
- Convertir ce fichier en fichier LDIF :
- # mkdir /root/slapd.d
- # slaptest -f smb.conf -F /root/slapd.d/
- Ajouter le schema Samba à la configuration :
- # cp "/root/slapd.d/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/slapd.d/cn=config/cn=schema"
- # chown openldap: '/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif'
- # /etc/init.d/slapd stop
- # /etc/init.d/slapd start
- Verification:
- # ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
- dn: cn=schema,cn=config
- dn: cn={0}core,cn=schema,cn=config
- dn: cn={1}cosine,cn=schema,cn=config
- dn: cn={2}nis,cn=schema,cn=config
- dn: cn={3}inetorgperson,cn=schema,cn=config
- dn: cn={4}samba,cn=schema,cn=config
- Configuration de Samba
- La dernière étape est de modifier la configuration de Samba (/etc/samba/smb.conf) pour lui indiquer où stocker ses propres comptes. Il faut pour ceci modifier la directive "passdb backend". Je vous propose le fichier de configuration minimaliste suivant, incluant un partage
- simple de données :
- [global]
- # Identification Netbios
- workgroup = Workgroup
- netbios name = debian
- # Controle de domaine desactive
- os level = 40
- domain logons = no
- domain master = no
- local master = no
- # Base de donnee de comptes
- passdb backend = ldapsam:ldap://localhost
- ldap admin dn = "cn=admin,dc=meritXX,dc=local"
- ldap ssl = off
- ldap delete dn = no
- ldap user suffix = ou=users
- ldap machine suffix = ou=machines
- ldap group suffix = ou=groups
- ldap suffix = dc=meritXX,dc=local
- # Authentification via la base de comptes locale
- security = user
- # Securite
- encrypt passwords = yes
- # Gestion des logs
- log file = /var/log/samba/%m.log
- log level = 2
- # Partage accessible uniquement au groupe sambausers
- [donnees]
- path = /samba/donnees
- comment = Partage Donnees
- writeable = yes
- browsable = yes
- guest ok = no
- valid users = @utilisateurs
- Ce fichier indique que le "passdb backend" à utiliser est notre annuaire. Nous précisons également divers éléments tels que l'emplacement des comptes utilisateurs, groupes et machines.
- Samba va avoir besoin d'écrire dans notre annuaire : nous spécifions donc quel est le compte administrateur LDAP à utiliser ("ldap admin dn"). Cependant, aucun mot de passe n'est précisé dans le fichier de configuration. Pour des raisons de sécurité, on va indiquer le mot de passe en lignes de commandes de cette manière :
- # smbpasswd -w mot_de_passe_annuaire
- Samba va stocker ce mot de passe dans un autre fichier : secrets.tdb.
- Enfin, on prendra soin de créer le répertoire /samba/donnees et de donner les bons droits au groupe "utilisateurs"...
- # mkdir -p /samba/donnees
- # chgrp utilisateurs /samba/donnees
- # chmod 775 /samba/donnees
- ... Et de redémarrer Samba :
- # /etc/init.d/samba restart
- Ajout du compte Samba
- Essayons désormais d'ajouter user1 à nos utilisateurs Samba :
- # smbpasswd -a user1
- New SMB password:
- Retype new SMB password:
- Added user user1
- Notre utilisateur a été ajouté correctement ! Nous pouvons le vérifier en listant les utilisateurs
- connus de Samba :
- # pdbedit -L
- ……
- init_sam_from_ldap: Entry found for user: user1
- user1:10001:user1
- Test de connexion au partage
- Testons enfin la connexion à notre partage avec l'utilisateur
- # smbclient -U user1 //localhost/donnees
- Le test peut évidemment être réalisé depuis une machine Windows si vous préférez ! Dans tous les cas, l'utilisateur user1 a bien le droit de se connecter et peut créer un fichier dans le répertoire partagé !
- Browser LDAP (graphique)
- Installer phpLDAPadmin :
- # apt install phpLDAPadmin
- Se logger, avec un navigateur web, sur http://localhost/phpldapadmin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement