Projet

Général

Profil

Scribe AD » Historique » Version 85

Joël Cuissinat, 13/02/2018 10:05

1 35 Gérald Schwartzmann
h1. Travaux des options 1 à 5
2 35 Gérald Schwartzmann
3 1 Benjamin Bohard
{{>toc}}
4 34 Gérald Schwartzmann
5 82 Joël Cuissinat
h2. Liens vers les autres études
6 82 Joël Cuissinat
7 1 Benjamin Bohard
* Classic Upgrade https://dev-eole.ac-dijon.fr/projects/scribe/wiki/Scribe_AD_2srv_classic_upg
8 84 Joël Cuissinat
* Travaux sur la modification du port ldap local : https://dev-eole.ac-dijon.fr/projects/scribe/wiki/Port_LDAP
9 83 Joël Cuissinat
* Scribe + eole-ad + eole-ad-dc : https://dev-eole.ac-dijon.fr/projects/scribe/wiki/Scribe+eole-ad+eole-ad-dc
10 85 Joël Cuissinat
* Scribe + Seth dans un conteneur LXC : https://dev-eole.ac-dijon.fr/projects/scribe/wiki/Scribe+eole-ad+Seth-conteneur
11 82 Joël Cuissinat
12 58 Benjamin Bohard
h2. Tableau récapitulatif
13 58 Benjamin Bohard
14 66 Joël Cuissinat
!{width:900px}tableau_options_seth.png!
15 58 Benjamin Bohard
16 78 Gérald Schwartzmann
* [[Scribe_AD#Scribe-membre-de-lAD-Seth-avec-eole-ad-option-1|Option 1 : Scribe membre de l'AD Seth (eole-ad)]]
17 62 Joël Cuissinat
* Option 2 : Gestion des comptes du Seth avec l'EAD2
18 62 Joël Cuissinat
* Option 3 : Migration d'un Scribe NT en Scribe AD
19 76 Gérald Schwartzmann
* [[Scribe_AD#Faire-fonctionner-Scribe-et-Seth-sur-une-seule-machine-option-4|Option 4 : Portage des services du Scribe sur un Seth (OpenLDAP compris)]]
20 77 Gérald Schwartzmann
* [[Scribe_AD#Portage-des-actions-EAD2-vers-EAD3-option-5|Option 5 : Gestion des comptes du Seth + services Scribe avec l'EAD3]]
21 77 Gérald Schwartzmann
22 61 Joël Cuissinat
h1. Scribe membre de l'AD Seth avec eole-ad (option 1)
23 34 Gérald Schwartzmann
24 40 Gérald Schwartzmann
Installer un Seth DC avec un Scribe membre (les comptes sont créés sur l'AD)" + intégration de LSC pour la synchronisation #22659
25 40 Gérald Schwartzmann
26 34 Gérald Schwartzmann
h2. Actions
27 34 Gérald Schwartzmann
28 34 Gérald Schwartzmann
h3. Utilisation d'un Scribe 2.6.2
29 34 Gérald Schwartzmann
30 36 Gérald Schwartzmann
* Utilisation de l'infra etb1 avec des postes joints au domaine NT de Scribe
31 1 Benjamin Bohard
* Configuration du serveur Amon
32 36 Gérald Schwartzmann
* Installation d'Eole-AD sur le serveur Scribe en production
33 36 Gérald Schwartzmann
* Modification du mot de passe admin dans l'EAD 2 de Scribe
34 36 Gérald Schwartzmann
* Retrait des postes du domaine NT
35 36 Gérald Schwartzmann
* Jonction de poste Windows au domaine AD de Seth
36 47 Fabrice Barconnière
** manuelle AD %{color:green}OK%
37 49 Fabrice Barconnière
** joineole AD avec installation client Scribe %{color:red}KO%
38 49 Fabrice Barconnière
** joineole AD sans installation du client Scribe %{color:green}OK%
39 49 Fabrice Barconnière
* Connexion au domaine
40 49 Fabrice Barconnière
** connexion %{color:green}OK%
41 49 Fabrice Barconnière
** accès aux partages GUEST %{color:red}KO%
42 49 Fabrice Barconnière
*** @joineole@ positionne des clés de registre qui posent problème
43 49 Fabrice Barconnière
<pre>
44 52 Fabrice Barconnière
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters]
45 49 Fabrice Barconnière
"DNSNameResolutionRequired"=dword:00000000
46 52 Fabrice Barconnière
"DomainCompatibilityMode"=dword:00000001
47 49 Fabrice Barconnière
</pre>
48 49 Fabrice Barconnière
*** Après modification des clés de registre %{color:green}OK%
49 49 Fabrice Barconnière
<pre>
50 52 Fabrice Barconnière
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters]
51 49 Fabrice Barconnière
"DNSNameResolutionRequired"=dword:00000001
52 49 Fabrice Barconnière
"DomainCompatibilityMode"=dword:00000000
53 49 Fabrice Barconnière
</pre>
54 49 Fabrice Barconnière
* Installation du client Scribe après jonction au domaine
55 49 Fabrice Barconnière
** 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@ %{color:red}KO%
56 49 Fabrice Barconnière
** Ajout des attributs +x aux installeurs %{color:green}OK%
57 44 Fabrice Barconnière
** controle-VNC AD %{color:green}OK%
58 47 Fabrice Barconnière
* Modification de mots de passe dans l'EAD 2
59 51 Fabrice Barconnière
** synchro sur AD %{color:green}OK%
60 47 Fabrice Barconnière
* Importation annuelle des bases dans l'EAD 2
61 50 Fabrice Barconnière
** Synchro des comptes et des mots de passe vers AD %{color:green}OK%
62 44 Fabrice Barconnière
63 36 Gérald Schwartzmann
h3. Problèmes rencontrés
64 1 Benjamin Bohard
65 46 Fabrice Barconnière
* Configuration du serveur Amon pour la prise en charge d'un sous-domaine DNS #22731
66 53 Fabrice Barconnière
* Incompatibilité de LSC avec Java 8 et 9 #22730
67 36 Gérald Schwartzmann
* La variable ad_server n'était pas initialisée pour la jonction au domaine, jonction au domaine de l'AD impossible #22704
68 36 Gérald Schwartzmann
* Problème de résolution des zones forward sur Amon #22707
69 39 Gérald Schwartzmann
* La demande de modification des mots au redémarrage du poste Windows ne fonctionne pas sur AD
70 39 Gérald Schwartzmann
* ClientScribe empêche l'accès aux partages GUEST
71 39 Gérald Schwartzmann
* 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
72 36 Gérald Schwartzmann
73 57 Fabrice Barconnière
h2. Pistes de travail et correctifs à prévoir
74 34 Gérald Schwartzmann
75 34 Gérald Schwartzmann
* Changement à faire sur le module Amon
76 54 Fabrice Barconnière
** -Développement sur la partie DNS pour la prise en charge de sous-zones- #22731
77 34 Gérald Schwartzmann
78 34 Gérald Schwartzmann
* Changement à faire sur le module Scribe
79 1 Benjamin Bohard
** -Faire fonctionner LSC avec Java 8 ou 9 ou backporter le paquet Java 7 et modifier la dépendance du paquet eole-ad- #22730
80 57 Fabrice Barconnière
** 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.
81 57 Fabrice Barconnière
*** Utiliser un Scribe en production en mode NT
82 57 Fabrice Barconnière
*** effectuer l'opération classicupgrade sur le serveur Seth (instancié à confirmer lors des tests) :
83 57 Fabrice Barconnière
https://wiki.samba.org/index.php/Migrating_a_Samba_NT4_Domain_to_Samba_AD_(Classic_Upgrade)#Upgrading_on_a_new_server
84 57 Fabrice Barconnière
*** effectuer l'installation et la configuration de eole-ad sur Scribe en suivant la même procédure
85 1 Benjamin Bohard
86 39 Gérald Schwartzmann
* EAD 2
87 39 Gérald Schwartzmann
** Faire fonctionner le changement de mot de passe à l'ouverture de session
88 39 Gérald Schwartzmann
89 55 Fabrice Barconnière
* JoinEole
90 55 Fabrice Barconnière
** Ne pas positionner les clés de registre si on est sur AD pour permettre l'accès aux partages GUEST
91 34 Gérald Schwartzmann
92 56 Fabrice Barconnière
* Résoudre le problème des fichiers exécutables sur les partages
93 56 Fabrice Barconnière
94 63 Joël Cuissinat
h1. Scribe AD (option 3)
95 18 Emmanuel GARETTE
96 1 Benjamin Bohard
h2. Actions
97 1 Benjamin Bohard
98 2 Benjamin Bohard
h3. Migration du Scribe NT vers Scribe AD
99 1 Benjamin Bohard
100 1 Benjamin Bohard
h4. Procédure classicupgrade
101 3 Benjamin Bohard
102 3 Benjamin Bohard
La procédure classicupgrade nécessite des interventions complémentaires (pouvant être scriptées).
103 3 Benjamin Bohard
104 20 Benjamin Bohard
En partant d’un Scribe fonctionnel instancié avec import de comptes et un poste joint au domaine.
105 3 Benjamin Bohard
106 3 Benjamin Bohard
h5. stopper et désactiver les services de samba en mode NT (smbd, nmbd, winbind),
107 10 Benjamin Bohard
108 3 Benjamin Bohard
<pre>
109 3 Benjamin Bohard
systemctl stop nmbd
110 3 Benjamin Bohard
systemctl stop smbd
111 3 Benjamin Bohard
systemctl stop winbind
112 3 Benjamin Bohard
systemctl disable nmbd
113 3 Benjamin Bohard
systemctl disable smbd
114 3 Benjamin Bohard
systemctl disable winbind
115 3 Benjamin Bohard
</pre>
116 3 Benjamin Bohard
117 24 Philippe Caseiro
h5. mettre à jour la version de samba (Optionnel pour des raison de tests)
118 1 Benjamin Bohard
119 24 Philippe Caseiro
A faire uniquement si vous voulez tester avec la version samba 4.7
120 24 Philippe Caseiro
121 23 Benjamin Bohard
<pre>
122 80 Fabrice Barconnière
cat >>/etc/apt/sources.list.d/samba.list<<EOF
123 81 Fabrice Barconnière
deb [ arch=amd64 ] http://test-eole.ac-dijon.fr/samba samba-4.7 main
124 23 Benjamin Bohard
EOF
125 23 Benjamin Bohard
</pre>
126 23 Benjamin Bohard
127 23 Benjamin Bohard
<pre>
128 23 Benjamin Bohard
Maj-Auto
129 23 Benjamin Bohard
CreoleCat -t smb.conf
130 23 Benjamin Bohard
</pre>
131 23 Benjamin Bohard
132 3 Benjamin Bohard
h5. installer les outils nécessaires :
133 10 Benjamin Bohard
134 3 Benjamin Bohard
<pre>
135 11 Benjamin Bohard
apt-get install krb5-user ldb-tools
136 3 Benjamin Bohard
</pre>
137 3 Benjamin Bohard
138 3 Benjamin Bohard
h5. patcher nsswitch.conf.default, ldap.conf
139 3 Benjamin Bohard
140 3 Benjamin Bohard
<pre>
141 3 Benjamin Bohard
--- distrib/nsswitch.conf.default	2017-05-15 11:18:44.000000000 +0200
142 3 Benjamin Bohard
+++ modif/nsswitch.conf.default	2018-01-09 15:12:53.260292570 +0100
143 3 Benjamin Bohard
@@ -7,8 +7,8 @@
144 3 Benjamin Bohard
 ########################################################
145 3 Benjamin Bohard
 # /etc/nsswitch.conf
146 3 Benjamin Bohard
 
147 3 Benjamin Bohard
-%set %%active_winbind = %%getVar('activer_winbind', 'non') == 'oui'
148 3 Benjamin Bohard
-%set %%active_ldap =  %%getVar('ldap_nss', 'non') == 'oui'
149 3 Benjamin Bohard
+%set %%active_winbind = True
150 3 Benjamin Bohard
+%set %%active_ldap =  False
151 3 Benjamin Bohard
 
152 3 Benjamin Bohard
 passwd:         compat %slurp
153 3 Benjamin Bohard
 %if %%active_ldap
154 3 Benjamin Bohard
</pre>
155 3 Benjamin Bohard
156 12 Benjamin Bohard
<pre>
157 12 Benjamin Bohard
--- distrib/ldap.conf	2017-04-05 12:25:55.000000000 +0200
158 12 Benjamin Bohard
+++ modif/ldap.conf	2018-01-10 14:39:19.008000000 +0100
159 12 Benjamin Bohard
@@ -13,7 +13,7 @@
160 12 Benjamin Bohard
 
161 12 Benjamin Bohard
 %if %%active_ldap == 'oui'
162 12 Benjamin Bohard
 host %%adresse_ip_ldap
163 12 Benjamin Bohard
-base %%ldap_base_dn
164 12 Benjamin Bohard
+base DC=etb1,DC=lan
165 12 Benjamin Bohard
 port %%ldap_port
166 12 Benjamin Bohard
 timelimit 10
167 12 Benjamin Bohard
 bind_time_limit 10
168 12 Benjamin Bohard
@@ -23,8 +23,8 @@
169 12 Benjamin Bohard
 pam_login_attribute uid
170 12 Benjamin Bohard
 pam_password md5
171 12 Benjamin Bohard
 nss_map_attribute gecos displayName
172 12 Benjamin Bohard
-nss_base_passwd %%ldap_base_dn?sub
173 12 Benjamin Bohard
-nss_base_group %%ldap_base_dn?sub
174 12 Benjamin Bohard
+nss_base_passwd DC=etb1,DC=lan?sub
175 12 Benjamin Bohard
+nss_base_group DC=etb1,DC=lan?sub
176 12 Benjamin Bohard
 #fixe #1809
177 12 Benjamin Bohard
 nss_initgroups_ignoreusers root
178 12 Benjamin Bohard
  %if %%ldap_tls == 'oui'
179 12 Benjamin Bohard
</pre>
180 12 Benjamin Bohard
181 3 Benjamin Bohard
h5. déplacer la configuration samba actuelle dans un répertoire de travail
182 3 Benjamin Bohard
183 3 Benjamin Bohard
<pre>
184 3 Benjamin Bohard
mv /etc/samba/ /etc/samba.PDC/
185 3 Benjamin Bohard
</pre>
186 3 Benjamin Bohard
187 3 Benjamin Bohard
h5. renommer le fichier de configuration smb.conf de ce répertoire de travail,
188 3 Benjamin Bohard
189 3 Benjamin Bohard
<pre>
190 3 Benjamin Bohard
mv /etc/samba.PDC/smb.conf /etc/samba.PDC/smb.PDC.conf
191 3 Benjamin Bohard
</pre>
192 3 Benjamin Bohard
193 3 Benjamin Bohard
h5. copier les bases de données de samba dans un sous-répertoire du répertoire de travail
194 3 Benjamin Bohard
195 3 Benjamin Bohard
<pre>
196 14 Benjamin Bohard
mkdir /etc/samba.PDC/dbdir/
197 13 Benjamin Bohard
cp -p /var/lib/samba/private/secrets.tdb /etc/samba.PDC/dbdir/
198 13 Benjamin Bohard
cp -p /var/lib/samba/private/schannel_store.tdb /etc/samba.PDC/dbdir/
199 13 Benjamin Bohard
cp -p /var/lib/samba/private/passdb.tdb /etc/samba.PDC/dbdir/
200 15 Benjamin Bohard
#cp -p /var/lib/samba/var/lock/gencache_notrans.tdb /etc/samba.PDC/dbdir/
201 15 Benjamin Bohard
cp -p /var/lib/samba/group_mapping.tdb /etc/samba.PDC/dbdir/
202 15 Benjamin Bohard
cp -p /var/lib/samba/account_policy.tdb /etc/samba.PDC/dbdir/
203 1 Benjamin Bohard
</pre>
204 3 Benjamin Bohard
205 8 Benjamin Bohard
h5. lancer la commande samba-tool domain classicupgrade
206 8 Benjamin Bohard
207 1 Benjamin Bohard
<pre>
208 8 Benjamin Bohard
realm=$(CreoleGet nom_domaine_local)
209 33 Benjamin Bohard
</pre>
210 32 Benjamin Bohard
211 32 Benjamin Bohard
Pour samba 4.3.11 :
212 32 Benjamin Bohard
<pre>
213 8 Benjamin Bohard
samba-tool domain classicupgrade --dbdir=/etc/samba.PDC/dbdir --use-xattrs=yes --realm=${realm^^} --dns-backend=SAMBA_INTERNAL /etc/samba.PDC/smb.PDC.conf
214 8 Benjamin Bohard
</pre>
215 32 Benjamin Bohard
216 32 Benjamin Bohard
Pour samba 4.7 (on enlève l’option pour xattrs) :
217 32 Benjamin Bohard
<pre>
218 32 Benjamin Bohard
samba-tool domain classicupgrade --dbdir=/etc/samba.PDC/dbdir --realm=${realm^^} --dns-backend=SAMBA_INTERNAL /etc/samba.PDC/smb.PDC.conf
219 32 Benjamin Bohard
</pre>
220 32 Benjamin Bohard
221 79 Fabrice Barconnière
h5. créer le patch smb.conf à partir du nouveau fichier créé par samba-tool (bien renseigner le forwarder dns)
222 8 Benjamin Bohard
223 21 Benjamin Bohard
<pre>
224 21 Benjamin Bohard
[global]
225 21 Benjamin Bohard
  realm = ETB1.LAN
226 21 Benjamin Bohard
  workgroup = DOMPEDAGO
227 21 Benjamin Bohard
  netbios name = SCRIBE
228 21 Benjamin Bohard
229 21 Benjamin Bohard
  # disable netbios legacy protocol, only port 445 !
230 21 Benjamin Bohard
  disable netbios = yes
231 21 Benjamin Bohard
  smb ports = 445
232 21 Benjamin Bohard
233 21 Benjamin Bohard
234 21 Benjamin Bohard
  vfs objects = acl_xattr
235 21 Benjamin Bohard
  map acl inherit = Yes
236 21 Benjamin Bohard
  store dos attributes = Yes
237 21 Benjamin Bohard
  winbind separator = /
238 21 Benjamin Bohard
239 21 Benjamin Bohard
  server role = active directory domain controller
240 21 Benjamin Bohard
  dns forwarder = 192.168.232.2
241 21 Benjamin Bohard
242 21 Benjamin Bohard
  # active TLS (pour LDAPS et la maj des mot de passe !
243 21 Benjamin Bohard
  tls enabled = yes
244 21 Benjamin Bohard
  tls keyfile = /var/lib/samba/private/tls/key.pem
245 21 Benjamin Bohard
  tls certfile = /var/lib/samba/private/tls/cert.pem
246 21 Benjamin Bohard
  tls cafile = /var/lib/samba/private/tls/ca.pem
247 21 Benjamin Bohard
248 21 Benjamin Bohard
[netlogon]
249 21 Benjamin Bohard
  comment = Network Logon Service
250 21 Benjamin Bohard
  path = /home/sysvol/ac-test.fr/scripts
251 21 Benjamin Bohard
  read only = No
252 21 Benjamin Bohard
  guest ok = yes
253 21 Benjamin Bohard
254 21 Benjamin Bohard
[sysvol]
255 21 Benjamin Bohard
  comment = Sysvol Service
256 21 Benjamin Bohard
  path = /home/sysvol
257 21 Benjamin Bohard
  read only = No
258 21 Benjamin Bohard
  guest ok = yes
259 21 Benjamin Bohard
260 21 Benjamin Bohard
[homes]
261 21 Benjamin Bohard
  path = "/home/a/%u"
262 21 Benjamin Bohard
  comment = Home Directories
263 21 Benjamin Bohard
  read only = no
264 21 Benjamin Bohard
  root preexec = /usr/share/eole/sbin/create_adhome.sh "%u" "/home/a/"
265 21 Benjamin Bohard
  invalid users = nobody guest
266 21 Benjamin Bohard
267 21 Benjamin Bohard
</pre>
268 21 Benjamin Bohard
269 26 Benjamin Bohard
h5. installer le script pour la création du home
270 26 Benjamin Bohard
271 26 Benjamin Bohard
<pre>
272 26 Benjamin Bohard
#!/bin/bash
273 26 Benjamin Bohard
login=${1}
274 26 Benjamin Bohard
homebasedir=${2}
275 26 Benjamin Bohard
userdir="${homebasedir}/${login}"
276 26 Benjamin Bohard
[ -d "${userdir}" ] && exit 0
277 26 Benjamin Bohard
mkdir -p "${userdir}"
278 26 Benjamin Bohard
setfacl -Rbk "${userdir}"
279 26 Benjamin Bohard
chmod 700 "${userdir}"
280 26 Benjamin Bohard
setfacl -m u:${login}:rwx "${userdir}"
281 26 Benjamin Bohard
setfacl -dm u:${login}:rwx "${userdir}"
282 26 Benjamin Bohard
</pre>
283 26 Benjamin Bohard
284 8 Benjamin Bohard
h5. stopper et désactiver le service slapd
285 8 Benjamin Bohard
286 8 Benjamin Bohard
<pre>
287 8 Benjamin Bohard
systemctl stop slapd
288 8 Benjamin Bohard
systemctl disable slapd
289 8 Benjamin Bohard
</pre>
290 8 Benjamin Bohard
291 8 Benjamin Bohard
h5. créer le compte reader
292 8 Benjamin Bohard
293 8 Benjamin Bohard
<pre>
294 8 Benjamin Bohard
cat /root/.reader
295 8 Benjamin Bohard
samba-tool user create reader
296 8 Benjamin Bohard
</pre>
297 8 Benjamin Bohard
298 8 Benjamin Bohard
h5. modifier les variables
299 8 Benjamin Bohard
300 8 Benjamin Bohard
Le base DN est maintenant du type DC=etb1,DC=lan.
301 8 Benjamin Bohard
302 8 Benjamin Bohard
Le compte reader est maintenant du type CN=reader,CN=Users,DC=etb1,DC=lan.
303 8 Benjamin Bohard
304 25 Philippe Caseiro
h5. modifier les scripts de posttemplate 02-annuaire et 04-fichier et 00-annuaire en pretemplate
305 8 Benjamin Bohard
306 8 Benjamin Bohard
exit 0 ajouté en tête des fichiers pour ne pas faire les traitements.
307 8 Benjamin Bohard
308 8 Benjamin Bohard
h5. activer et démarrer le service samba-ad-dc
309 8 Benjamin Bohard
310 8 Benjamin Bohard
<pre>
311 8 Benjamin Bohard
systemctl enable samba-ad-dc
312 8 Benjamin Bohard
systemctl start samba-ad-dc
313 8 Benjamin Bohard
</pre>
314 8 Benjamin Bohard
315 8 Benjamin Bohard
h5. reconfigure
316 8 Benjamin Bohard
317 8 Benjamin Bohard
h5. stopper le service nmbd
318 8 Benjamin Bohard
319 8 Benjamin Bohard
Le service nmbd est démarré automatiquement par creole
320 8 Benjamin Bohard
<pre>
321 8 Benjamin Bohard
systemctl stop nmbd
322 3 Benjamin Bohard
</pre>
323 1 Benjamin Bohard
324 10 Benjamin Bohard
h4. Points à traiter
325 10 Benjamin Bohard
326 10 Benjamin Bohard
h5. service nmbd
327 10 Benjamin Bohard
328 10 Benjamin Bohard
Le service nmbd est géré par creole et sa désactivation manuelle n’est pas suffisante
329 10 Benjamin Bohard
330 10 Benjamin Bohard
h5. variables creole
331 10 Benjamin Bohard
332 10 Benjamin Bohard
Les variables concernant l’annuaire sont verrouillées (même après import du fichier de configuration : valeurs par défaut).
333 10 Benjamin Bohard
334 10 Benjamin Bohard
Il n’est pas possible de modifier, hors des patchs, les valeurs pour le base DN, le protocole (ldaps), etc.
335 10 Benjamin Bohard
336 22 Benjamin Bohard
h5. mise à jour samba
337 22 Benjamin Bohard
338 22 Benjamin Bohard
Conflit avec eole-fichier-common-pkg pour la fourniture du fichier smbd.service
339 22 Benjamin Bohard
340 31 Benjamin Bohard
h5. configuration de samba
341 31 Benjamin Bohard
342 31 Benjamin Bohard
Vérifier que le fichier de configuration est adéquate pour un contrôleur de domaine avec des partages.
343 31 Benjamin Bohard
344 30 Benjamin Bohard
h5. création des homes
345 10 Benjamin Bohard
346 30 Benjamin Bohard
Le client cherche à se connecter sur un partage nommé <REALM>\<user>.
347 10 Benjamin Bohard
348 30 Benjamin Bohard
Les clients doivent pouvoir remonter leur ancien home (<user>).
349 10 Benjamin Bohard
350 9 Philippe Caseiro
h2. Pistes de travail pour la migration de l'annuaire
351 9 Philippe Caseiro
352 9 Philippe Caseiro
Proposition de méthode pour arriver a un Scribe AD en utilisant malgré-tout une
353 9 Philippe Caseiro
partie du travail déjà fait par l'équipe samba dans sa procédure
354 9 Philippe Caseiro
classicupgrade.
355 9 Philippe Caseiro
356 9 Philippe Caseiro
La procédure proprement dite n'est pas suffisante pour nous et l'utilisation
357 9 Philippe Caseiro
brute de l'outil samba non plus, cet outil réalise le provisionning AD et les
358 9 Philippe Caseiro
initialisations des fichiers db, hors pour bien faire nous avons besoin que samba ai
359 9 Philippe Caseiro
connaissance des schemas complémentaires du scribe (radius, eole, ent ...).
360 9 Philippe Caseiro
avant la migration des comptes. Pour lui ajouter les dit schémas il faut que
361 9 Philippe Caseiro
les fichiers db soient initialisées, donc l'utilisation de l'outil est
362 9 Philippe Caseiro
impossible. Par chance il utilise la lib python samaba, ce qui nous ouvre des
363 9 Philippe Caseiro
possibilités. Sans oublié que l'outil samba crée la configuration pour samba
364 9 Philippe Caseiro
a partir de l'ancienne et cette fonctionnalités ne nous ai pas vraiment utile.
365 9 Philippe Caseiro
366 9 Philippe Caseiro
Donc l'idée est de recréer une procédure de migration complête pour nos
367 9 Philippe Caseiro
besoins.
368 9 Philippe Caseiro
369 9 Philippe Caseiro
Il faut donc refaire le provisionning de l'AD ce qui est fait dans Seth donc
370 9 Philippe Caseiro
nous pouvons utiliser cette base de travail
371 9 Philippe Caseiro
372 9 Philippe Caseiro
Migrer les shemas complémentaires actuels au format lisible par samba4.
373 9 Philippe Caseiro
374 9 Philippe Caseiro
Créer un script de migration des comptes qui ajoute les schemas, utilise la
375 9 Philippe Caseiro
lib python samba4 pour migrer les comptes et ensuite mettre à jour les comptes
376 9 Philippe Caseiro
avec les attributs supplémentaires de l'ancien annuaire.
377 17 Emmanuel GARETTE
378 65 Joël Cuissinat
h1. Remplacement du Client Scribe (Options 2, 3, 5)
379 1 Benjamin Bohard
380 65 Joël Cuissinat
h2. Application de policies : https://dev-eole.ac-dijon.fr/issues/22666
381 17 Emmanuel GARETTE
382 17 Emmanuel GARETTE
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.
383 1 Benjamin Bohard
384 17 Emmanuel GARETTE
Si on veut générer les règles depuis Gaspacho il va falloir : 
385 1 Benjamin Bohard
386 65 Joël Cuissinat
# connaître le format de chaque règle ;
387 65 Joël Cuissinat
# créer des "parseurs" pour chaque format ;
388 17 Emmanuel GARETTE
# écrire les fichiers ".gasp" pour que les règles soient prise en compte dans Gaspacho ;
389 17 Emmanuel GARETTE
# créer les GPO suivant les groupes gaspacho + associer les différents critères de sélection (utilisateur/machine) ;
390 65 Joël Cuissinat
# lancer les différents parseurs quand on applique les règles Gaspacho ;
391 17 Emmanuel GARETTE
392 17 Emmanuel GARETTE
393 65 Joël Cuissinat
h2. Exécuter des scripts au démarrage de la machine/connexion des utilisateurs : https://dev-eole.ac-dijon.fr/issues/22665
394 17 Emmanuel GARETTE
395 17 Emmanuel GARETTE
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).
396 17 Emmanuel GARETTE
397 1 Benjamin Bohard
Il faut un mécanisme pour générer les scripts comme c'était fait sous Scribe.
398 17 Emmanuel GARETTE
399 65 Joël Cuissinat
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.
400 17 Emmanuel GARETTE
401 65 Joël Cuissinat
h2. Mappage des partages : https://dev-eole.ac-dijon.fr/issues/22667
402 19 Emmanuel GARETTE
403 65 Joël Cuissinat
Il s'agit d'un fichier XML par GPO possiblement générable.
404 19 Emmanuel GARETTE
405 65 Joël Cuissinat
h2. Pouvoir lancer des commandes à distance : https://dev-eole.ac-dijon.fr/issues/22665
406 19 Emmanuel GARETTE
407 65 Joël Cuissinat
Il y a plusieurs pistes possible mais aucune n'a été testée avec succès.
408 19 Emmanuel GARETTE
409 65 Joël Cuissinat
h2. Observation des postes : https://dev-eole.ac-dijon.fr/issues/22664
410 65 Joël Cuissinat
411 65 Joël Cuissinat
Nécessite l'exécution de commandes à distance.
412 58 Benjamin Bohard
413 64 Joël Cuissinat
h1. Portage des actions EAD2 vers EAD3 (option 5)
414 58 Benjamin Bohard
415 58 Benjamin Bohard
https://dev-eole.ac-dijon.fr/issues/22725
416 58 Benjamin Bohard
https://dev-eole.ac-dijon.fr/issues/22670
417 58 Benjamin Bohard
https://dev-eole.ac-dijon.fr/issues/22727
418 58 Benjamin Bohard
https://dev-eole.ac-dijon.fr/issues/22726
419 58 Benjamin Bohard
https://dev-eole.ac-dijon.fr/issues/22733
420 58 Benjamin Bohard
https://dev-eole.ac-dijon.fr/issues/22728
421 58 Benjamin Bohard
422 58 Benjamin Bohard
h2. Gestion des comptes et groupes
423 58 Benjamin Bohard
424 58 Benjamin Bohard
Le changement le plus important est le passage à une infrastructure séparant le contrôleur de domaine et le serveur de fichiers.
425 58 Benjamin Bohard
426 58 Benjamin Bohard
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.
427 58 Benjamin Bohard
428 58 Benjamin Bohard
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.
429 58 Benjamin Bohard
430 58 Benjamin Bohard
La piste de salt-syndic a été étudiée pour répartir les traitements composant une action sur les serveurs concernés.
431 58 Benjamin Bohard
432 58 Benjamin Bohard
h2. Les applications externes
433 58 Benjamin Bohard
434 59 Joël Cuissinat
Pas de problème particulier pour les applications externes (CUPS, Sympa, EOP, etc.).
435 59 Joël Cuissinat
436 67 Joël Cuissinat
h1. Faire fonctionner Scribe et Seth sur une seule machine (option 4)
437 67 Joël Cuissinat
438 67 Joël Cuissinat
h2. Infrastructure
439 67 Joël Cuissinat
440 67 Joël Cuissinat
Utilisation d'une machine @aca.dc1@
441 67 Joël Cuissinat
442 67 Joël Cuissinat
h2. Installation
443 67 Joël Cuissinat
444 67 Joël Cuissinat
h3. Paquets
445 67 Joël Cuissinat
446 67 Joël Cuissinat
* Installation des paquets : eole-annuaire eole-scribe-backend eole-scribehorus eole-courier eole-mysql eole-antivirus eole-annuaire-pkg
447 67 Joël Cuissinat
* Installation des dépendances de eole-ad : lsc openjdk-8-jre libcrypt-saltedhash-perl
448 67 Joël Cuissinat
449 67 Joël Cuissinat
h3. Dépôts Git
450 67 Joël Cuissinat
451 70 Joël Cuissinat
Du fait de nombreux conflits entre paquets, certains fichiers doivent être installés manuellement.
452 70 Joël Cuissinat
453 67 Joël Cuissinat
* Installation à la main par les dépôts Git : eole-fichier conf-scribe eole-commun eole-ad
454 67 Joël Cuissinat
455 67 Joël Cuissinat
<pre>
456 67 Joël Cuissinat
git clone https://dev-eole.ac-dijon.fr/git/conf-scribe.git
457 67 Joël Cuissinat
git clone https://dev-eole.ac-dijon.fr/git/eole-fichier.git
458 67 Joël Cuissinat
git clone https://dev-eole.ac-dijon.fr/eole-ad.git
459 67 Joël Cuissinat
</pre>
460 67 Joël Cuissinat
461 67 Joël Cuissinat
* Copies manuelles de fichiers
462 67 Joël Cuissinat
** eole-fichier :
463 67 Joël Cuissinat
<pre>
464 67 Joël Cuissinat
./common/dicos/20_fichier.xml
465 67 Joël Cuissinat
./primaire/dicos/20_fichier-primaire.xml
466 67 Joël Cuissinat
primaire/tmpl/smb-include_global.conf
467 67 Joël Cuissinat
primaire/tmpl/smbldap.conf
468 67 Joël Cuissinat
primaire/tmpl/smbldap_bind.conf
469 67 Joël Cuissinat
</pre>
470 67 Joël Cuissinat
** eole-ad :
471 67 Joël Cuissinat
<pre>
472 67 Joël Cuissinat
make install
473 67 Joël Cuissinat
</pre>
474 67 Joël Cuissinat
475 67 Joël Cuissinat
h3. Nettoyage
476 67 Joël Cuissinat
477 67 Joël Cuissinat
* 20_fichier-primaire.xml : commenter les balises <package> et <file> sauf smbldap.conf et smbldap_bind.conf
478 67 Joël Cuissinat
* 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@)
479 67 Joël Cuissinat
480 67 Joël Cuissinat
h3. Variable en double
481 67 Joël Cuissinat
482 67 Joël Cuissinat
Entre eole-ad-dc et eole-ad, 2 variables différentes portent le même nom !
483 67 Joël Cuissinat
484 67 Joël Cuissinat
Renommer la variable ad_domain qui est en double en provenance d'eole-ad :
485 67 Joël Cuissinat
* dicos/26_eolead.xml 
486 67 Joël Cuissinat
* distrib/lsc.xml *3
487 67 Joël Cuissinat
* distrib/smbldap_bind.conf *2
488 67 Joël Cuissinat
489 68 Joël Cuissinat
h3. Hack DNS
490 68 Joël Cuissinat
491 68 Joël Cuissinat
Supprimer la redéfinition de la variable adresse_ip_dns et sa balise auto calc_multi_val dans 
492 69 Joël Cuissinat
/usr/share/eole/creole/dicos/26_eolead.xml
493 68 Joël Cuissinat
494 68 Joël Cuissinat
h3. Hack LDAP PORT
495 68 Joël Cuissinat
496 68 Joël Cuissinat
Le serveur AD utilise déjà le port ldap standard (389), il faut modifier le port du service OpenLDAP (en 390 par exemple).
497 68 Joël Cuissinat
498 68 Joël Cuissinat
La modification de la variable *ldap_port* n'est pas suffisante, plusieurs templates doivent être adaptés :
499 68 Joël Cuissinat
* /usr/share/eole/creole/distrib/smbldap.conf
500 68 Joël Cuissinat
** slaveLDAP="ldap://%%adresse_ip_ldap:%%ldap_port/"
501 68 Joël Cuissinat
** masterLDAP="ldap://%%adresse_ip_ldap:%%ldap_port/"
502 68 Joël Cuissinat
* /usr/share/eole/creole/distrib/lsc.xml
503 68 Joël Cuissinat
* /usr/share/eole/creole/distrib/default.slapd
504 68 Joël Cuissinat
505 68 Joël Cuissinat
Ainsi que les fichiers suivants :
506 69 Joël Cuissinat
* /usr/lib/python2.7/dist-packages/scribe/eoleldap.py (ligne 73)
507 69 Joël Cuissinat
** @self.connexion = ldap.open(self.serveur, 390)@
508 68 Joël Cuissinat
* /usr/share/eole/posttemplate/02-annuaire
509 68 Joël Cuissinat
** ajout de "-h 127.0.0.1:390" à la commande ldappasswd
510 1 Benjamin Bohard
* /usr/share/eole/diagnose/21-annuaire
511 1 Benjamin Bohard
** ajout de "-h 127.0.0.1:390" aux commandes ldapsearch
512 1 Benjamin Bohard
513 69 Joël Cuissinat
Les deux dernières modifications sont facultatives si on configure "correctement" le fichier /etc/ldap/ldap.conf :
514 69 Joël Cuissinat
* /usr/share/eole/creole/distrib/ldap.conf
515 69 Joël Cuissinat
** host 127.0.0.1:390
516 69 Joël Cuissinat
517 69 Joël Cuissinat
Note : si on configure la variable "port" de ce fichier, ça ne marche pas...
518 69 Joël Cuissinat
519 69 Joël Cuissinat
h3. Hack sur la jonction au domaine et l'initialisation lsc
520 69 Joël Cuissinat
521 69 Joël Cuissinat
* /usr/share/eole/posttemplate/05-eolead
522 69 Joël Cuissinat
** le serveur ne peut être membre de son propre domaine, une partie du code doit être commentée
523 69 Joël Cuissinat
** 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)
524 69 Joël Cuissinat
525 72 Joël Cuissinat
h2. Configuration
526 69 Joël Cuissinat
527 69 Joël Cuissinat
Principaux éléments du config.eol utilisé :
528 69 Joël Cuissinat
<pre>
529 69 Joël Cuissinat
    "activer_clam":{"owner":"gen_config","val":"non"},
530 69 Joël Cuissinat
    "activer_nginx_web":{"owner":"gen_config","val":"non"},
531 69 Joël Cuissinat
    "activer_sso":{"owner":"gen_config","val":"non"},
532 69 Joël Cuissinat
    "ad_additional_dc":{"owner":"gen_config","val":"non"},
533 69 Joël Cuissinat
    "ad_address":{"owner":"gen_config","val":"192.168.0.5"},
534 69 Joël Cuissinat
    "ad_ldaps":{"owner":"gen_config","val":"oui"},
535 69 Joël Cuissinat
    "ad_server":{"owner":"gen_config","val":"dc1"},
536 69 Joël Cuissinat
    "ad_server_role":{"owner":"gen_config","val":"controleur de domaine"},
537 69 Joël Cuissinat
    "ad_user":{"owner":"gen_config","val":"Administrator"},
538 69 Joël Cuissinat
    "adresse_ip_dns":{"owner":"gen_config","val":["192.168.232.2"]},
539 69 Joël Cuissinat
    "adresse_ip_eth0":{"owner":"gen_config","val":"192.168.0.5"},
540 69 Joël Cuissinat
    "ldap_port":{"owner":"gen_config","val":390},
541 69 Joël Cuissinat
    "libelle_etab":{"owner":"gen_config","val":"aca"},
542 69 Joël Cuissinat
    "nom_academie":{"owner":"gen_config","val":"ac-test"},
543 69 Joël Cuissinat
    "nom_domaine_local":{"owner":"gen_config","val":"ac-test.fr"},
544 69 Joël Cuissinat
    "nom_machine":{"owner":"gen_config","val":"dc1"},
545 69 Joël Cuissinat
    "numero_etab":{"owner":"gen_config","val":"0000000A"},
546 69 Joël Cuissinat
    "serveur_ntp":{"owner":"basique","val":["hestia.eole.lan"]},
547 69 Joël Cuissinat
    "smb_netbios_name":{"owner":"gen_config","val":"ac-test"},
548 69 Joël Cuissinat
    "smb_workgroup":{"owner":"gen_config","val":"pedago"},
549 69 Joël Cuissinat
</pre>
550 69 Joël Cuissinat
551 69 Joël Cuissinat
Variables calculées :
552 69 Joël Cuissinat
* ad_domain : "ac-test"
553 69 Joël Cuissinat
* ad_domain2 (pour eole-ad) : "ac-test.fr"
554 69 Joël Cuissinat
555 69 Joël Cuissinat
Il faut également exécuter la procédure d'intégration la CA du module Seth au Java Keystore décrite dans "la doc":http://eole.ac-dijon.fr/documentations/2.6/partielles/beta/ModuleSeth/co/eole-AD.html#tcN27f
556 69 Joël Cuissinat
557 73 Joël Cuissinat
h2. Utilisation de l'EAD2
558 69 Joël Cuissinat
559 69 Joël Cuissinat
* Création de groupes 
560 69 Joël Cuissinat
** 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
561 69 Joël Cuissinat
** la création d'un groupe avec partage entraîne le re-démarrage du service samba (NT) qui est désactivé (le commenter)
562 69 Joël Cuissinat
* Création d'un élève
563 69 Joël Cuissinat
** Le compte élève a été créé dans les deux annuaires sans erreur particulière
564 67 Joël Cuissinat
565 59 Joël Cuissinat
h1. Gestion (directe) des comptes AD via l'EAD2 (options 2 et 3)
566 59 Joël Cuissinat
567 59 Joël Cuissinat
h2. Remplacement de l'appel à @smbldap-useradd@ par @samba-tool user create@
568 59 Joël Cuissinat
569 59 Joël Cuissinat
Objectif du POC : Créer un enseignant directement dans AD à l'aide de la commande "backend" suivante :
570 59 Joël Cuissinat
571 59 Joël Cuissinat
<pre>
572 59 Joël Cuissinat
/usr/share/eole/backend/creation-prof.py -u <login> -m "Eole12345\$" -p Prénom -f Nom
573 59 Joël Cuissinat
</pre>
574 59 Joël Cuissinat
575 59 Joël Cuissinat
Librairies python concernées :
576 59 Joël Cuissinat
* /usr/lib/python2.7/dist-packages/scribe/enseignants.py
577 59 Joël Cuissinat
* /usr/lib/python2.7/dist-packages/scribe/eoleuser.py
578 59 Joël Cuissinat
** méthode _add : remplacement de l'utilisation de smbldap-tools par samba-tools dans "if self.has_samba:"
579 59 Joël Cuissinat
580 59 Joël Cuissinat
Arguments reçus par la fonction :
581 59 Joël Cuissinat
@{'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'}@
582 59 Joël Cuissinat
583 59 Joël Cuissinat
Commande smbldap appelée par la fonction :
584 59 Joël Cuissinat
<pre>
585 59 Joël Cuissinat
/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>
586 59 Joël Cuissinat
</pre>
587 59 Joël Cuissinat
588 59 Joël Cuissinat
Commande samba-tool "équivalente" :
589 59 Joël Cuissinat
<pre>
590 59 Joël Cuissinat
samba-tool user create <login> "Eole12345\$" --use-username-as-cn --given-name=Prénom --surname=Nom
591 59 Joël Cuissinat
</pre>
592 59 Joël Cuissinat
593 60 Joël Cuissinat
Code de génération de la commande pour la librairie Scribe :
594 60 Joël Cuissinat
<pre>
595 60 Joël Cuissinat
cmd = ['samba-tool', 'user', 'create', args['login'], args['password'], "--use-username-as-cn", "--given-name={}".format(args['prenom']), "--surname={}".format(args['nom'])]
596 60 Joël Cuissinat
</pre>
597 60 Joël Cuissinat
598 59 Joël Cuissinat
ATTENTION : L'option : --use-username-as-cn est importante si on veut être sûr que le CN soit <login>.
599 59 Joël Cuissinat
600 59 Joël Cuissinat
Autres options disponibles à étudier :
601 59 Joël Cuissinat
* --must-change-at-next-login
602 59 Joël Cuissinat
* --userou='OU=OrgUnit'
603 59 Joël Cuissinat
* --rfc2307-from-nss & [--nis-domain=samdom --unix-home=/home/User5            --uid-number=10005 --login-shell=/bin/false --gid-number=10000] : compatibilité Unix ?
604 59 Joël Cuissinat
* --profile-path/--script-path/--home-drive/--home-directory
605 59 Joël Cuissinat
* --description/--mail-address
606 59 Joël Cuissinat
607 59 Joël Cuissinat
h2. Gestion de l'annuaire AD avec python-ldap
608 59 Joël Cuissinat
609 59 Joël Cuissinat
Objectif du POC : Créer une libraire python permettant de gérer les attributs ldap des utilisateurs
610 59 Joël Cuissinat
611 59 Joël Cuissinat
<pre><code class="python">
612 59 Joël Cuissinat
# -*- coding: utf-8 -*-
613 59 Joël Cuissinat
import ldap
614 59 Joël Cuissinat
615 59 Joël Cuissinat
adbase = "DC=ac-test,DC=fr"
616 59 Joël Cuissinat
binddn = "CN=Administrator,CN=Users,DC=ac-test,DC=fr"
617 59 Joël Cuissinat
passwd = "Eole12345!"
618 59 Joël Cuissinat
619 59 Joël Cuissinat
def connect():
620 59 Joël Cuissinat
    # OPT_REFERRALS=0 is mandatory for AD
621 59 Joël Cuissinat
    ldap.set_option(ldap.OPT_REFERRALS, 0)
622 59 Joël Cuissinat
    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
623 59 Joël Cuissinat
    connexion = ldap.initialize('ldaps://localhost')
624 59 Joël Cuissinat
    connexion.simple_bind_s(binddn, passwd)
625 59 Joël Cuissinat
    return connexion
626 59 Joël Cuissinat
627 59 Joël Cuissinat
628 59 Joël Cuissinat
def get_attr(user, attr):
629 59 Joël Cuissinat
    """
630 59 Joël Cuissinat
    Renvoie la valeur de l'attribut attr
631 59 Joël Cuissinat
    pour l'utilisateur AD user
632 59 Joël Cuissinat
    """
633 59 Joël Cuissinat
    connexion = connect()
634 59 Joël Cuissinat
    res = connexion.search(adbase, ldap.SCOPE_SUBTREE,
635 59 Joël Cuissinat
                          '(samaccountname={0})'.format(user),
636 59 Joël Cuissinat
                          [attr])
637 59 Joël Cuissinat
    try:
638 59 Joël Cuissinat
        return connexion.result(res, 60)[1][0][1][attr][0]
639 59 Joël Cuissinat
    except TypeError:
640 59 Joël Cuissinat
        return
641 59 Joël Cuissinat
642 59 Joël Cuissinat
def set_attr(user, attr, value):
643 59 Joël Cuissinat
    """
644 59 Joël Cuissinat
    Modifie la valeur de l'attribut attr
645 59 Joël Cuissinat
    pour l'utilisateur AD user
646 59 Joël Cuissinat
    """
647 59 Joël Cuissinat
    connexion = connect()
648 59 Joël Cuissinat
    if value == '':
649 59 Joël Cuissinat
        value = []
650 59 Joël Cuissinat
    user_dn = "CN={},CN=Users,{}".format(user, adbase)
651 59 Joël Cuissinat
    data = [((ldap.MOD_REPLACE, attr, value))]
652 59 Joël Cuissinat
    connexion.modify(user_dn, data)
653 59 Joël Cuissinat
654 59 Joël Cuissinat
def delete(user):
655 59 Joël Cuissinat
    """
656 59 Joël Cuissinat
    suppression d'un utilisateur AD
657 59 Joël Cuissinat
    """
658 59 Joël Cuissinat
    connexion = connect()
659 59 Joël Cuissinat
    user_dn = "CN={},CN=Users,{}".format(user, adbase)
660 59 Joël Cuissinat
    connexion.delete(user_dn)
661 59 Joël Cuissinat
</code></pre>