Version 46.1 von Jonas Mayer am 2022/05/04 09:35

Verstecke letzte Bearbeiter
Jonas Mayer 33.1 1 (% style="color:#000000" %)Um externe oder interne Dienste über das LDAPS-Protokoll einzubinden, gibt es seit Puppet-Version 1.3.22 neben dem sogenannten LDAP-Admin Konto einen neu hinzugefügten ReadOnly-Benutzer zur Anmeldung am integrierten OpenLDAP-Verzeichnisdienst.
Jens Gruber 3.1 2
Jonas Mayer 33.1 3 (% style="color:#000000" %)In diesem Artikel erfahren Sie, wo Sie die Benutzernamen & Kennwörter der zwei Benutzer finden und welches Konto sich für welches Vorhaben am besten eignen.
Jens Gruber 3.1 4
Jens Gruber 34.2 5 ----
6
Jonas Mayer 46.1 7 {{toc start="2"/}}
Jens Gruber 34.2 8
9
Alexander Kruck 25.1 10 (% style="color:#000000" %)[[image:Grafik für LDAp.png||height="331" width="622"]]
Jens Gruber 3.1 11
Jens Gruber 20.2 12
Jens Gruber 34.2 13 == (% style="color:#000000" %)__**LDAP-Admin Benutzer**__(%%) ==
Jens Gruber 3.1 14
15
Jens Gruber 3.2 16 === (% style="color:#000000" %)__Nutzungsgebiet:__(%%) ===
Jens Gruber 3.1 17
Jonas Mayer 32.1 18 (% style="color:#000000" %)Der LDAP-Admin Benutzer ist mit äußerster Vorsicht einzusetzen, da dieser einen beinahe uneingeschränkten (Schreib-)Zugriff auf den Inhalt des OpenLDAP-Verzeichnisdienst sowie die Nutzerattribute besitzt. Daher sollte der Benutzer möglichst nur intern durch LogoDIDACT-integrierte Dienste zum Einsatz kommen.
Jens Gruber 3.1 19
Jonas Mayer 32.1 20 (% style="color:#000000" %)Sollten die Daten des LDAP-Admins in unbefugte Hände gelangen, stellt dies ein massives datenschutz- und sicherheitstechnisches Problem dar. **__Von einem externen Gebrauch des Benutzerkontos ist daher strengstens abzuraten!__**
Jens Gruber 3.1 21
22
Jens Gruber 14.2 23 ==== (% style="color:#000000" %)__Benutzername & Kennwort__(%%) ====
Jens Gruber 3.1 24
Jens Gruber 14.2 25
Alexander Kruck 25.1 26 ====== (% style="color:#000000" %)__Benutzername__(%%) ======
Jens Gruber 14.2 27
Jonas Mayer 32.1 28 (% style="color:#000000" %)Der Benutzername des LDAP Admins lautet:
Jens Gruber 3.1 29
Jens Gruber 3.2 30 {{code language="bash"}}
Jens Gruber 14.2 31 cn=ldap-admin
Jens Gruber 3.2 32 {{/code}}
Jens Gruber 3.1 33
34
Alexander Kruck 25.1 35 ====== (% style="color:#000000" %)__Attribute des Benutzernamens__(%%) ======
Jens Gruber 14.2 36
Jonas Mayer 32.1 37 (% style="color:#000000" %)Die BaseDN als Einstiegspunkt zum LDAP-Verzeichnisdienst kann über ein zusätzliches Programm ausgelesen werden, z.B. über das freie Tool LDAP Admin. In diesem Beispiel lautet die BaseDN {{code language="bash"}}dc=schule,dc=local{{/code}}. Dies kann von Installation zu Installation abweichen und wird durch die intern verwendete DNS Domain bestimmt, hier im Beispiel handelt es sich um den Standardwert.
Jens Gruber 14.2 38
David Haido 30.1 39 (% style="color:#000000" %)[[image:1651243652049-471.png]]
Jens Gruber 14.2 40
41
Jonas Mayer 32.1 42 (% style="color:#000000" %)In diesem Beispiel ergibt sich der vollständige Benutzername (sogenannter //Distinguished Name// des Benutzerkontos) durch Anfügen der BaseDN:
Jens Gruber 27.1 43
44 {{code language="bash"}}
45 cn=ldap-admin,dc=schule,dc=local
46 {{/code}}
47
48
Alexander Kruck 25.1 49 ====== (% style="color:#000000" %)__Kennwort__(%%) ======
Jens Gruber 14.2 50
Jens Gruber 3.2 51 (% style="color:#000000" %)Das Kennwort ist im logosrv unter folgendem Pfad einsehbar:
Jens Gruber 3.1 52
Jens Gruber 3.2 53 {{code language="bash"}}
54 root@logosrv:~ # cat /etc/ldap.secret
55 {{/code}}
Jens Gruber 3.1 56
Jonas Mayer 32.1 57 (% style="color:#000000" %)Optional kann man das Passwort (sowie die gültige BaseDN als Suffix des Benutzernamens) auch mit folgendem Befehl unter dem Punkt "Credentials" einsehen:
Jens Gruber 3.1 58
Jens Gruber 4.1 59 {{code language="bash"}}
60 root@logosrv:~ # ldconf -o
61 {{/code}}
62
63
Jens Gruber 34.2 64 == (% style="color:#000000" %)**__LDAP-ReadOnly (ldap-ro) Benutzer__**(%%) ==
Jens Gruber 3.1 65
66
Jens Gruber 3.2 67 ==== (% style="color:#000000" %)__Nutzungsgebiet:__(%%) ====
Jens Gruber 3.1 68
Jens Gruber 14.2 69 (% style="color:#000000" %)Der LDAP-ReadOnly Benutzer ist für die Verwendung von externen Diensten/Anbindungen gedacht.
Jens Gruber 3.1 70
Jonas Mayer 32.1 71 (% style="color:#000000" %)Mögliche Nutzungsszenarien wären unter anderem die Anbindung  von extern gehosteten Webdiensten (z.B. Moodle, WebUntis oder Nextcloud) an die LogoDIDACT-integrierte Benutzerdatenbank über das LDAP-Protokoll.
Jens Gruber 14.2 72
73
74 ==== (% style="color:#000000" %)__Benutzername & Passwort:__(%%) ====
Jens Gruber 3.2 75
Jens Gruber 8.1 76
Alexander Kruck 25.1 77 ====== (% style="color:#000000" %)__Benutzername__(%%) ======
David Haido 11.1 78
Jens Gruber 3.2 79 (% style="color:#000000" %)Relevant für den Zugriff von Außen wäre folgender Benutzername:
80
Jens Gruber 3.1 81 {{code language="bash"}}
Jens Gruber 14.2 82 cn=ldap-ro
Jens Gruber 3.1 83 {{/code}}
84
Jonas Mayer 32.1 85 ====== (% id="cke_bm_979S" style="color:#000000; display:none" %)__ __(%%) ======
Jens Gruber 3.1 86
Alexander Kruck 25.1 87 ====== (% style="color:#000000" %)__Attribute des Benutzernamens__(%%) ======
Jens Gruber 14.2 88
Jonas Mayer 32.1 89 (% style="color:#000000" %)Die BaseDN als Einstiegspunkt zum LDAP-Verzeichnisdienst kann über ein zusätzliches Programm ausgelesen werden, z.B. über das freie Tool LDAP Admin. In diesem Beispiel lautet die BaseDN {{code language="bash"}}dc=schule,dc=local{{/code}}. Dies kann von Installation zu Installation abweichen und wird durch die intern verwendete DNS Domain bestimmt, hier im Beispiel handelt es sich um den Standardwert.
Jens Gruber 19.1 90
David Haido 30.1 91 (% style="color:#000000" %)[[image:1651243652049-471.png]]
Jens Gruber 14.2 92
93
Jonas Mayer 32.1 94 (% style="color:#000000" %)Im Unterschied zum vorherigen Benutzer steckt das Konto verschachtelt in der OU //services//. Dadurch ergibt sich nachfolgender, vollständiger Benutzername (sogenannter //Distinguished Name//):
Jens Gruber 27.1 95
96 {{code language="bash"}}
Jonas Mayer 32.1 97 cn=ldap-ro,ou=services,dc=schule,dc=local
Jens Gruber 27.1 98 {{/code}}
99
100
Alexander Kruck 25.1 101 ====== (% style="color:#000000" %)__Kennwort__(%%) ======
Jens Gruber 14.2 102
Jens Gruber 3.2 103 (% style="color:#000000" %)Das Kennwort ist im logosrv unter folgendem Pfad einsehbar:
104
Jens Gruber 3.1 105 {{code language="bash"}}
106 root@logosrv:~ # cat /etc/ldap.ro.secret
107 {{/code}}
Jens Gruber 19.2 108
109
Jonas Mayer 34.1 110 (% style="color:#000000" %)Im Zuge der Anbindung externer Dienste sollte stets darauf geachtet werden, die verschlüsselte Form des LDAP-Protokolls (d.h. LDAPS auf TCP-Port 636) zu verwenden, damit sensible Information wie Benutzer-Zugangsdaten prinzipiell per SSL-Transportverschlüsselung versendet werden.
Jonas Mayer 33.1 111 Zur Nutzung der SSL-Transportverschlüsselung ist es wiederum wichtig, ein gültiges Let's Encrypt Zertifikat zu beantragen, damit die Verbindungssicherheit zwischen zwei Servern gewährleistet werden kann.
Jens Gruber 19.2 112
Jonas Mayer 33.1 113
Jens Gruber 34.2 114 == __**Ports über Firewall an Rev-Proxy weiterleiten**__ ==
Jens Gruber 19.2 115
Jens Gruber 34.2 116 Damit die LDAP Verbindung funktioniert, muss der Port 636 an den Rev-Proxy weitergeleitet werden. Diese Weiterleitung können Sie wie folgt einrichten:
Jens Gruber 19.2 117
Jens Gruber 34.2 118
119 Wechseln Sie in das Verzeichnis der Shorewall:
120
121 {{code language="bash"}}
122 root@ldhosts:~ # cd /etc/shorewall
123 {{/code}}
124
125
126 Öffnen Sie die Datei rules mit einem Editor ihrer Wahl:
127
128 {{code language="bash"}}
129 root@ldhost:/etc/shorewall # vim rules
130 {{/code}}
131
132
Jonas Mayer 45.1 133 Ergänzen Sie die Liste innerhalb der Datei um den obersten Eintrag (lila eingefärbte Zeile). Dadurch werden externe Verbindungsanfragen auf Port 636 (LDAPS) vom ldhost zum rev-proxy LXC-Container weitergeleitet, so wie im Schaubild am Anfang des Artikels abgebildet.
Jens Gruber 34.2 134
Jonas Mayer 45.1 135 (% class="box" %)
136 (((
137 (% style="color:#16a085" %)###
Jonas Mayer 46.1 138 # Shorewall version 4.0##(%%)
139 (% style="color:#16a085" %)#(%%)##
Jonas Mayer 45.1 140 (% style="color:#8e44ad" %)**DNAT ext dmz:172.28.29.3 tcp 636**(%%)
Jens Gruber 34.2 141 DNAT ext dmz:172.28.29.3 tcp 80,443
142 DNAT ext dmz:172.28.29.2 tcp 1:21
143 DNAT ext dmz:172.28.29.2 tcp 23:2221
144 DNAT ext dmz:172.28.29.2 tcp 2223:65535
Jonas Mayer 45.1 145 DNAT ext dmz:172.28.29.2 udp 1:65535##
146 )))
Jens Gruber 34.2 147
148
149 Starten Sie nun die Firewall des ldhost neu:
150
151 {{code language="bash"}}
152 root@ldhosts:~ # /etc/init.d/shorewall restart
153 {{/code}}
154
Jens Gruber 35.2 155
156 == __**Zertifikat für Rev-Proxy erstellen und prüfen**__ ==
157
158 Damit die Verbindung gesichert werden kann, wird ein Let's Encrypt Zertifikat benötigt. Dieses können Sie nach folgender Anleitung erstellen:
159
160 ====== __acmetool__ ======
161
162 Wechseln Sie in den puppeteer Container:
163
164 {{code language="bash"}}
165 root@ldhost:~ # lxc-ssh -n puppeteer
166 {{/code}}
167
168 Fordern Sie das Zertifikat mit folgendem Befehl an (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):
169
170 {{code language="bash"}}
171 root@puppeteer:~ # acmetool want kopano.SCHULKUERZEL.logoip.de
172 {{/code}}
173
174 ====== __acme.sh__ ======
175
176 Wechseln Sie in den puppeteer Container:
177
178 {{code language="bash"}}
179 root@ldhost:~ # lxc-ssh -n puppeteer
180 {{/code}}
181
182
183 Wechseln Sie im puppeteer Container in die Umgebung für das Verwalten der Zertifikate:
184
185 {{code language="bash"}}
186 root@puppeteer:~ # sle
187 {{/code}}
188
189
190 Beantragen Sie ein neues Zertifikat mit folgendem Befehl (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):
191
192 {{code language="bash"}}
193 le-acme@puppeteer:~ $ issue kopano.SCHULKUERZEL.logoip.de
194 {{/code}}
195
196
197 Um das verteilen der Zertifikate zu beschleunigen können Sie ggf. einen prun im puppeteer und rev-proxy Container durchführen:
198
199 {{code language="bash"}}
200 root@puppeteer:~ # prun
201 root@rev-proxy:~ # prun
202 {{/code}}
203
204
Jens Gruber 34.2 205 == (% style="color:#000000" %)**__LDAP Attribute__**(%%) ==
206
Jens Gruber 21.2 207 (% style="color:#000000" %)Standardmäßig werden folgende Attribute an die externe LDAP Schnittstelle weitergegeben:
Jens Gruber 19.2 208
209 {{code language="bash"}}
210 entry, cn, displayName, gidnumber, givenName, mail, member, memberOf, memberUid, o, objectClass, ou, sn, title, uid, uidnumber, uniqueMember, ldObjectType, ldRole
211 {{/code}}
Jens Gruber 21.2 212
213
Alexander Kruck 25.1 214 (% style="color:#000000" %)Sollen zusätzliche Attribute an die externe Schnittstelle weitergegeben werden, so müssen Sie diese in folgender Datei im Puppeteer Container wie folgt abändern/erstellen:
Jens Gruber 21.2 215
216 {{code language="bash"}}
217 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/ldhost.yaml
218
219 #Ist die Datei nicht vorhanden bitte wie folgt anpassen (Im Beispiel werden die Attribute ldBirthday & ldGender hinzugefügt):
220
221 ---
222 ld_legacy::ldap::ldap_ro_atts:
223 - ldBirtday
224 - ldGender
225 {{/code}}
226
227
Alexander Kruck 25.1 228 (% style="color:#000000" %)Danach müssen Sie die Änderungen ins Git übernehmen:
Jens Gruber 21.2 229
230 {{code language="bash"}}
231 root@puppeteer:~ # cd /etc/logodidact/
232 root@puppeteer:/etc/logodidact # git add .
233 root@puppeteer:/etc/logodidact # git coomit -am "LDAP Attribute in der ldhost.yaml hinzugefügt"
234 {{/code}}
235
Jens Gruber 24.1 236
Alexander Kruck 25.1 237 (% style="color:#000000" %)Um den Prozess zu beschleunigen bietet sich ein prun im ldhost an. Damit werden die Änderungen sofort an den logosrv weitergeleitet:
Jens Gruber 24.1 238
Jens Gruber 21.2 239 {{code language="bash"}}
240 root@ldhost:~ # prun
241 {{/code}}
242
243
Jonas Mayer 32.1 244 (% style="color:#000000" %)Die angepassten ACL-Änderungen können zur Kontrolle im logosrv in der Konfigurationsdatei slapd.puppet.conf angeschaut werden:
Jens Gruber 21.2 245
246 {{code language="bash"}}
247 root@logosrv:~ # cat /etc/ldap/slapd.puppet.conf
248 {{/code}}