Zuletzt geändert von Jonas Mayer am 2022/05/25 00:02

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
Jonas Mayer 48.1 13 == (% style="color:#000000" %)__**Übersicht der Benutzer**__(%%) ==
Jens Gruber 3.1 14
15
Jonas Mayer 52.1 16 === (% style="color:#000000" %)**LDAP-Admin Benutzer**(%%) ===
Jonas Mayer 48.1 17
Jonas Mayer 49.1 18 (% style="color:#000000; font-size:20px" %)__Nutzungsgebiet:__
Jonas Mayer 48.1 19
Jonas Mayer 32.1 20 (% 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 21
Jonas Mayer 55.1 22 (% style="color:#000000" %)Sollten die Daten des LDAP-Admins in unbefugte Hände gelangen, stellt dies ein massives datenschutz- und sicherheitsrelevantes Problem dar. **__Von einem externen Gebrauch des Benutzerkontos ist daher strikt abzuraten!__**
Jens Gruber 3.1 23
24
Jonas Mayer 49.1 25 (% class="wikigeneratedid" id="HZugangsdaten:" %)
26 (% style="color:#000000; font-size:20px" %)__Zugangsdaten:__
Jens Gruber 3.1 27
Jonas Mayer 48.1 28 (% class="wikigeneratedid" id="HBenutzername" %)
Jonas Mayer 32.1 29 (% style="color:#000000" %)Der Benutzername des LDAP Admins lautet:
Jens Gruber 3.1 30
Jens Gruber 3.2 31 {{code language="bash"}}
Jens Gruber 14.2 32 cn=ldap-admin
Jens Gruber 3.2 33 {{/code}}
Jens Gruber 3.1 34
35
Jonas Mayer 48.1 36 (% class="wikigeneratedid" id="HAttributedesBenutzernamens" %)
Jonas Mayer 49.1 37 (% style="color:#000000; font-size:16px" %)__Vollständiger Benutzername__
Jens Gruber 14.2 38
Jonas Mayer 32.1 39 (% 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 40
David Haido 30.1 41 (% style="color:#000000" %)[[image:1651243652049-471.png]]
Jens Gruber 14.2 42
43
Jonas Mayer 32.1 44 (% 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 45
46 {{code language="bash"}}
47 cn=ldap-admin,dc=schule,dc=local
48 {{/code}}
49
50
Jonas Mayer 48.1 51 (% class="wikigeneratedid" id="HKennwort" %)
Jonas Mayer 49.1 52 (% style="color:#000000; font-size:16px" %)__Kennwort__
Jens Gruber 14.2 53
Jens Gruber 3.2 54 (% style="color:#000000" %)Das Kennwort ist im logosrv unter folgendem Pfad einsehbar:
Jens Gruber 3.1 55
Jens Gruber 3.2 56 {{code language="bash"}}
57 root@logosrv:~ # cat /etc/ldap.secret
58 {{/code}}
Jens Gruber 3.1 59
Jonas Mayer 54.1 60 (% style="color:#000000" %)Optional kann man das Passwort (sowie die gültige BaseDN des Servers als Teil des Benutzernamens) auch mit folgendem Befehl aus dem Abschnitt "Credentials" entnehmen:
Jens Gruber 3.1 61
Jens Gruber 4.1 62 {{code language="bash"}}
63 root@logosrv:~ # ldconf -o
64 {{/code}}
65
66
Jonas Mayer 50.1 67 === (% style="color:#000000" %)**LDAP-ReadOnly (ldap-ro) Benutzer**(%%) ===
Jens Gruber 3.1 68
Jonas Mayer 50.1 69 (% class="wikigeneratedid" id="HNutzungsgebiet:" %)
Jonas Mayer 51.1 70 (% style="color:#000000; font-size:20px" %)__Nutzungsgebiet:__
Jens Gruber 3.1 71
Jonas Mayer 55.1 72 (% style="color:#000000" %)Der LDAP-ReadOnly Benutzer ist für die Verwendung in externen Diensten vorgesehen.
Jens Gruber 3.1 73
Jonas Mayer 55.1 74 (% style="color:#000000" %)Mögliche Nutzungsszenarien wären unter anderem die Anbindung  von extern gehosteten Webdiensten (z.B. Moodle, WebUntis oder Nextcloud) an die Benutzerdatenbank des LogoDIDACT Servers per LDAP-Protokoll.
Jens Gruber 14.2 75
Jens Gruber 3.2 76
Jonas Mayer 50.1 77 (% class="wikigeneratedid" id="HBenutzername26Passwort:" %)
Jonas Mayer 51.1 78 (% style="color:#000000; font-size:20px" %)__Zugangsdaten:__
Jens Gruber 3.2 79
Jonas Mayer 50.1 80 (% class="wikigeneratedid" id="HBenutzername" %)
81 (% style="color:#000000" %)Der Benutzername des LDAP ReadOnly Benutzers lautet:
82
Jens Gruber 3.1 83 {{code language="bash"}}
Jens Gruber 14.2 84 cn=ldap-ro
Jens Gruber 3.1 85 {{/code}}
86
87
Jonas Mayer 51.1 88 (% style="color:#000000; font-size:16px" %)__Vollständiger Benutzername__
Jonas Mayer 50.1 89
Jonas Mayer 32.1 90 (% 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 91
David Haido 30.1 92 (% style="color:#000000" %)[[image:1651243652049-471.png]]
Jens Gruber 14.2 93
94
Jonas Mayer 55.1 95 (% style="color:#000000" %)Im Unterschied zum vorherigen Benutzer steckt das Konto verschachtelt in dem Unterobjekt //OU=services//. Dadurch ergibt sich nachfolgender, vollständiger Benutzername (sogenannter //Distinguished Name//):
Jens Gruber 27.1 96
97 {{code language="bash"}}
Jonas Mayer 32.1 98 cn=ldap-ro,ou=services,dc=schule,dc=local
Jens Gruber 27.1 99 {{/code}}
100
101
Jonas Mayer 50.1 102 (% class="wikigeneratedid" id="HKennwort" %)
Jonas Mayer 51.1 103 (% style="color:#000000; font-size:16px" %)__Kennwort__
Jens Gruber 14.2 104
Jens Gruber 3.2 105 (% style="color:#000000" %)Das Kennwort ist im logosrv unter folgendem Pfad einsehbar:
106
Jens Gruber 3.1 107 {{code language="bash"}}
108 root@logosrv:~ # cat /etc/ldap.ro.secret
109 {{/code}}
Jens Gruber 19.2 110
111
Jonas Mayer 51.1 112 (% 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. 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 113
Jonas Mayer 33.1 114
Jonas Mayer 66.1 115 == (% style="color:#000000" %)__**Konfiguration zur Freischaltung von OpenLDAP via Rev-Proxy**__(%%) ==
Jens Gruber 59.1 116
Jonas Mayer 66.1 117 Um den Verzeichnisdienst mit signiertem Let's Encrypt per nginx-stream freizuschalten, müssen Sie im Puppeteer-Container die Konfigurationsdatei {{box}}rev-proxy.yaml{{/box}} anlegen. Sollte diese bereits vorhanden sein, muss diese stattdessen bearbeitet werden.
Jens Gruber 59.1 118
119
Jonas Mayer 66.1 120 Wechseln Sie in das Verzeichnis {{box}}/etc/logodidact/hiera/custom.d/{{/box}} im Puppeteer Container:
Jens Gruber 59.1 121
122 {{code language="bash"}}
123 root@puppeteer:~ # cd /etc/logodidact/hiera/custom.d/
124 {{/code}}
125
126
Jonas Mayer 66.1 127 Erstellen Sie die Datei {{box}}rev-proxy.yaml{{/box}} bzw. fügen Sie den Inhalt aus dem nachfolgenden Schritt darin hinzu, falls die Datei bereits vorhanden ist:
Jens Gruber 59.1 128
129 {{code language="bash"}}
130 root@puppeteer:/etc/logodidact/hiera/custom.d # vim rev-proxy.yaml
131 {{/code}}
132
133
Jonas Mayer 66.1 134 Fügen Sie folgenden Konfigurationsabschnitt zur Konfigurationsdatei hinzu und ersetzen Sie **SCHULKUERZEL** in der zweiten Zeile durch den passenden ShortName der Schule:
Jens Gruber 59.1 135
136 {{code language="bash"}}
137 ld_rproxy::hosts:
Jonas Mayer 66.1 138   ldaps.SCHULKUERZEL.logoip.de:
Jens Gruber 59.1 139     type: stream
140     template: ldap
141     ensure: present
142 {{/code}}
143
144
Jonas Mayer 66.1 145 Übernehmen Sie die Änderungen ins Git:
Jens Gruber 59.1 146
147 {{code language="bash"}}
148 root@puppeteer:~ # cd /etc/logodidact/
149 root@puppeteer:/etc/logodidact # git add .
150 root@puppeteer:/etc/logodidact # git coomit -am "rev-proxy.yaml angelegt."
151 {{/code}}
152
153
Jonas Mayer 66.1 154 Führen Sie einen {{box}}prun{{/box}} im rev-proxy Container aus, um die Freischaltung des LDAPS-Tunnels zu aktivieren:
Jens Gruber 59.1 155
156 {{code language="bash"}}
157 root@rev-proxy:~ # prun
158 {{/code}}
159
160
Jonas Mayer 67.1 161 == __**Ports über Firewall vom Internet an Rev-Proxy weiterleiten**__ ==
Jens Gruber 19.2 162
Jonas Mayer 51.1 163 Damit externe LDAPS-Verbindungen zum Server möglich werden, muss der TCP-Port 636 vom vorgeschalteten Router auf die externe IP-Adresse des LogoDIDACT Servers weitergeleitet werden. Vom ldhost wird die Verbindung dann entgegengenommen und abermals an den Rev-Proxy LXC-Container weitergeleitet. Die Einrichtung der zugehörige Poerweiterleitungs-Regel wird nachfolgend beschrieben.
Jens Gruber 19.2 164
Jens Gruber 34.2 165
Jonas Mayer 51.1 166 Wechseln Sie vom ldhost aus in das Verzeichnis der Shorewall:
Jens Gruber 34.2 167
168 {{code language="bash"}}
169 root@ldhosts:~ # cd /etc/shorewall
170 {{/code}}
171
172
Jonas Mayer 66.1 173 Öffnen Sie die Datei {{box}}rules{{/box}} mit einem Editor ihrer Wahl:
Jens Gruber 34.2 174
175 {{code language="bash"}}
176 root@ldhost:/etc/shorewall # vim rules
177 {{/code}}
178
179
Jonas Mayer 66.1 180 Ergänzen Sie die Liste innerhalb der Datei um den obersten DNAT-Eintrag (lila eingefärbte Zeile). Dadurch werden externe Verbindungsanfragen auf Port 636 (LDAPS) vom ldhost zum LXC-Container rev-proxy weitergeleitet, so wie im Schaubild am Anfang des Artikels abgebildet. Falls diese Regel bereits vorhanden ist, können Sie den Schritt überspringen.
Jens Gruber 34.2 181
Jonas Mayer 45.1 182 (% class="box" %)
183 (((
184 (% style="color:#16a085" %)###
Jonas Mayer 46.1 185 # Shorewall version 4.0##(%%)
Jonas Mayer 51.1 186 (% style="color:#16a085" %)#(%%)
Jonas Mayer 55.1 187 (% style="color:#8e44ad" %)##**DNAT ext dmz:172.28.29.3 tcp 636**##(%%)
188 ##DNAT ext dmz:172.28.29.3 tcp 80,443
Jens Gruber 34.2 189 DNAT ext dmz:172.28.29.2 tcp 1:21
190 DNAT ext dmz:172.28.29.2 tcp 23:2221
191 DNAT ext dmz:172.28.29.2 tcp 2223:65535
Jonas Mayer 45.1 192 DNAT ext dmz:172.28.29.2 udp 1:65535##
193 )))
Jens Gruber 34.2 194
195
Jonas Mayer 66.1 196 Starten Sie nun die Firewall am ldhost neu:
Jens Gruber 34.2 197
198 {{code language="bash"}}
Jonas Mayer 66.1 199 root@ldhosts:~ # systemctl restart shorewall.service
Jens Gruber 34.2 200 {{/code}}
201
Jens Gruber 35.2 202
Jonas Mayer 68.1 203 == __**SSL-Zertifikat für Rev-Proxy erstellen**__ ==
Jens Gruber 35.2 204
Jonas Mayer 53.1 205 Damit die Verbindung gesichert werden kann, wird ein Let's Encrypt Zertifikat benötigt. Dieses können Sie - abhängig vom zu Grunde liegenden Tool - mit den folgenden Kommandos im Puppeteer-Container erstellen.
Jens Gruber 35.2 206
Jonas Mayer 52.1 207 === __acmetool__ ===
Jens Gruber 35.2 208
209 Wechseln Sie in den puppeteer Container:
210
211 {{code language="bash"}}
212 root@ldhost:~ # lxc-ssh -n puppeteer
213 {{/code}}
214
215 Fordern Sie das Zertifikat mit folgendem Befehl an (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):
216
217 {{code language="bash"}}
Jonas Mayer 66.1 218 root@puppeteer:~ # acmetool want ldaps.SCHULKUERZEL.logoip.de
Jens Gruber 35.2 219 {{/code}}
220
Jonas Mayer 52.1 221 === __acme.sh__ ===
Jens Gruber 35.2 222
223 Wechseln Sie in den puppeteer Container:
224
225 {{code language="bash"}}
226 root@ldhost:~ # lxc-ssh -n puppeteer
227 {{/code}}
228
229
230 Wechseln Sie im puppeteer Container in die Umgebung für das Verwalten der Zertifikate:
231
232 {{code language="bash"}}
233 root@puppeteer:~ # sle
234 {{/code}}
235
236
237 Beantragen Sie ein neues Zertifikat mit folgendem Befehl (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):
238
239 {{code language="bash"}}
Jonas Mayer 66.1 240 le-acme@puppeteer:~ $ issue ldaps.SCHULKUERZEL.logoip.de
Jens Gruber 35.2 241 {{/code}}
242
243
Jonas Mayer 53.1 244 Um das Verteilen der Zertifikate zu beschleunigen, können Sie einen gezielten 'prun' im puppeteer Container gefolgt von einen weiteren 'prun' im rev-proxy Container durchführen:
Jens Gruber 35.2 245
246 {{code language="bash"}}
247 root@puppeteer:~ # prun
Jonas Mayer 53.1 248
Jens Gruber 35.2 249 root@rev-proxy:~ # prun
250 {{/code}}
251
252
Jens Gruber 56.1 253
Jonas Mayer 53.1 254 == (% style="color:#000000" %)**__Weitere LDAP Attribute für ReadOnly-Benutzer freischalten__**(%%) ==
Jens Gruber 34.2 255
Jens Gruber 21.2 256 (% style="color:#000000" %)Standardmäßig werden folgende Attribute an die externe LDAP Schnittstelle weitergegeben:
Jens Gruber 19.2 257
258 {{code language="bash"}}
259 entry, cn, displayName, gidnumber, givenName, mail, member, memberOf, memberUid, o, objectClass, ou, sn, title, uid, uidnumber, uniqueMember, ldObjectType, ldRole
260 {{/code}}
Jens Gruber 21.2 261
262
Alexander Kruck 25.1 263 (% 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 264
265 {{code language="bash"}}
266 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/ldhost.yaml
267
268 #Ist die Datei nicht vorhanden bitte wie folgt anpassen (Im Beispiel werden die Attribute ldBirthday & ldGender hinzugefügt):
269
270 ---
271 ld_legacy::ldap::ldap_ro_atts:
272 - ldBirtday
273 - ldGender
274 {{/code}}
275
276
Alexander Kruck 25.1 277 (% style="color:#000000" %)Danach müssen Sie die Änderungen ins Git übernehmen:
Jens Gruber 21.2 278
279 {{code language="bash"}}
280 root@puppeteer:~ # cd /etc/logodidact/
281 root@puppeteer:/etc/logodidact # git add .
282 root@puppeteer:/etc/logodidact # git coomit -am "LDAP Attribute in der ldhost.yaml hinzugefügt"
283 {{/code}}
284
Jens Gruber 24.1 285
Alexander Kruck 25.1 286 (% 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 287
Jens Gruber 21.2 288 {{code language="bash"}}
289 root@ldhost:~ # prun
290 {{/code}}
291
292
Jonas Mayer 32.1 293 (% 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 294
295 {{code language="bash"}}
296 root@logosrv:~ # cat /etc/ldap/slapd.puppet.conf
297 {{/code}}