Outils pour utilisateurs

Outils du site


ldap:start

OpenLDAP

Introduction

La procédure qui suit a pour but:

  • d'installer un serveur LDAP,
  • initialiser la configuration de l'annuaire LDAP.

La particularité de cette procédure est la gestion des groupes:

  • les groupes seront gérés uniquement dans l'OU «groups»,
  • ils seront synchronisés par un script dans l'OU «groupOfNames»,
  • et disponibles sous forme d'attribus utilisateur dans l'OU «people».

Cette gestion de groupe permet de simplifier l'intégration d'applications. Certaines utilisent des groupes:

  • «à la sauce Posix» (OU «groups»),
  • d'autres «à la sauce AD» (OU «groupOfNames»),
  • et d'autres des attributs de groupe depuis l'OU «people» (attribut «memberOf).

⇒ vous disposerez de trois méthodes d'accès aux groupes tout en n'en gérant qu'une seule !

Installation

  • Installer OpenLdap et les outils ldap:
apt-get install slapd ldap-utils ldapvi
  • Configurer slapd:
dpkg-reconfigure slapd
  • Créer le fichier LDIF pour les OU «people», «groups» et «groupOfNames»
    • people ⇒ comptes utilisateurs
    • groups ⇒ groupes Posix
    • groupOfNames ⇒ groupes à la sauce AD
      • nécessaire pour l'overlay «MemberOf»
      • sera synchronisé par un script sur l'OU «groups»
init_OU.ldif
dn: ou=people,dc=sanglierhurlant,dc=fr
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=sanglierhurlant,dc=fr
objectClass: organizationalUnit
ou: groups

dn: ou=groupOfNames,dc=sanglierhurlant,dc=fr
objectClass: organizationalUnit
ou: groupOfNames
  • Appliquer le fichier LDIF:
ldapadd -x -D cn=admin,dc=sanglierhurlant,dc=fr -W -f init_OU.ldif
  • Créer le fichier LDIF pour l'acivation de l'overlay «memberOf»
memberOf.ldif
dn: cn=module{1},cn=config
cn: module{1}
objectClass: olcModuleList
olcModuleLoad: memberof
olcModulePath: /usr/lib/ldap

dn: olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
  • Appliquer le fichier LDIF:
ldapadd -Y EXTERNAL -H ldapi:/// -f memberOf.ldif

Synchonisation des OU group et groupOfnames

/usr/local/etc/ldap.cf
# LDAP
LDAP_HOST="127.0.0.1"
LDAP_USER="cn=admin,dc=sanglierhurlant,dc=fr"
LDAP_PASS="supermotdepasse"

LDAP_BASE="dc=sanglierhurlant,dc=fr"
LDAP_BASE_posixGroup="ou=groups,dc=sanglierhurlant,dc=fr"
LDAP_BASE_groupOfNames="ou=groupOfNames,dc=sanglierhurlant,dc=fr"
LDAP_BASE_people="ou=people,dc=sanglierhurlant,dc=fr"

# Utilisateur et groupe à ignorer
IGROUP="users"
IUSER="dummy"
/usr/local/sbin/sync-group2groupOfNames
#!/bin/bash

. /usr/local/etc/ldap.cf

#################################################################################################################
# Ajout et suppression groupes

touch /tmp/posixGroup
touch /tmp/groupOfNames

# Extraction posixGroup et groupOfNames
ldapsearch -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} -b ${LDAP_BASE_posixGroup} cn |grep '^cn:' |sort > /tmp/posixGroup
ldapsearch -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} -b ${LDAP_BASE_groupOfNames} cn |grep '^cn:' |sort > /tmp/groupOfNames

# Ajout groupes
G=$(diff /tmp/posixGroup /tmp/groupOfNames |grep '^< ' |sed 's/^< cn: //' |grep -v "^${IGROUP}$")
for g in ${G} ; do
	cat<<EOF |ldapadd -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} >/dev/null
dn: cn=${g},${LDAP_BASE_groupOfNames}
cn: ${g}
objectClass: top
objectClass: groupOfNames
member: uid=dummy
EOF
done

# Suppression groupes
G=$(diff /tmp/posixGroup /tmp/groupOfNames |grep '^> ' |sed 's/^> cn: //')
for g in ${G} ; do
	ldapdelete -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} cn=${g},${LDAP_BASE_groupOfNames} >/dev/null
done

rm /tmp/posixGroup
rm /tmp/groupOfNames

#################################################################################################################
# Ajout et suppression membres

# Extraction memberUid et member
PG=$(ldapsearch -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} -b ${LDAP_BASE_posixGroup} cn |grep '^cn:' |sed 's/^cn://')

for pg in ${PG} ; do

	touch /tmp/memberUid
	touch /tmp/member

	ldapsearch -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} -b ${LDAP_BASE_posixGroup} cn=${pg} memberUid |grep '^memberUid:' |sed 's/^memberUid: //' > /tmp/memberUid
	ldapsearch -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} -b ${LDAP_BASE_groupOfNames} cn=${pg} member |grep '^member:' |sed 's/^member: uid=// ; s/,.*//' |grep -v "^${IUSER}$" > /tmp/member	

	# Ajout membres
	M=$(diff /tmp/memberUid /tmp/member |grep '^< ' |sed 's/^< //')
	for m in ${M} ; do
		cat<<EOF |ldapmodify -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} >/dev/null
dn: cn=${pg},${LDAP_BASE_groupOfNames}
changetype: modify
add: member
member: uid=${m},${LDAP_BASE_people}
EOF
	done

	# Suppression membres
	M=$(diff /tmp/memberUid /tmp/member |grep '^> ' |sed 's/^> //')
	for m in ${M} ; do
		cat<<EOF |ldapmodify -x -h ${LDAP_HOST} -D ${LDAP_USER} -w ${LDAP_PASS} >/dev/null
dn: cn=${pg},${LDAP_BASE_groupOfNames}
changetype: modify
delete: member
member: uid=${m},${LDAP_BASE_people}
EOF
	done
	
	rm /tmp/memberUid
	rm /tmp/member

done

Gestion des comptes

  • Installer ldap-account-manager (LAM):
apt-get install ldap-account-manager
  • Pour modifier la conf de slapd à chaud:
ldapvi -h ldapi:/// -Y EXTERNAL -b cn=config
ldap/start.txt · Dernière modification: 16/11/2016 par laurent