Projet

Général

Profil

Scribe AD » Historique » Version 89

Fabrice Barconnière, 14/06/2018 15:34

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