Version 56.1 von Jens Gruber am 2022/05/05 11:42

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
Jens Gruber 34.2 115 == __**Ports über Firewall an Rev-Proxy weiterleiten**__ ==
Jens Gruber 19.2 116
Jonas Mayer 51.1 117 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 118
Jens Gruber 34.2 119
Jonas Mayer 51.1 120 Wechseln Sie vom ldhost aus in das Verzeichnis der Shorewall:
Jens Gruber 34.2 121
122 {{code language="bash"}}
123 root@ldhosts:~ # cd /etc/shorewall
124 {{/code}}
125
126
127 Öffnen Sie die Datei rules mit einem Editor ihrer Wahl:
128
129 {{code language="bash"}}
130 root@ldhost:/etc/shorewall # vim rules
131 {{/code}}
132
133
Jonas Mayer 51.1 134 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 rev-proxy LXC-Container 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 135
Jonas Mayer 45.1 136 (% class="box" %)
137 (((
138 (% style="color:#16a085" %)###
Jonas Mayer 46.1 139 # Shorewall version 4.0##(%%)
Jonas Mayer 51.1 140 (% style="color:#16a085" %)#(%%)
Jonas Mayer 55.1 141 (% style="color:#8e44ad" %)##**DNAT ext dmz:172.28.29.3 tcp 636**##(%%)
142 ##DNAT ext dmz:172.28.29.3 tcp 80,443
Jens Gruber 34.2 143 DNAT ext dmz:172.28.29.2 tcp 1:21
144 DNAT ext dmz:172.28.29.2 tcp 23:2221
145 DNAT ext dmz:172.28.29.2 tcp 2223:65535
Jonas Mayer 45.1 146 DNAT ext dmz:172.28.29.2 udp 1:65535##
147 )))
Jens Gruber 34.2 148
149
150 Starten Sie nun die Firewall des ldhost neu:
151
152 {{code language="bash"}}
153 root@ldhosts:~ # /etc/init.d/shorewall restart
154 {{/code}}
155
Jens Gruber 35.2 156
157 == __**Zertifikat für Rev-Proxy erstellen und prüfen**__ ==
158
Jonas Mayer 53.1 159 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 160
Jonas Mayer 52.1 161 === __acmetool__ ===
Jens Gruber 35.2 162
163 Wechseln Sie in den puppeteer Container:
164
165 {{code language="bash"}}
166 root@ldhost:~ # lxc-ssh -n puppeteer
167 {{/code}}
168
169 Fordern Sie das Zertifikat mit folgendem Befehl an (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):
170
171 {{code language="bash"}}
172 root@puppeteer:~ # acmetool want kopano.SCHULKUERZEL.logoip.de
173 {{/code}}
174
Jonas Mayer 52.1 175 === __acme.sh__ ===
Jens Gruber 35.2 176
177 Wechseln Sie in den puppeteer Container:
178
179 {{code language="bash"}}
180 root@ldhost:~ # lxc-ssh -n puppeteer
181 {{/code}}
182
183
184 Wechseln Sie im puppeteer Container in die Umgebung für das Verwalten der Zertifikate:
185
186 {{code language="bash"}}
187 root@puppeteer:~ # sle
188 {{/code}}
189
190
191 Beantragen Sie ein neues Zertifikat mit folgendem Befehl (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):
192
193 {{code language="bash"}}
194 le-acme@puppeteer:~ $ issue kopano.SCHULKUERZEL.logoip.de
195 {{/code}}
196
197
Jonas Mayer 53.1 198 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 199
200 {{code language="bash"}}
201 root@puppeteer:~ # prun
Jonas Mayer 53.1 202
Jens Gruber 35.2 203 root@rev-proxy:~ # prun
204 {{/code}}
205
206
Jens Gruber 56.1 207 == __**Konfiguration für LDAP im Rev-Proxy**__ ==
208
209 Nun müssen Sie im Puppeteer Container eine rev-proxy.yaml anlegen. Sollte diese bereits vorhanden sein, muss diese bearbeitet werden.
210
211
212 Wechseln Sie in das Verzeichnis /etc/logodidact/hiera/custom.d/ im Puppeteer Container:
213
214 {{code language="bash"}}
215 root@puppeteer:~ # cd /etc/logodidact/hiera/custom.d/
216 {{/code}}
217
218
219 Erstellen Sie die rev-proxy-yaml
220
221 {{code language="bash"}}
222 root@puppeteer:/etc/logodidact/hiera/custom.d # vim rev-proxy.yaml
223 {{/code}}
224
225
226 Fügen Sie folgende Einstellungen in die yaml ein und ersetzen **musterstadt-gym** durch den Shortname der Schule:
227
228 {{code language="bash"}}
229 ---
230 ld_rproxy::hosts:
231   ldap.musterstadt-gym.logoip.de:
232     type: stream
233     template: ldap
234     ensure: present
235 {{/code}}
236
237
238 Übernehmen Sie die Änderungen ins git:
239
240 {{code language="bash"}}
241 root@puppeteer:~ # cd /etc/logodidact/
242 root@puppeteer:/etc/logodidact # git add .
243 root@puppeteer:/etc/logodidact # git coomit -am "rev-proxy.yaml angelegt."
244 {{/code}}
245
246
247 Führen Sie einen prun im rev-proxy Container aus:
248
249 {{code language="bash"}}
250 root@rev-proxy:~ # prun
251 {{/code}}
252
253 (% class="wikigeneratedid" %)
254
255
Jonas Mayer 53.1 256 == (% style="color:#000000" %)**__Weitere LDAP Attribute für ReadOnly-Benutzer freischalten__**(%%) ==
Jens Gruber 34.2 257
Jens Gruber 21.2 258 (% style="color:#000000" %)Standardmäßig werden folgende Attribute an die externe LDAP Schnittstelle weitergegeben:
Jens Gruber 19.2 259
260 {{code language="bash"}}
261 entry, cn, displayName, gidnumber, givenName, mail, member, memberOf, memberUid, o, objectClass, ou, sn, title, uid, uidnumber, uniqueMember, ldObjectType, ldRole
262 {{/code}}
Jens Gruber 21.2 263
264
Alexander Kruck 25.1 265 (% 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 266
267 {{code language="bash"}}
268 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/ldhost.yaml
269
270 #Ist die Datei nicht vorhanden bitte wie folgt anpassen (Im Beispiel werden die Attribute ldBirthday & ldGender hinzugefügt):
271
272 ---
273 ld_legacy::ldap::ldap_ro_atts:
274 - ldBirtday
275 - ldGender
276 {{/code}}
277
278
Alexander Kruck 25.1 279 (% style="color:#000000" %)Danach müssen Sie die Änderungen ins Git übernehmen:
Jens Gruber 21.2 280
281 {{code language="bash"}}
282 root@puppeteer:~ # cd /etc/logodidact/
283 root@puppeteer:/etc/logodidact # git add .
284 root@puppeteer:/etc/logodidact # git coomit -am "LDAP Attribute in der ldhost.yaml hinzugefügt"
285 {{/code}}
286
Jens Gruber 24.1 287
Alexander Kruck 25.1 288 (% 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 289
Jens Gruber 21.2 290 {{code language="bash"}}
291 root@ldhost:~ # prun
292 {{/code}}
293
294
Jonas Mayer 32.1 295 (% 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 296
297 {{code language="bash"}}
298 root@logosrv:~ # cat /etc/ldap/slapd.puppet.conf
299 {{/code}}