Advertisement
Guest User

Untitled

a guest
Apr 27th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.82 KB | None | 0 0
  1. TP OpenLdap
  2.  
  3. Installation
  4.  
  5. Modifier le fichier /etc/apt/sources.list
  6.  
  7. deb http://http.debian.net/debian jessie main
  8. deb-src http://http.debian.net/debian jessie main
  9.  
  10. deb http://http.debian.net/debian jessie-updates main
  11. deb-src http://http.debian.net/debian jessie-updates main
  12.  
  13. deb http://security.debian.org/ jessie/updates main
  14. deb-src http://security.debian.org/ jessie/updates main
  15.  
  16. # apt update
  17.  
  18. 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 :
  19. # apt install slapd ldap-utils
  20. (On vous demande le mot de passe associé à l'annuaire)
  21.  
  22. Les outils fournis par OpenLDAP
  23.  
  24. Le projet OpenLDAP implémente un serveur LDAP, mais également les commandes clientes permettant de manipuler des informations contenues dans l'annuaire.
  25.  
  26. Les commandes liées au serveur
  27.  
  28. /usr/sbin/slapd
  29. /usr/sbin/slurpd
  30. /usr/sbin/slapadd
  31. /usr/sbin/slapcat
  32. /usr/sbin/slapdn
  33. /usr/sbin/slapindex
  34. /usr/sbin/slappasswd
  35. /usr/sbin/slaptest
  36.  
  37. 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.
  38.  
  39. Démons :
  40. • slapd : le démon OpenLDAP !
  41. • slurpd : le démon de réplication
  42.  
  43. Commandes de manipulation de la base (backend) gérée par OpenLDAP
  44. • slapindex : crée les index au sein de la base
  45. • slapcat : effectue un dump (une copie intégrale) de la base
  46. • slapadd : ajoute des entrées LDIF dans la base
  47. • slappasswd : utilitaire de conversion de mots de passe
  48.  
  49. Commandes de test/validation :
  50. • slaptest : teste la validité du fichier de configuration slapd.conf
  51. • slapdn : teste la conformité d'un DN donné en ligne de commande
  52.  
  53. Les commandes clientes
  54.  
  55. /usr/bin/ldapsearch
  56. /usr/bin/ldapmodify
  57. /usr/bin/ldapdelete
  58. /usr/bin/ldapmodrdn
  59. /usr/bin/ldappasswd
  60. /usr/bin/ldapwhoami
  61. /usr/bin/ldapcompare
  62. /usr/bin/ldapadd
  63.  
  64. 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.
  65. Il existe d'autres clients, graphiques notamment.
  66.  
  67. • ldapsearch : effectue une recherche au sein de l'annuaire
  68. • ldapadd : ajoute une entrée
  69. • ldapdelete : supprime une entrée
  70. • ldapmodify : modifie une entrée (ajoute/suppr. un attribut, ajoute/suppr. une entrée, ...)
  71. • ldapmodrdn : modifie le rdn d'une entrée (renomme une entrée)
  72. • ldappasswd : modifie le mot de passe d'une entrée LDAP
  73. • ldapwhoami : affiche avec quel utilisateur le binding a eu lieu
  74. • ldapcompare : permet de comparer l'attribut d'une entrée à une valeur spécifiée
  75.  
  76. Configuration du serveur
  77.  
  78. La configuration du serveur OpenLDAP (le démon slapd) s'effectue après l’installation :
  79.  
  80. # dpkg-reconfigure -plow slapd
  81. (On vous demande le mot de passe associé à l'annuaire, ainsi que le suffix DNS : meritXX.local, le reste mettre par défaut)
  82.  
  83.  
  84. Contrôle d’accès
  85.  
  86. Créer un fichier access.ldif (dans /root)
  87.  
  88. # ACLs de notre premiere arborescence :
  89.  
  90. dn: olcDatabase={1}mdb,cn=config
  91. changetype: modify
  92. add: olcAccess
  93. olcAccess: {0}to attrs=userPassword
  94. by dn="cn=admin,dc=meritXX,dc=local" write
  95. by self write
  96. by * none
  97. olcAccess: {1}to *
  98. by dn="cn=admin,dc=meritXX,dc=local" write
  99. by * read
  100.  
  101.  
  102. # ldapmodify -Y EXTERNAL -H ldapi:/// -f access.ldif
  103.  
  104. Dans le Rapport : expliquer ce que font ces ACL (ligne par ligne)
  105.  
  106.  
  107. Initialiser l'annuaire
  108. 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.
  109.  
  110. 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.
  111.  
  112. Fichier LDIF à insérer (fichier.ldif) :
  113.  
  114. #dn: dc=meritXX,dc=local
  115. #objectClass: ,dcObject
  116. #objectClass: organization
  117. #dc: meritXX
  118. #o: meritXX
  119.  
  120. dn: ou=users,dc=meritXX,dc=local
  121. objectClass: top
  122. objectClass: organizationalUnit
  123. ou: users
  124.  
  125. dn: ou=groups,dc=meritXX,dc=local
  126. objectClass: top
  127. objectClass: organizationalUnit
  128. ou: groups
  129.  
  130. dn: cn=utilisateurs,ou=groups,dc=meritXX,dc=local
  131. objectClass: posixGroup
  132. cn: utilisateurs
  133. gidNumber: 2000
  134.  
  135. dn: uid=user1,ou=users,dc=meritXX,dc=local
  136. objectClass: account
  137. objectClass: posixAccount
  138. cn: user1
  139. uid: user1
  140. uidNumber: 10001
  141. gidNumber: 2000
  142. homeDirectory: /home/user1
  143. userPassword: user1
  144. loginShell: /bin/sh
  145. description: user1
  146.  
  147. dn: uid=user2,ou=users,dc=meritXX,dc=local
  148. objectClass: account
  149. objectClass: posixAccount
  150. cn: user2
  151. uid: user2
  152. uidNumber: 10002
  153. gidNumber: 2000
  154. homeDirectory: /home/user2
  155. userPassword: user2
  156. loginShell: /bin/sh
  157. description: user2
  158.  
  159. Dans le Rapport : Faire un schéma ou expliquer l’arborescence de notre annuaire
  160.  
  161.  
  162.  
  163. Insertion :
  164. ldapadd -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f fichier.ldif
  165.  
  166.  
  167. Rechercher une entrée : ldapsearch
  168. La commande ldapsearch permet d'effectuer une recherche au sein de l'annuaire. Voici sa syntaxe :
  169. ldapsearch -x -H ldap://<serveur> -b <base> [-s portée] [filtre] [attributs]
  170.  
  171. Exemples à tester:
  172. On recherche tous les uid à partir de la racine de l'annuaire :
  173. ldapsearch -x -H ldap://localhost -b "dc=meritXX,dc=local" "(uid=*)"
  174. On recherche toutes les entrées ayant un gidNumber égal à 2000 :
  175. ldapsearch -x -H ldap://localhost -b "dc= meritXX,dc=local" "(gidNumber=2000)"
  176.  
  177. ldapsearch -x -H ldap://localhost -b "dc= meritXX,dc=local" "(&(gidNumber=2000) (objectClass=posixAccount))" homeDirectory
  178.  
  179. Dans le Rapport : indiquer la ligne de commande qui permet d’afficher les attributs de l’utilisateur « user1 »
  180.  
  181. Supprimer une entrée : ldapdelete
  182. La suppression d'une entrée se fait par la commande ldapdelete. Voici sa syntaxe :
  183. ldapdelete -W -D <binddn> -x -H ldap://<serveur> <dn>
  184.  
  185. Suppression d'un utilisateur :
  186. ldapdelete -x -H ldap://localhost -W -D "cn=admin,dc=meritXX,dc=local" "uid=user2,ou=users,dc=meritXX,dc=local"
  187.  
  188. Modifier une entrée : ldapmodify
  189.  
  190. Elle va permettre d'effectuer toutes sortes d'opérations, y compris l'ajout et la suppression d'entrées.
  191. Sa syntaxe est la suivante :
  192. ldapmodify -W -D <binddn> -x -H ldap://<serveur> -f <fichier.ldif>
  193.  
  194. Ajouter une entrée :
  195.  
  196. Ajoutons un utilisateur "user3" (user3.ldif)
  197. dn: uid=user3,ou=users,dc=meritXX,dc=local
  198. changetype: add
  199. objectClass: account
  200. objectClass: posixAccount
  201. cn: user3
  202. uid: user3
  203. uidNumber: 10003
  204. gidNumber: 2000
  205. homeDirectory: /home/user3
  206. userPassword: user3
  207. loginShell: /bin/sh
  208. description: user3
  209.  
  210. Présence d'un attribut "changetype" en plus de chacun des attributs de l'entrée que nous souhaitons ajouter.
  211. Application de la modification :
  212. ldapmodify -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f user3.ldif
  213.  
  214.  
  215. Ajouter un attribut :
  216. L'ajout d'un attribut s'effectue par le changetype "modify" et par un nouvel attribut "add" qui précise quel attribut ajouter.
  217.  
  218. dn: uid=user3,ou=users,dc=meritXX,dc=local
  219. changetype: modify
  220. add: description
  221. description: chef
  222.  
  223. Modifier un attribut :
  224. 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.
  225.  
  226. dn: uid=user3,ou=users,dc=meritXX,dc=local
  227. changetype: modify
  228. replace: description
  229. description: grand chef
  230.  
  231. Supprimer un attribut :
  232. La suppression d'attribut s'effectue via le changetype "modify" et l'utilisation d'un nouvel attribut : "delete".
  233.  
  234. dn: uid=user3,ou=users,dc=meritXX,dc=local
  235. changetype: modify
  236. delete: description
  237. description: grand chef
  238.  
  239. Supprimer une entrée :
  240. 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".
  241.  
  242. dn: uid=user3,ou=users,dc=meritXX,dc=local
  243. changetype: delete
  244.  
  245. SAMBA
  246.  
  247. Préparation de l'annuaire
  248. 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.
  249.  
  250. Effaçons tout d'abord les anciennes données de notre annuaire :
  251. # /etc/init.d/slapd stop
  252. # rm -f /var/lib/ldap/*
  253. # /etc/init.d/slapd start
  254. Ajoutons ensuite l'arborescence de base que nous avons présentée (fichier base.ldif) :
  255. dn: dc=meritXX,dc=local
  256. objectClass: dcObject
  257. objectClass: organization
  258. dc: meritXX
  259. o: meritXX
  260. description: meritXX
  261.  
  262. dn: ou=users,dc=meritXX,dc=local
  263. objectClass: top
  264. objectClass: organizationalUnit
  265. ou: users
  266.  
  267. dn: ou=groups,dc=meritXX,dc=local
  268. objectClass: top
  269. objectClass: organizationalUnit
  270. ou: groups
  271.  
  272. dn: ou=machines,dc=meritXX,dc=local
  273. objectClass: top
  274. objectClass: organizationalUnit
  275. ou: machines
  276.  
  277. ldapadd -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f base.ldif
  278.  
  279. Samba a besoin d'un compte POSIX pour pouvoir créer un compte Samba associé.
  280. 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".
  281. Nsswitch (Name Service Switch) permet de rediriger les requêtes de noms vers des sources très diverses.
  282. 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...).
  283. 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.
  284.  
  285. Installation de libnss-ldap
  286. Nous allons commencer par installer le plugin (la librairie) qui permet à nsswitch d'utiliser un annuaire LDAP comme source de données
  287.  
  288. apt install libnss-ldap
  289.  
  290. Configuration de libnss-ldap
  291. La librairie est installée, il faut maintenant la configurer pour lui indiquer notamment sur quel serveur se trouvent les comptes.
  292. La configuration de la librairie se trouve dans le fichier /etc/libnss-ldap.conf :
  293.  
  294. # Emplacement du serveur LDAP à utiliser
  295. host 127.0.0.1
  296. port 389
  297. # Racine de notre annuaire
  298. base dc=meritXX,dc=local
  299. # Version du protocole a utiliser
  300. ldap_version 3
  301. bindpw “mot de passe admin LDAP”
  302. rootbinddn cn=admin,dc=meritXX,dc=local
  303. # Portee de la recherche par defaut
  304. scope sub
  305. # Emplacement des comptes
  306. nss_base_passwd dc=meritXX,dc=local?sub
  307. nss_base_group ou=groups,dc=meritXX,dc=local?one
  308.  
  309. 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).
  310. 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".
  311. 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".
  312. Remarquez que dans notre exemple, aucun compte n'est utilisé pour nous connecter à l'annuaire.
  313.  
  314. Utilisation de libnss-ldap dans nsswitch
  315. Une fois notre librairie configurée, il faut activer la recherche dans LDAP au niveau de nsswitch.
  316. Ceci se fait très simplement en modifiant le fichier /etc/nsswitch.conf :
  317.  
  318. passwd: compat ldap
  319. group: compat ldap
  320. ………..
  321.  
  322. 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.
  323.  
  324. reboot
  325.  
  326. Ajout d'un compte
  327. Testons notre configuration en ajoutant deux objets à l'annuaire : un groupe "utilisateurs" et un utilisateur "user1" appartenant à ce groupe (fichier utilisateur.ldif) :
  328. dn: cn=utilisateurs,ou=groups,dc=meritXX,dc=local
  329. objectClass: posixGroup
  330. cn: utilisateurs
  331. gidNumber: 2000
  332.  
  333. dn: uid=user1,ou=users,dc=meritXX,dc=local
  334. objectClass: account
  335. objectClass: posixAccount
  336. cn: user1
  337. uid: user1
  338. uidNumber: 10001
  339. gidNumber: 2000
  340. homeDirectory: /home/user1
  341. userPassword: user1
  342. loginShell: /bin/sh
  343. description: user1
  344.  
  345. ldapadd -W -D "cn=admin,dc=meritXX,dc=local" -x -H ldap://localhost -f utilisateur.ldif
  346.  
  347. Test de la reconnaissance du compte
  348. 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 :
  349. # getent group
  350. [...]
  351. utilisateurs:x:2000:
  352. # getent passwd
  353. [...]
  354. User1:x:10001:2000:user1:/home/user1:/bin/sh
  355. # id user1
  356. uid=10001(user1) gid=2000(utilisateurs) groups=2000(utilisateurs)
  357. Notre groupe et notre utilisateur apparaissent parmi la liste de ceux connus ! De plus,
  358. l'utilisateur appartient bien au groupe "utilisateurs" !
  359.  
  360.  
  361. Connexion de Samba à l'annuaire
  362. 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.
  363.  
  364. apt install samba samba-doc smbclient
  365.  
  366. Copie du schema Samba
  367.  
  368. 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 :
  369.  
  370. # cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema
  371. # cd /etc/ldap/schema ; gunzip samba.schema.gz
  372.  
  373.  
  374. Créer un fichier smb.conf :
  375.  
  376. include /etc/ldap/schema/core.schema
  377. include /etc/ldap/schema/cosine.schema
  378. include /etc/ldap/schema/nis.schema
  379. include /etc/ldap/schema/inetorgperson.schema
  380. include /etc/ldap/schema/samba.schema
  381.  
  382. Convertir ce fichier en fichier LDIF :
  383.  
  384. # mkdir /root/slapd.d
  385. # slaptest -f smb.conf -F /root/slapd.d/
  386.  
  387. Ajouter le schema Samba à la configuration :
  388.  
  389. # cp "/root/slapd.d/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/slapd.d/cn=config/cn=schema"
  390. # chown openldap: '/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif'
  391. # /etc/init.d/slapd stop
  392. # /etc/init.d/slapd start
  393.  
  394. Verification:
  395.  
  396. # ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
  397.  
  398. dn: cn=schema,cn=config
  399.  
  400. dn: cn={0}core,cn=schema,cn=config
  401.  
  402. dn: cn={1}cosine,cn=schema,cn=config
  403.  
  404. dn: cn={2}nis,cn=schema,cn=config
  405.  
  406. dn: cn={3}inetorgperson,cn=schema,cn=config
  407.  
  408. dn: cn={4}samba,cn=schema,cn=config
  409.  
  410.  
  411. Configuration de Samba
  412. 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
  413. simple de données :
  414. [global]
  415. # Identification Netbios
  416. workgroup = Workgroup
  417. netbios name = debian
  418. # Controle de domaine desactive
  419. os level = 40
  420. domain logons = no
  421. domain master = no
  422. local master = no
  423. # Base de donnee de comptes
  424. passdb backend = ldapsam:ldap://localhost
  425. ldap admin dn = "cn=admin,dc=meritXX,dc=local"
  426. ldap ssl = off
  427. ldap delete dn = no
  428. ldap user suffix = ou=users
  429. ldap machine suffix = ou=machines
  430. ldap group suffix = ou=groups
  431. ldap suffix = dc=meritXX,dc=local
  432. # Authentification via la base de comptes locale
  433. security = user
  434. # Securite
  435. encrypt passwords = yes
  436. # Gestion des logs
  437. log file = /var/log/samba/%m.log
  438. log level = 2
  439. # Partage accessible uniquement au groupe sambausers
  440. [donnees]
  441. path = /samba/donnees
  442. comment = Partage Donnees
  443. writeable = yes
  444. browsable = yes
  445. guest ok = no
  446. valid users = @utilisateurs
  447.  
  448. 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.
  449. 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 :
  450. # smbpasswd -w mot_de_passe_annuaire
  451. Samba va stocker ce mot de passe dans un autre fichier : secrets.tdb.
  452. Enfin, on prendra soin de créer le répertoire /samba/donnees et de donner les bons droits au groupe "utilisateurs"...
  453. # mkdir -p /samba/donnees
  454. # chgrp utilisateurs /samba/donnees
  455. # chmod 775 /samba/donnees
  456. ... Et de redémarrer Samba :
  457. # /etc/init.d/samba restart
  458.  
  459. Ajout du compte Samba
  460. Essayons désormais d'ajouter user1 à nos utilisateurs Samba :
  461. # smbpasswd -a user1
  462. New SMB password:
  463. Retype new SMB password:
  464. Added user user1
  465. Notre utilisateur a été ajouté correctement ! Nous pouvons le vérifier en listant les utilisateurs
  466. connus de Samba :
  467. # pdbedit -L
  468. ……
  469. init_sam_from_ldap: Entry found for user: user1
  470. user1:10001:user1
  471.  
  472. Test de connexion au partage
  473. Testons enfin la connexion à notre partage avec l'utilisateur
  474. # smbclient -U user1 //localhost/donnees
  475.  
  476. 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é !
  477.  
  478.  
  479.  
  480.  
  481. Browser LDAP (graphique)
  482.  
  483. Installer phpLDAPadmin :
  484. # apt install phpLDAPadmin
  485.  
  486. Se logger, avec un navigateur web, sur http://localhost/phpldapadmin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement