Scribe AD » Historique » Version 71
« Précédent -
Version 71/91
(diff) -
Suivant » -
Version actuelle
Joël Cuissinat, 24/01/2018 10:41
Travaux des options 1 à 5¶
- Travaux des options 1 à 5
- Scribe membre de l'AD Seth avec eole-ad (option 1)
- Scribe AD (option 3)
- Remplacement du Client Scribe (Options 2, 3, 5)
- Application de policies : https://dev-eole.ac-dijon.fr/issues/22666
- Exécuter des scripts au démarrage de la machine/connexion des utilisateurs : https://dev-eole.ac-dijon.fr/issues/22665
- Mappage des partages : https://dev-eole.ac-dijon.fr/issues/22667
- Pouvoir lancer des commandes à distance : https://dev-eole.ac-dijon.fr/issues/22665
- Observation des postes : https://dev-eole.ac-dijon.fr/issues/22664
- Portage des actions EAD2 vers EAD3 (option 5)
- Faire fonctionner Scribe et Seth sur une seule machine (option 4)
- Gestion (directe) des comptes AD via l'EAD2 (options 2 et 3)
Tableau récapitulatif¶
- Option 1 : Scribe membre de l'AD Seth (eole-ad)
- Option 2 : Gestion des comptes du Seth avec l'EAD2
- Option 3 : Migration d'un Scribe NT en Scribe AD
- Option 4 : Portage des services du Scribe sur un Seth (OpenLDAP compris)
- Option 5 : Gestion des comptes du Seth + services Scribe avec l'EAD3
Scribe membre de l'AD Seth avec eole-ad (option 1)¶
Installer un Seth DC avec un Scribe membre (les comptes sont créés sur l'AD)" + intégration de LSC pour la synchronisation #22659
Actions¶
Utilisation d'un Scribe 2.6.2¶
- Utilisation de l'infra etb1 avec des postes joints au domaine NT de Scribe
- Configuration du serveur Amon
- Installation d'Eole-AD sur le serveur Scribe en production
- Modification du mot de passe admin dans l'EAD 2 de Scribe
- Retrait des postes du domaine NT
- Jonction de poste Windows au domaine AD de Seth
- manuelle AD OK
- joineole AD avec installation client Scribe KO
- joineole AD sans installation du client Scribe OK
- Connexion au domaine
- connexion OK
- accès aux partages GUEST KO
joineole
positionne des clés de registre qui posent problème[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters] "DNSNameResolutionRequired"=dword:00000000 "DomainCompatibilityMode"=dword:00000001
- Après modification des clés de registre OK
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters] "DNSNameResolutionRequired"=dword:00000001 "DomainCompatibilityMode"=dword:00000000
- Installation du client Scribe après jonction au domaine
- Sans modifier les attributs d'exécution des fichiers
/home/client_scribe/cliscribe-setup.exe
et/home/a/admin/perso/client/cliscribe-updater-setup.exe
KO - Ajout des attributs +x aux installeurs OK
- controle-VNC AD OK
- Sans modifier les attributs d'exécution des fichiers
- Modification de mots de passe dans l'EAD 2
- synchro sur AD OK
- Importation annuelle des bases dans l'EAD 2
- Synchro des comptes et des mots de passe vers AD OK
Problèmes rencontrés¶
- Configuration du serveur Amon pour la prise en charge d'un sous-domaine DNS #22731
- Incompatibilité de LSC avec Java 8 et 9 #22730
- La variable ad_server n'était pas initialisée pour la jonction au domaine, jonction au domaine de l'AD impossible #22704
- Problème de résolution des zones forward sur Amon #22707
- La demande de modification des mots au redémarrage du poste Windows ne fonctionne pas sur AD
- ClientScribe empêche l'accès aux partages GUEST
- Les postes n'exécutent plus les scripts ou exécutables présent sur les partages Scribe s'ils n'ont pas l'attribut +x
Pistes de travail et correctifs à prévoir¶
- Changement à faire sur le module Amon
Développement sur la partie DNS pour la prise en charge de sous-zones#22731
- Changement à faire sur le module Scribe
Faire fonctionner LSC avec Java 8 ou 9 ou backporter le paquet Java 7 et modifier la dépendance du paquet eole-ad#22730- Tester une migration avec un classicupgrade pour éviter la réinitialisation des MDP, la sortie des machines du domaine NT et la jonction au nouveau domaine.
- Utiliser un Scribe en production en mode NT
- effectuer l'opération classicupgrade sur le serveur Seth (instancié à confirmer lors des tests) :
https://wiki.samba.org/index.php/Migrating_a_Samba_NT4_Domain_to_Samba_AD_(Classic_Upgrade)#Upgrading_on_a_new_server - effectuer l'installation et la configuration de eole-ad sur Scribe en suivant la même procédure
- EAD 2
- Faire fonctionner le changement de mot de passe à l'ouverture de session
- JoinEole
- Ne pas positionner les clés de registre si on est sur AD pour permettre l'accès aux partages GUEST
- Résoudre le problème des fichiers exécutables sur les partages
Scribe AD (option 3)¶
Actions¶
Migration du Scribe NT vers Scribe AD¶
Procédure classicupgrade¶
La procédure classicupgrade nécessite des interventions complémentaires (pouvant être scriptées).
En partant d’un Scribe fonctionnel instancié avec import de comptes et un poste joint au domaine.
stopper et désactiver les services de samba en mode NT (smbd, nmbd, winbind),¶
systemctl stop nmbd systemctl stop smbd systemctl stop winbind systemctl disable nmbd systemctl disable smbd systemctl disable winbind
mettre à jour la version de samba (Optionnel pour des raison de tests)¶
A faire uniquement si vous voulez tester avec la version samba 4.7
cat >>/etc/apt/source.list.d/samba.list<<EOF deb [ arch=amd64 ] http://test-eole.ac-dijon.fr/samba samba-4.7 EOF
Maj-Auto CreoleCat -t smb.conf
installer les outils nécessaires :¶
apt-get install krb5-user ldb-tools
patcher nsswitch.conf.default, ldap.conf¶
--- distrib/nsswitch.conf.default 2017-05-15 11:18:44.000000000 +0200 +++ modif/nsswitch.conf.default 2018-01-09 15:12:53.260292570 +0100 @@ -7,8 +7,8 @@ ######################################################## # /etc/nsswitch.conf -%set %%active_winbind = %%getVar('activer_winbind', 'non') == 'oui' -%set %%active_ldap = %%getVar('ldap_nss', 'non') == 'oui' +%set %%active_winbind = True +%set %%active_ldap = False passwd: compat %slurp %if %%active_ldap
--- distrib/ldap.conf 2017-04-05 12:25:55.000000000 +0200 +++ modif/ldap.conf 2018-01-10 14:39:19.008000000 +0100 @@ -13,7 +13,7 @@ %if %%active_ldap == 'oui' host %%adresse_ip_ldap -base %%ldap_base_dn +base DC=etb1,DC=lan port %%ldap_port timelimit 10 bind_time_limit 10 @@ -23,8 +23,8 @@ pam_login_attribute uid pam_password md5 nss_map_attribute gecos displayName -nss_base_passwd %%ldap_base_dn?sub -nss_base_group %%ldap_base_dn?sub +nss_base_passwd DC=etb1,DC=lan?sub +nss_base_group DC=etb1,DC=lan?sub #fixe #1809 nss_initgroups_ignoreusers root %if %%ldap_tls == 'oui'
déplacer la configuration samba actuelle dans un répertoire de travail¶
mv /etc/samba/ /etc/samba.PDC/
renommer le fichier de configuration smb.conf de ce répertoire de travail,¶
mv /etc/samba.PDC/smb.conf /etc/samba.PDC/smb.PDC.conf
copier les bases de données de samba dans un sous-répertoire du répertoire de travail¶
mkdir /etc/samba.PDC/dbdir/ cp -p /var/lib/samba/private/secrets.tdb /etc/samba.PDC/dbdir/ cp -p /var/lib/samba/private/schannel_store.tdb /etc/samba.PDC/dbdir/ cp -p /var/lib/samba/private/passdb.tdb /etc/samba.PDC/dbdir/ #cp -p /var/lib/samba/var/lock/gencache_notrans.tdb /etc/samba.PDC/dbdir/ cp -p /var/lib/samba/group_mapping.tdb /etc/samba.PDC/dbdir/ cp -p /var/lib/samba/account_policy.tdb /etc/samba.PDC/dbdir/
lancer la commande samba-tool domain classicupgrade¶
realm=$(CreoleGet nom_domaine_local)
Pour samba 4.3.11 :
samba-tool domain classicupgrade --dbdir=/etc/samba.PDC/dbdir --use-xattrs=yes --realm=${realm^^} --dns-backend=SAMBA_INTERNAL /etc/samba.PDC/smb.PDC.conf
Pour samba 4.7 (on enlève l’option pour xattrs) :
samba-tool domain classicupgrade --dbdir=/etc/samba.PDC/dbdir --realm=${realm^^} --dns-backend=SAMBA_INTERNAL /etc/samba.PDC/smb.PDC.conf
créer le patch smb.conf à partir du nouveau fichier créer par samba-tool (bien renseigner le forwarder dns)¶
[global] realm = ETB1.LAN workgroup = DOMPEDAGO netbios name = SCRIBE # disable netbios legacy protocol, only port 445 ! disable netbios = yes smb ports = 445 vfs objects = acl_xattr map acl inherit = Yes store dos attributes = Yes winbind separator = / server role = active directory domain controller dns forwarder = 192.168.232.2 # active TLS (pour LDAPS et la maj des mot de passe ! tls enabled = yes tls keyfile = /var/lib/samba/private/tls/key.pem tls certfile = /var/lib/samba/private/tls/cert.pem tls cafile = /var/lib/samba/private/tls/ca.pem [netlogon] comment = Network Logon Service path = /home/sysvol/ac-test.fr/scripts read only = No guest ok = yes [sysvol] comment = Sysvol Service path = /home/sysvol read only = No guest ok = yes [homes] path = "/home/a/%u" comment = Home Directories read only = no root preexec = /usr/share/eole/sbin/create_adhome.sh "%u" "/home/a/" invalid users = nobody guest
installer le script pour la création du home¶
#!/bin/bash login=${1} homebasedir=${2} userdir="${homebasedir}/${login}" [ -d "${userdir}" ] && exit 0 mkdir -p "${userdir}" setfacl -Rbk "${userdir}" chmod 700 "${userdir}" setfacl -m u:${login}:rwx "${userdir}" setfacl -dm u:${login}:rwx "${userdir}"
stopper et désactiver le service slapd¶
systemctl stop slapd systemctl disable slapd
créer le compte reader¶
cat /root/.reader samba-tool user create reader
modifier les variables¶
Le base DN est maintenant du type DC=etb1,DC=lan.
Le compte reader est maintenant du type CN=reader,CN=Users,DC=etb1,DC=lan.
modifier les scripts de posttemplate 02-annuaire et 04-fichier et 00-annuaire en pretemplate¶
exit 0 ajouté en tête des fichiers pour ne pas faire les traitements.
activer et démarrer le service samba-ad-dc¶
systemctl enable samba-ad-dc systemctl start samba-ad-dc
reconfigure¶
stopper le service nmbd¶
Le service nmbd est démarré automatiquement par creole
systemctl stop nmbd
Points à traiter¶
service nmbd¶
Le service nmbd est géré par creole et sa désactivation manuelle n’est pas suffisante
variables creole¶
Les variables concernant l’annuaire sont verrouillées (même après import du fichier de configuration : valeurs par défaut).
Il n’est pas possible de modifier, hors des patchs, les valeurs pour le base DN, le protocole (ldaps), etc.
mise à jour samba¶
Conflit avec eole-fichier-common-pkg pour la fourniture du fichier smbd.service
configuration de samba¶
Vérifier que le fichier de configuration est adéquate pour un contrôleur de domaine avec des partages.
création des homes¶
Le client cherche à se connecter sur un partage nommé <REALM>\<user>.
Les clients doivent pouvoir remonter leur ancien home (<user>).
Pistes de travail pour la migration de l'annuaire¶
Proposition de méthode pour arriver a un Scribe AD en utilisant malgré-tout une
partie du travail déjà fait par l'équipe samba dans sa procédure
classicupgrade.
La procédure proprement dite n'est pas suffisante pour nous et l'utilisation
brute de l'outil samba non plus, cet outil réalise le provisionning AD et les
initialisations des fichiers db, hors pour bien faire nous avons besoin que samba ai
connaissance des schemas complémentaires du scribe (radius, eole, ent ...).
avant la migration des comptes. Pour lui ajouter les dit schémas il faut que
les fichiers db soient initialisées, donc l'utilisation de l'outil est
impossible. Par chance il utilise la lib python samaba, ce qui nous ouvre des
possibilités. Sans oublié que l'outil samba crée la configuration pour samba
a partir de l'ancienne et cette fonctionnalités ne nous ai pas vraiment utile.
Donc l'idée est de recréer une procédure de migration complête pour nos
besoins.
Il faut donc refaire le provisionning de l'AD ce qui est fait dans Seth donc
nous pouvons utiliser cette base de travail
Migrer les shemas complémentaires actuels au format lisible par samba4.
Créer un script de migration des comptes qui ajoute les schemas, utilise la
lib python samba4 pour migrer les comptes et ensuite mettre à jour les comptes
avec les attributs supplémentaires de l'ancien annuaire.
Remplacement du Client Scribe (Options 2, 3, 5)¶
Application de policies : https://dev-eole.ac-dijon.fr/issues/22666¶
Le portage des règles Esu en policies AD va être compliqué et aléatoire. Il existe beaucoup de manières d'implémenter ces règles (fichier INI, fichier XML, Register.pol, ...). Il va falloir tester règle par règle comment c'est généré via RSAT.
Si on veut générer les règles depuis Gaspacho il va falloir :
- connaître le format de chaque règle ;
- créer des "parseurs" pour chaque format ;
- écrire les fichiers ".gasp" pour que les règles soient prise en compte dans Gaspacho ;
- créer les GPO suivant les groupes gaspacho + associer les différents critères de sélection (utilisateur/machine) ;
- lancer les différents parseurs quand on applique les règles Gaspacho ;
Exécuter des scripts au démarrage de la machine/connexion des utilisateurs : https://dev-eole.ac-dijon.fr/issues/22665¶
L'exécution de script de démarrage est pris en compte par le système de GPO. Cela peut être des scripts "machines" (au démarrage ou arrêt du serveur) ou "utilisateurs" (à l'ouverture ou fermeture de la session).
Il faut un mécanisme pour générer les scripts comme c'était fait sous Scribe.
De plus nous n'avons pas réussi a lancer un Script diffusé via le partage netlogon. Il va falloir trouver un moyen de les diffuser.
Mappage des partages : https://dev-eole.ac-dijon.fr/issues/22667¶
Il s'agit d'un fichier XML par GPO possiblement générable.
Pouvoir lancer des commandes à distance : https://dev-eole.ac-dijon.fr/issues/22665¶
Il y a plusieurs pistes possible mais aucune n'a été testée avec succès.
Observation des postes : https://dev-eole.ac-dijon.fr/issues/22664¶
Nécessite l'exécution de commandes à distance.
Portage des actions EAD2 vers EAD3 (option 5)¶
https://dev-eole.ac-dijon.fr/issues/22725
https://dev-eole.ac-dijon.fr/issues/22670
https://dev-eole.ac-dijon.fr/issues/22727
https://dev-eole.ac-dijon.fr/issues/22726
https://dev-eole.ac-dijon.fr/issues/22733
https://dev-eole.ac-dijon.fr/issues/22728
Gestion des comptes et groupes¶
Le changement le plus important est le passage à une infrastructure séparant le contrôleur de domaine et le serveur de fichiers.
Les actions pour la gestion des comptes et groupes impactent le contrôleur de domaine et le serveur de fichier. Une action unique doit agir sur deux serveurs.
Le code doit être repensé pour permettre de déclencher des traitements répartis sur différents serveurs à partir d’une même action dans l’interface.
La piste de salt-syndic a été étudiée pour répartir les traitements composant une action sur les serveurs concernés.
Les applications externes¶
Pas de problème particulier pour les applications externes (CUPS, Sympa, EOP, etc.).
Faire fonctionner Scribe et Seth sur une seule machine (option 4)¶
Infrastructure¶
Utilisation d'une machine aca.dc1
Installation¶
Paquets¶
- Installation des paquets : eole-annuaire eole-scribe-backend eole-scribehorus eole-courier eole-mysql eole-antivirus eole-annuaire-pkg
- Installation des dépendances de eole-ad : lsc openjdk-8-jre libcrypt-saltedhash-perl
Dépôts Git¶
Du fait de nombreux conflits entre paquets, certains fichiers doivent être installés manuellement.
- Installation à la main par les dépôts Git : eole-fichier conf-scribe eole-commun eole-ad
git clone https://dev-eole.ac-dijon.fr/git/conf-scribe.git git clone https://dev-eole.ac-dijon.fr/git/eole-fichier.git git clone https://dev-eole.ac-dijon.fr/eole-ad.git
- Copies manuelles de fichiers
- eole-fichier :
./common/dicos/20_fichier.xml ./primaire/dicos/20_fichier-primaire.xml primaire/tmpl/smb-include_global.conf primaire/tmpl/smbldap.conf primaire/tmpl/smbldap_bind.conf
- eole-ad :
make install
- eole-fichier :
Nettoyage¶
- 20_fichier-primaire.xml : commenter les balises <package> et <file> sauf smbldap.conf et smbldap_bind.conf
- 25_smb_ad.xml : commenter la balise <file> krb5.conf, restaurer le template krb5.conf fourni par le paquet eole-ad-dc (
apt-get install --reinstall eole-ad-dc
)
Variable en double¶
Entre eole-ad-dc et eole-ad, 2 variables différentes portent le même nom !
Renommer la variable ad_domain qui est en double en provenance d'eole-ad :- dicos/26_eolead.xml
- distrib/lsc.xml *3
- distrib/smbldap_bind.conf *2
Hack DNS¶
Supprimer la redéfinition de la variable adresse_ip_dns et sa balise auto calc_multi_val dans
/usr/share/eole/creole/dicos/26_eolead.xml
Hack LDAP PORT¶
Le serveur AD utilise déjà le port ldap standard (389), il faut modifier le port du service OpenLDAP (en 390 par exemple).
La modification de la variable ldap_port n'est pas suffisante, plusieurs templates doivent être adaptés :- /usr/share/eole/creole/distrib/smbldap.conf
- slaveLDAP="ldap://%%adresse_ip_ldap:%%ldap_port/"
- masterLDAP="ldap://%%adresse_ip_ldap:%%ldap_port/"
- /usr/share/eole/creole/distrib/lsc.xml
- /usr/share/eole/creole/distrib/default.slapd
- /usr/lib/python2.7/dist-packages/scribe/eoleldap.py (ligne 73)
self.connexion = ldap.open(self.serveur, 390)
- /usr/share/eole/posttemplate/02-annuaire
- ajout de "-h 127.0.0.1:390" à la commande ldappasswd
- /usr/share/eole/diagnose/21-annuaire
- ajout de "-h 127.0.0.1:390" aux commandes ldapsearch
- /usr/share/eole/creole/distrib/ldap.conf
- host 127.0.0.1:390
Note : si on configure la variable "port" de ce fichier, ça ne marche pas...
Hack sur la jonction au domaine et l'initialisation lsc¶
- /usr/share/eole/posttemplate/05-eolead
- le serveur ne peut être membre de son propre domaine, une partie du code doit être commentée
- la synchro lsc initiale est appelée alors que le service samba-ad-dc est stoppé (et potentiellement non initialisé), un contournement possible est de déplacer ce script en postservice. Dans ce cas, il faut redémarrer le service lsc sinon ce dernier n'a pas les bons mots de passe (FIXME)
Configuration¶
Principaux éléments du config.eol utilisé :
"activer_clam":{"owner":"gen_config","val":"non"}, "activer_nginx_web":{"owner":"gen_config","val":"non"}, "activer_sso":{"owner":"gen_config","val":"non"}, "ad_additional_dc":{"owner":"gen_config","val":"non"}, "ad_address":{"owner":"gen_config","val":"192.168.0.5"}, "ad_ldaps":{"owner":"gen_config","val":"oui"}, "ad_server":{"owner":"gen_config","val":"dc1"}, "ad_server_role":{"owner":"gen_config","val":"controleur de domaine"}, "ad_user":{"owner":"gen_config","val":"Administrator"}, "adresse_ip_dns":{"owner":"gen_config","val":["192.168.232.2"]}, "adresse_ip_eth0":{"owner":"gen_config","val":"192.168.0.5"}, "ldap_port":{"owner":"gen_config","val":390}, "libelle_etab":{"owner":"gen_config","val":"aca"}, "nom_academie":{"owner":"gen_config","val":"ac-test"}, "nom_domaine_local":{"owner":"gen_config","val":"ac-test.fr"}, "nom_machine":{"owner":"gen_config","val":"dc1"}, "numero_etab":{"owner":"gen_config","val":"0000000A"}, "serveur_ntp":{"owner":"basique","val":["hestia.eole.lan"]}, "smb_netbios_name":{"owner":"gen_config","val":"ac-test"}, "smb_workgroup":{"owner":"gen_config","val":"pedago"},Variables calculées :
- ad_domain : "ac-test"
- ad_domain2 (pour eole-ad) : "ac-test.fr"
Il faut également exécuter la procédure d'intégration la CA du module Seth au Java Keystore décrite dans la doc
Utilisation de l'EAD2¶
- Création de groupes
- comme nous n'avions pas installé eole-sympa, nous avons du créer le fichier
/etc/mail/sympa/aliases
à la main pour les groupes avec liste de diffusion obligatoire - la création d'un groupe avec partage entraîne le re-démarrage du service samba (NT) qui est désactivé (le commenter)
- comme nous n'avions pas installé eole-sympa, nous avons du créer le fichier
- Création d'un élève
- Le compte élève a été créé dans les deux annuaires sans erreur particulière
Gestion (directe) des comptes AD via l'EAD2 (options 2 et 3)¶
Remplacement de l'appel à smbldap-useradd
par samba-tool user create
¶
Objectif du POC : Créer un enseignant directement dans AD à l'aide de la commande "backend" suivante :
/usr/share/eole/backend/creation-prof.py -u <login> -m "Eole12345\$" -p Prénom -f NomLibrairies python concernées :
- /usr/lib/python2.7/dist-packages/scribe/enseignants.py
- /usr/lib/python2.7/dist-packages/scribe/eoleuser.py
- méthode _add : remplacement de l'utilisation de smbldap-tools par samba-tools dans "if self.has_samba:"
Arguments reçus par la fonction :{'syncpassword': True, 'disciplines': '', 'change_pwd': False, 'int_id': '', 'mail_acad': '', 'profil': '1', 'etab': None, 'mail': 'internet', 'patronyme': '', 'nom': 'Nom', 'shell': False, 'quota': '0', 'entpersonjointure': '', 'groups': [], 'date': '00000101', 'password': 'Eole12345$', 'prenom': 'Pr\xc3\xa9nom', 'admin': False, 'classe': '', 'entlogin': True, 'civilite': '1', 'login': 'prof4'}
Commande smbldap appelée par la fonction :
/usr/sbin/smbldap-useradd -a -A 1 -D U: -H U -o ou=local,ou=personnels -s /bin/false -d /home/p/prof4 -C \\\\ac-test\\prof4\\perso -F -g professeurs -G DomainUsers <login>
Commande samba-tool "équivalente" :
samba-tool user create <login> "Eole12345\$" --use-username-as-cn --given-name=Prénom --surname=Nom
Code de génération de la commande pour la librairie Scribe :
cmd = ['samba-tool', 'user', 'create', args['login'], args['password'], "--use-username-as-cn", "--given-name={}".format(args['prenom']), "--surname={}".format(args['nom'])]
ATTENTION : L'option : --use-username-as-cn est importante si on veut être sûr que le CN soit <login>.
Autres options disponibles à étudier :- --must-change-at-next-login
- --userou='OU=OrgUnit'
- --rfc2307-from-nss & [--nis-domain=samdom --unix-home=/home/User5 --uid-number=10005 --login-shell=/bin/false --gid-number=10000] : compatibilité Unix ?
- --profile-path/--script-path/--home-drive/--home-directory
- --description/--mail-address
Gestion de l'annuaire AD avec python-ldap¶
Objectif du POC : Créer une libraire python permettant de gérer les attributs ldap des utilisateurs
# -*- coding: utf-8 -*-
import ldap
adbase = "DC=ac-test,DC=fr"
binddn = "CN=Administrator,CN=Users,DC=ac-test,DC=fr"
passwd = "Eole12345!"
def connect():
# OPT_REFERRALS=0 is mandatory for AD
ldap.set_option(ldap.OPT_REFERRALS, 0)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
connexion = ldap.initialize('ldaps://localhost')
connexion.simple_bind_s(binddn, passwd)
return connexion
def get_attr(user, attr):
"""
Renvoie la valeur de l'attribut attr
pour l'utilisateur AD user
"""
connexion = connect()
res = connexion.search(adbase, ldap.SCOPE_SUBTREE,
'(samaccountname={0})'.format(user),
[attr])
try:
return connexion.result(res, 60)[1][0][1][attr][0]
except TypeError:
return
def set_attr(user, attr, value):
"""
Modifie la valeur de l'attribut attr
pour l'utilisateur AD user
"""
connexion = connect()
if value == '':
value = []
user_dn = "CN={},CN=Users,{}".format(user, adbase)
data = [((ldap.MOD_REPLACE, attr, value))]
connexion.modify(user_dn, data)
def delete(user):
"""
suppression d'un utilisateur AD
"""
connexion = connect()
user_dn = "CN={},CN=Users,{}".format(user, adbase)
connexion.delete(user_dn)