Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


Vorhergehende Überarbeitung
centos:ldap_c7:tecbind [22.07.2019 15:03. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Authentifikation mit technischem User beim OpenLDAP Servers unter CentOS 7.x ======
 +{{:centos:ldap-logo.png?nolink&167 |OpenLDAP Logo}}
 +
 +Als wesentliche Erweiterung unseres Open-LDAP-Servers werden wir nun unseren Daemon so konfigurieren, dass keine anonymen LDAP Abfragen mehr zugelassen werden, sondern hierzu einen speziellen technischen User verwenden. 
 +
 +In abgesicherten Umgebungen wird der Zugriff auf den LDAP-Server nicht von jedermann ohne Passwort, auch //anonymous bind// genannt unterbunden. Stattdessen muss ich der Klient bei den Anfragen eines technischen Users bedienen, der auch ein Passwort benutzt, welches dem LDAP-Server bekannt ist.
 +
 +===== technischer User für LDAP-Zugriff =====
 +Bei diesem Anwendungs- und Konfigurationsbeispiel gehen wir von einem bereits installiertem und konfiguriertem OpenLDAP-Server aus, wie in den Kapiteln **I** - **III** der Beschreibung zum  **[[centos:ldap_c7:start|OpenLDAP Server unter CentOS 7.x]]** beschrieben.
 +
 +==== Konfiguration ====
 +Im ersten Schritt werden wir uns nun einen eigenen speziellen technischen User anlegen, mit dem später die Anfragen an unseren OpenLDAp-Server gerichtet werden sollen.
 +
 +Für die Befüllung mit Nutzdaten, die aus **Distinguished Names** (**DN**) und einem eindeutigen Objektnamen bestehen, müssen hierzu in den **Directory Information Tree** (**DIT**), einer hierarchischen Baumstruktur eingefügt werden.
 +
 +Wie jedes andere Objekt in unserem Open-LDAP-Verzeichnis werden wir für den technischen User, der für die Anmeldung am Server (**bind**) benötigt und verwendet werden wird, ein Objekt mit dem **Common Name** (**CN**) //**Technischer_User**// und den **Domain Components**(**DC**) //**nausch**// und //**org**// für die Domäne nausch.org im **DIT** hinterlegen.
 +
 +Wie auch schon beim Erstellen des **[[centos:ldap_c7:install?&#master-passwort_erstellen|Master-Passwortes]]** werden wir nun für den //**Bind-User**// ein separates Passwort vergeben und so den Zugriff absichern.
 +
 +Zur Generierung dieses Passwortes mit der Verschlüsselungsmethode SSHA - entsprechend einem SHA-1 Algorithmus (FIPS 160-1), verwenden wir wieder das Programm **/usr/sbin/slappasswd** mit folgendem Befehl aufgerufen: 
 +   # /usr/sbin/slappasswd -h {SSHA}
 +
 +   New password: 
 +   Re-enter new password: 
 +   {SSHA}YpKKoS1lV1AdAX1StGe1lTembvZW4XagnkLdWZ2Y4Xkw
 +
 +Dieses gekryptete Passwort hinterlegen wir nun in einer passenden ldif-Datei.
 +   # vim /etc/openldap/ldif/cn\=config_bindUSER.ldif
 +
 +<file ldif /etc/openldap/ldif/cn=config_bindUSER.ldif># Django : 2015-07-17
 +# Anlegen eines technischen Users für die Anmeldung am Server (bind) 
 +# https://dokuwiki.nausch.org/doku.php/centos:ldap_c7:tecbind#konfiguration
 +
 +dn: cn=Technischeruser,dc=nausch,dc=org
 +cn: Technischeruser
 +objectClass: organizationalRole
 +objectClass: simpleSecurityObject
 +objectClass: top
 +userPassword: {SSHA}YpKKoS1lV1AdAX1StGe1lTembvZW4XagnkLdWZ2Y4Xkw
 +</file>
 +
 +Zum Importieren unseres **DITs** verwenden wir nun folgenden Aufruf. Das Passwort nach dem wir hier gefragt werden, haben wir im Kapitel **[[centos:ldap_c7:install#manager-passwort|Manager-Passwort]]** bei der **[[centos:ldap_c7:install|Installation unseres OpenLDAP Server unter CentOS 7.x]]** angelegt.
 +   # ldapadd -W -x -D cn=Manager,dc=nausch,dc=org -f /etc/openldap/ldif/cn\=config_bindUSER.ldif
 +
 +  Enter LDAP Password:
 +  adding new entry "cn=Technischeruser,dc=nausch,dc=org"
 +
 +==== Abfragetest ====
 +Anschließend überprüfen wir, ob die Daten unseres unser **Technischeruser** im DIT richtig angelegt wurde. 
 +
 +   # ldapsearch -W -x -b "dc=nausch,dc=org" "cn=Technischeruser" -D \
 +                "cn=Technischeruser,dc=nausch,dc=org" -LLL \
 +                -H ldaps://openldap.dmz.nausch.org
 +
 +  Enter LDAP Password:
 +
 +  dn: cn=Technischeruser,dc=nausch,dc=org
 +  cn: Technischeruser
 +  objectClass: organizationalRole
 +  objectClass: simpleSecurityObject
 +  objectClass: top
 +  userPassword:: YpKKoS1lV1AdAX1StGe1lTembvZW4XagnkLdWZ2Y4Xkw
 +
 +Im Logfile des slapd-Daemon wird unsere erfolgreiche Abfrage entsprechend protokolliert. 
 +   # less /var/log/ldap.log
 +
 +  Jul 17 09:43:05 vml000037 slapd[14264]: conn=1041 fd=13 ACCEPT from IP=10.0.0.37:38446 (IP=0.0.0.0:636)
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 fd=13 TLS established tls_ssf=128 ssf=128
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 op=0 BIND dn="cn=Technischeruser,dc=nausch,dc=org" method=128
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 op=0 BIND dn="cn=technischeruser,dc=nausch,dc=org" mech=SIMPLE ssf=0
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 op=0 RESULT tag=97 err=0 text=
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 op=1 SRCH base="dc=nausch,dc=org" scope=2 deref=0 filter="(cn=technischer_user)"
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 op=2 UNBIND
 +  Jul 17 09:43:06 vml000037 slapd[14264]: conn=1041 fd=13 closed
 +
 +===== Deaktivierung des "Anonymous bind" beim LDAP-Zugriff =====
 +In unserer abgesicherten Umgebung sollen ausschließlich authentifizierte Abfragen und Zugriffe auf unseren OpenLADP-Server gestattet sein. Hierzu haben wir uns im vorherigem **[[centos:ldap_c7:tecbind?&#konfiguration|Abschnitt]]** eigens einen technischen Useraccount angelegt.
 +
 +==== Konfiguration ====
 +Damit unser Open-LDAP Daemon **__keine__**  anonymen Anfragen, oder genauer gesagt **__keinen__**  zur Verfügung stellen wird, sind nachfolgende Ergänzungen an unserer Konfiguration notwendig. Hierzu werden wir die Directive **//olcDisallows//** auf **bind_anon** und die Directive **//olcRequires//** auf **authc** setzen.
 +
 +Zum Setzen und Ändern der beiden Directiven legen wir uns nun wieder eine passende ldif-Datei an. 
 +   # vim /etc/openldap/ldif/cn\=config_bindANON.ldif
 +
 +<file ldif /etc/openldap/ldif/cn=config_bindANON.ldif># Django : 2015-07-17
 +# Sperren des „anonymous bind“ und  Authentifizierung erzwingen
 +# https://dokuwiki.nausch.org/doku.php/centos:ldap_c7:tecbind?&#deaktivierung_des_anonymous_bind_beim_ldap-zugriff
 +
 +dn: cn=config
 +changetype: modify
 +add: olcDisallows
 +olcDisallows: bind_anon
 +-
 +add: olcRequires
 +olcRequires: authc
 +</file>
 +
 +Wie bei der vorangegangenen Änderungen/Konfigurationsbeispielen aktivieren wir nun die Änderungen aus der Datei //**/etc/openldap/ldif/cn=config_bindANON.ldif**// mit folgendem Aufruf.
 +   # ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/cn\=config_bindANON.ldif
 +
 +  Enter LDAP Password:
 +
 +  modifying entry "cn=config"
 +
 +==== Abfragetest ====
 +=== Konfiuration ===
 +Anschließend überprüfen wir, ob die Daten unseres unser **Technischeruser** im DIT richtig angelegt wurde. 
 +
 +   # ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" -LLL -H ldaps://openldap.dmz.nausch.org
 +
 +  Enter LDAP Password:
 +
 +<code>dn: cn=config
 +objectClass: olcGlobal
 +cn: config
 +olcArgsFile: /var/run/openldap/slapd.args
 +olcIdleTimeout: 30
 +olcPidFile: /var/run/openldap/slapd.pid
 +olcReferral: ldap://openldap.dmz.nausch.org
 +olcTimeLimit: 15
 +olcTLSCACertificateFile: /etc/pki/tls/certs/CAcert_chain.pem
 +olcTLSCACertificatePath: /etc/openldap/certs
 +olcTLSCertificateFile: /etc/pki/tls/certs/openldap.dmz.nausch.org.pem
 +olcTLSCertificateKeyFile: /etc/pki/tls/private/openldap_serverkey.pem
 +olcTLSCipherSuite: HIGH
 +olcTLSDHParamFile: /etc/pki/tls/private/dh_4096.pem
 +olcTLSProtocolMin: 3.1
 +olcDisallows: bind_anon
 +olcRequires: authc</code>
 +
 +Im Logfile des slapd-Daemon wird unsere erfolgreiche Abfrage entsprechend protokolliert. 
 +   # less /var/log/ldap.log
 +
 +<code>Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 fd=13 ACCEPT from IP=10.0.0.37:41464 (IP=0.0.0.0:636)
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 fd=13 TLS established tls_ssf=128 ssf=128
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 op=0 BIND dn="cn=config" method=128
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 op=0 BIND dn="cn=config" mech=SIMPLE ssf=0
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 op=0 RESULT tag=97 err=0 text=
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 op=1 SRCH base="cn=config" scope=2 deref=0 filter="(objectClass=olcGlobal)"
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 op=2 UNBIND
 +Jul 17 11:40:01 vml000037 slapd[14264]: conn=1062 fd=13 closed</code>
 +
 +=== LDAP-Anfragen ===
 +== ungülige Anfrage - anonymous-bind ==
 +Versuchen wir nun eine anonymous-bind Abfrage gegen unseren OpenLDAP-Server hat dies keinen Erfolg und wir bekommen einen entsprechenden Warnhinweis. 
 +   # ldapsearch -x -LLL -H ldap://ldap.dmz.nausch.org -b "dc=nausch,dc=org" "uid=django"
 +
 +  ldap_bind: Inappropriate authentication (48)
 +          additional info: anonymous bind disallowed
 +
 +Der Versuch sich mit dem OpenLDAP mit einem //anonymous bind// zu verbinden scheiterte natürlich. 
 +
 +Die Abfrage unseres Nutzers //django// erfolgt nun richtiger Weise natürlich mit Hilfe unseres technischen Users //Technischeruser//, den wir uns hierzu zuvor **[[centos:ldap_c7:tecbind?&#technischer_user_fuer_ldap-zugriff|konfiguriert]]** hatten. 
 +
 +== gültige Abfrage ==
 +Nun wollen wir überprüfen, ob wir uns mit den Daten unseres technischen Users mit unserem OpenLDAP-server verbinden und auch Daten abfragen können. 
 +
 +   # ldapsearch -W -x -b "dc=nausch,dc=org" "uid=django" \
 +                -D "cn=Technischeruser,dc=nausch,dc=org" -LLL \
 +                -H ldaps://openldap.dmz.nausch.org
 +
 +  Enter LDAP Password:
 +
 +<code>dn: uid=django,ou=People,dc=nausch,dc=org
 +uid: django
 +cn: django
 +objectClass: account
 +objectClass: posixAccount
 +objectClass: top
 +objectClass: shadowAccount
 +userPassword:: $6$34os/lDDY2cAEfyW$fqe3PP3Qo5FDAtC724a7plCieqgeYCWONkaKgYnQKm5
 + iDx/3WtCq8Tv0VA2MLkYAhW9/IySlhFIJZIU0UyiOv/hUdjBWQTJNTGtZQWhXOS9JeVNsaEZJSlpJ
 + VTBVeWlPdi8=
 +shadowLastChange: 16617
 +shadowMin: 0
 +shadowMax: 99999
 +shadowWarning: 7
 +loginShell: /bin/bash
 +uidNumber: 1000
 +gidNumber: 1000
 +homeDirectory: /home/django
 +gecos: django
 +
 +</code>
 +
 +Im Logfile des slapd-Daemon wird unsere erfolgreiche Abfrage entsprechend protokolliert. 
 +   # less /var/log/ldap.log
 +
 +  Jul 17 12:00:02 vml000037 slapd[14264]: conn=1068 fd=13 ACCEPT from IP=10.0.0.37:41850 (IP=0.0.0.0:636)
 +  Jul 17 12:00:02 vml000037 slapd[14264]: conn=1068 fd=13 TLS established tls_ssf=128 ssf=128
 +  Jul 17 12:00:02 vml000037 slapd[14264]: conn=1068 op=0 BIND dn="cn=Technischeruser,dc=nausch,dc=org" method=128
 +  Jul 17 12:00:02 vml000037 slapd[14264]: conn=1068 op=0 RESULT tag=97 err=49 text=
 +  Jul 17 12:00:02 vml000037 slapd[14264]: conn=1068 op=1 UNBIND
 +  Jul 17 12:00:02 vml000037 slapd[14264]: conn=1068 fd=13 closed
 +
 +== Abfrage ohne Passwort ==
 +Der Versuch, sich ohne Passwort anzumelden schlägt natürlich entsprechend fehl.
 +         # ldapsearch -W -x -b "dc=nausch,dc=org" "uid=django" \
 +                -D "cn=Technischeruser,dc=nausch,dc=org" -LLL \
 +                -H ldaps://openldap.dmz.nausch.org
 +
 +  Enter LDAP Password:
 +
 +  ldap_bind: Server is unwilling to perform (53)
 +          additional info: unauthenticated bind (DN with no password) disallowed
 +
 +Dieser Versuch wird natürlich im LDAP-Log entsprechend dokumentiert.
 +   # less /var/log/ldap.log
 +
 +  Jul 17 12:06:33 vml000037 slapd[14264]: conn=1069 fd=13 ACCEPT from IP=10.0.0.37:41969 (IP=0.0.0.0:636)
 +  Jul 17 12:06:33 vml000037 slapd[14264]: conn=1069 fd=13 TLS established tls_ssf=128 ssf=128
 +  Jul 17 12:06:33 vml000037 slapd[14264]: conn=1069 op=0 BIND dn="cn=Technischer_User,dc=nausch,dc=org" method=128
 +  Jul 17 12:06:33 vml000037 slapd[14264]: conn=1069 op=0 RESULT tag=97 err=53 text=unauthenticated bind (DN with no password) disallowed
 +  Jul 17 12:06:33 vml000037 slapd[14264]: conn=1069 op=1 UNBIND
 +  Jul 17 12:06:33 vml000037 slapd[14264]: conn=1069 fd=13 closed
 +
 +== Abfrage mit falschem Passwort ==
 +Zu guter letzt testen wir noch was passiert, wenn zwar der richtige User aber das falsche Passwort verwendet wurde.
 +
 +         # ldapsearch -W -x -b "dc=nausch,dc=org" "uid=django" \
 +                -D "cn=Technischeruser,dc=nausch,dc=org" -LLL \
 +                -H ldaps://openldap.dmz.nausch.org
 +
 +  Enter LDAP Password:
 +
 +  ldap_bind: Invalid credentials (49)
 +
 +Auch dies wurde im Logfile des slapd-Daemon natürlich entsprechend protokolliert. 
 +   # less /var/log/ldap.log
 +
 +  Jul 17 12:10:08 vml000037 slapd[14264]: conn=1070 fd=13 TLS established tls_ssf=128 ssf=128
 +  Jul 17 12:10:08 vml000037 slapd[14264]: conn=1070 op=0 BIND dn="cn=Technischer_User,dc=nausch,dc=org" method=128
 +  Jul 17 12:10:08 vml000037 slapd[14264]: conn=1070 op=0 RESULT tag=97 err=49 text=
 +  Jul 17 12:10:08 vml000037 slapd[14264]: conn=1070 op=1 UNBIND
 +  Jul 17 12:10:08 vml000037 slapd[14264]: conn=1070 fd=13 closed
 +
 +Der Error-Code **[[http://web500gw.sourceforge.net/errors.html|49]]** steht hierbei für
 +**LDAP_INVALID_CREDENTIALS**, also ungültige Anmeldedaten.
 +
 +===== Zugriffsrechte des (technischen User) beschränken =====
 +Da nicht jeder berechtigte Zugriff auf unseren OpenLDAP-Verzeichnisdienst auf alle Daten des DIT erhalten soll, werden wir nun die Berechtigungen noch feingranular setzen.
 +
 +==== Kontrolle der existierenden Berechtigungen ====
 +Mit Hilfe des nachfolgenden Befehls kontrollieren wir erst einmal, welche Zugriffsrechte in den aktuell enthaltenen Benutzerstrukturen im DIT enthalten sind. Somit kann man sich einen Überblick verschaffen, welche Anpassungen ggf. im DIT anschließend noch vorzunehmen sind. 
 +   # ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn=\config_DbIndex.ldif
 +
 +<code>SASL/EXTERNAL authentication started
 +SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
 +SASL SSF: 0
 +modifying entry "olcDatabase={2}hdb,cn=config"
 +
 +[root@vml000037 ldif]# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
 +Enter LDAP Password:
 +# extended LDIF
 +#
 +# LDAPv3
 +# base <olcDatabase={2}hdb,cn=config> with scope subtree
 +# filter: (objectclass=*)
 +# requesting: ALL
 +#
 +
 +# {2}hdb, config
 +dn: olcDatabase={2}hdb,cn=config
 +objectClass: olcDatabaseConfig
 +objectClass: olcHdbConfig
 +olcDatabase: {2}hdb
 +olcDbDirectory: /var/lib/ldap
 +olcSuffix: dc=nausch,dc=org
 +olcRootDN: cn=Manager,dc=nausch,dc=org
 +olcRootPW: {SSHA}lfeku/uaD4x1i$7n3931Le54U111
 +olcDbIndex: objectClass eq,pres
 +olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
 +olcDbIndex: uidNumber,gidNumber,loginShell eq,pres
 +olcDbIndex: uid,memberUid eq,pres,sub
 +olcDbIndex: nisMapName,nisMapEntry eq,pres,sub
 +olcDbIndex: uniqueMember eq,pres
 +
 +# search result
 +search: 2
 +result: 0 Success
 +
 +# numResponses: 2
 +# numEntries: 1</code>
 +
 +==== Definition der neuen Berechtigungen ====
 +Bevor wir nun mit Hilfe einer LDIF-Datei die Benutzerrechte anpassen, machen wir uns erst einmal Gedanken, wie diese nun genau abgestuft sein sollen.
 +
 +=== Attribute: „Passwort“ ===
 +Folgende Felder im DIT sollen für einzelne Benutzer mit unterschiedlicher Berechtigung entweder //lesend//, //schreibend// oder //nicht// zugegriffen werden, können: 
 +  * **userPassword**, 
 +  * **shadowLastChange**, 
 +  * **shadowMax** und
 +  * **shadowWarning**.
 +
 +Folgende Tabelle definiert die unterschiedlichen Berechtigungsklassen.
 +
 +^ **Zugriffsformulierung**     ^ **Benutzer**     ^ **Zugriffsberechtigung**   ^
 +| by self write | self (selbst) |schreiben  |
 +| by dn=„cn=Manager,dc=nausch,dc=org“ write | Manager |schreiben  |
 +| by dn=„cn=Technischeruser,dc=nausch,dc=org“ read | Technischeruser |lesen  |
 +| by anonymous auth | anonymous | authentifizieren  |
 +| by * none | //alle anderen//  |  **keinerlei Rechte** 
 +
 +Für die Konfiguration benötigen wir hierzu eine **olc**((**o**n-**l**ine **c**onfiguration))-Directive, die für obige Tabelle wie folgt aussieht (zur besseren Lesbarkeit hier umgebrochen!).
 +
 +  olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self 
 +     write by dn="cn=Manager,dc=nausch,dc=org" 
 +     write by dn="cn=Technischeruser,dc=nausch,dc=org" 
 +     read by anonymous auth by * none
 +
 +
 +=== Zugriff auf „Manager“ ===
 +Auf den Eintrag "cn=Manager,dc=nausch,dc=org" sollen folgende Berechtigungen gelten.
 +
 +^ **Zugriffsformulierung**     ^ **Benutzer**      ^ **Zugriffsberechtigung**   ^
 +| by self write        | self (selbst)    | schreiben  |
 +| by * none                | //alle anderen//  |  **keinerlei Rechte** 
 +
 +Für die Konfiguration benötigen wir hierzu natürlich auch eine **olc**((**o**n-**l**ine **c**onfiguration))-Directive, die für obige Tabelle wie folgt aussieht.
 +
 +  olcAccess: {1}to dn="cn=Manager,dc=nausch,dc=org" by self write by * none
 +
 +=== Zugriff auf „Technischeruser“ ===
 +Auf den Eintrag "cn=Technischeruser,dc=nausch,dc=org" sollen folgende Berechtigungen gelten.
 +
 +^ **Zugriffsformulierung**     ^ **Benutzer**      ^ **Zugriffsberechtigung**   ^
 +| by self write        | self (selbst)    | schreiben  |
 +| by dn=„cn=Manager,dc=nausch,dc=org“ write        | Manager    | schreiben  |
 +| by * none                | //alle anderen//  |  **keinerlei Rechte** 
 +
 +Für die Konfiguration benötigen wir hierzu eine **olc**((**o**n-**l**ine **c**onfiguration))-Directive, die für obige Tabelle wie folgt aussieht (zur besseren Lesbarkeit hier umgebrochen!).
 +
 +  olcAccess: {2}to dn="cn=Technischeruser,dc=nausch,dc=org" by self 
 +             write by dn="cn=Manager,dc=nausch,dc=org" 
 +             write by * none
 +
 +
 +=== Zugriff auf „Group“ der Domäne ===
 +Für die Gruppeneinträge unserer Domäne "dc=nausch,dc=org" sollen folgende Berechtigungen gelten.
 +
 +^ **Zugriffsformulierung**     ^ **Benutzer**     ^ **Zugriffsberechtigung**   ^
 +| by self write | self (selbst) |schreiben  |
 +| by dn=„cn=Manager,dc=nausch,dc=org“ write | Manager |schreiben  |
 +| by dn=„cn=Technischeruser,dc=nausch,dc=org“ read | Technischeruser |lesen  |
 +| by dn.exact,expand=„uid=$1,ou=Group,dc=nausch,dc=org“ read | //(Gruppen)mitglieder// | authentifizieren  |
 +| by * none | //alle anderen//  |  **keinerlei Rechte** 
 +
 +Für die Konfiguration benötigen wir hierzu auch noch eine **olc**((**o**n-**l**ine **c**onfiguration))-Directive, die für obige Tabelle wie folgt aussieht (zur besseren Lesbarkeit hier umgebrochen!).
 +  olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=nausch,dc=org" by self 
 +             write by dn="cn=Manager,dc=nausch,dc=org" 
 +             write by dn="cn=Technischeruser,dc=nausch,dc=org" 
 +             read by dn.exact,expand="uid=$1,ou=Group,dc=nausch,dc=org" read by * none
 +
 +=== Zugriff auf „People“ der Domäne ===
 +Für die Personeneinträge unserer Domäne "dc=nausch,dc=org" sollen folgende Berechtigungen gelten.
 +
 +^ **Zugriffsformulierung**     ^ **Benutzer**     ^ **Zugriffsberechtigung**   ^
 +| by self write | self (selbst) |schreiben  |
 +| by dn=„cn=Manager,dc=nausch,dc=org“ write | Manager |schreiben  |
 +| by dn=„cn=Technischeruser,dc=nausch,dc=org“ read | Technischeruser |lesen  |
 +| by dn.exact,expand=„uid=$1,ou=People,dc=nausch,dc=org“ read | //Benutzer// | authentifizieren  |
 +| by * none | //alle anderen//  |  **keinerlei Rechte** 
 +
 +Für die Konfiguration benötigen wir hierzu auch noch eine **olc**((**o**n-**l**ine **c**onfiguration))-Directive, die für obige Tabelle wie folgt aussieht (zur besseren Lesbarkeit hier umgebrochen!).
 +  olcAccess: {4}to dn.regex="cn=([^,]+),ou=People,dc=nausch,dc=org" by self 
 +             write by dn="cn=Manager,dc=nausch,dc=org" 
 +             write by dn="cn=Technischeruser,dc=nausch,dc=org" 
 +             read by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read by * none
 +
 +=== Zugriff auf alle anderen Felder (ohne gesonderte Berechtigungen) der Domäne ===
 +Auf alle sonstigen Felder im DIT sollen folgende Berechtigungen gelten.
 +
 +^ **Zugriffsformulierung**     ^ **Benutzer**     ^ **Zugriffsberechtigung**   ^
 +| by self write | self (selbst) |schreiben  |
 +| by dn=„cn=Manager,dc=nausch,dc=org“ write | Manager |schreiben  |
 +| by * none | //alle anderen//  |  lesen  | 
 +
 +Für die Konfiguration benötigen wir hierzu auch noch unseren letzten **olc**((**o**n-**l**ine **c**onfiguration))-Directive, die für obige Tabelle wie folgt aussieht.
 +  olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=nausch,dc=org" write by * read
 +
 +==== Konfiguration ====
 +Somit ergibt sich für die Konfiguration der Berechtigungen ein e LDIF-Datei mit folgendem Inhalt.
 +   # vim /etc/openldap/ldif/cn\=config_acl.ldif
 +<file ldif /etc/openldap/ldif/cn\=config_acl.ldif># Django : 2015-07-17
 +# setzen unterschiedlicher Berechtigungen im DIT unseres OpenLDAP-Servers
 +# https://dokuwiki.nausch.org/doku.php/centos:ldap_c7:tecbind#zugriffsrechte_des_technischen_user_beschraenken
 +
 +dn: olcDatabase={2}hdb,cn=config
 +changetype: modify
 +replace: olcAccess
 +olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=nausch,dc=org" write by dn="cn=Technischeruser,dc=nausch,dc=org" read by anonymous auth by * none
 +olcAccess: {1}to dn="cn=Manager,dc=nausch,dc=org" by self write by * none
 +olcAccess: {2}to dn="cn=Technischeruser,dc=nausch,dc=org" by self write by dn="cn=Manager,dc=nausch,dc=org" write by * none
 +olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=nausch,dc=org" by self write by dn="cn=Manager,dc=nausch,dc=org" write by dn="cn=Technischeruser,dc=nausch,dc=org" read by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read by * none
 +olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=nausch,dc=org" by self write by dn="cn=Manager,dc=nausch,dc=org" write by dn="cn=Technischeruser,dc=nausch,dc=org" read by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read by * none
 +olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=nausch,dc=org" write by * read
 +
 +</file>
 +
 +Abschließend müssen wir nun nur noch mit nachfolgendem Befehl der Inhalt obiger LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers in dessen Konfiguration hinzufügen.
 +   # ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_acl.ldif
 +
 +  SASL/EXTERNAL authentication started
 +  SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
 +  SASL SSF: 0
 +  modifying entry "olcDatabase={2}hdb,cn=config"
 + 
 +==== Abfragetest ====
 +Zum Schluss fragen wir nun noch ab, ob die Berechtigungen richtig gesetzt wurden.
 +   # ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
 +
 +  Enter LDAP Password:
 +<code># extended LDIF
 +#
 +# LDAPv3
 +# base <olcDatabase={2}hdb,cn=config> with scope subtree
 +# filter: (objectclass=*)
 +# requesting: ALL
 +#
 +
 +# {2}hdb, config
 +dn: olcDatabase={2}hdb,cn=config
 +objectClass: olcDatabaseConfig
 +objectClass: olcHdbConfig
 +olcDatabase: {2}hdb
 +olcDbDirectory: /var/lib/ldap
 +olcSuffix: dc=nausch,dc=org
 +olcRootDN: cn=Manager,dc=nausch,dc=org
 +olcRootPW: {SSHA}lffku/uaiQjP2zloaLfDe1vEVcgnE3y9
 +olcDbIndex: objectClass eq,pres
 +olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
 +olcDbIndex: uidNumber,gidNumber,loginShell eq,pres
 +olcDbIndex: uid,memberUid eq,pres,sub
 +olcDbIndex: nisMapName,nisMapEntry eq,pres,sub
 +olcDbIndex: uniqueMember eq,pres
 +olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning b
 + y self write by dn="cn=Manager,dc=nausch,dc=org" write by dn="cn=Technischer_
 + User,dc=nausch,dc=org" read by anonymous auth by * none
 +olcAccess: {1}to dn="cn=Manager,dc=nausch,dc=org" by self write by * none
 +olcAccess: {2}to dn="cn=Technischeruser,dc=nausch,dc=org" by self write by dn=
 + "cn=Manager,dc=nausch,dc=org" write by * none
 +olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=nausch,dc=org" by self write
 +  by dn="cn=Manager,dc=nausch,dc=org" write by dn="cn=Technischer_User,dc=naus
 + ch,dc=org" read by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read b
 + y * none
 +olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=nausch,dc=org" by self wri
 + te by dn="cn=Manager,dc=nausch,dc=org" write by dn="cn=Technischer_User,dc=na
 + usch,dc=org" read by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read
 +  by * none
 +olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=nausch,dc=org" writ
 + e by * read
 +
 +# search result
 +search: 2
 +result: 0 Success
 +
 +# numResponses: 2
 +# numEntries: 1</code>
 +
 +====== Links ======
 +  * **⇐ [[centos:ldap_c7:data|Zurück zum Kapitel "Datenerstbefüllung des OpenLDAP Servers unter CentOS 7.x"]]**
 +  * **⇒ [[centos:ldap_c7:clientauth|Weiter zum Kapitel " Client-Authentification am zentralen OpenLDAP Servers"]]**
 +  * **[[centos:ldap_c7:start|Zurück zum Kapitel >>OpenLDAP Server unter CentOS 7.x<<]]**
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +
  
  • centos/ldap_c7/tecbind.txt
  • Zuletzt geändert: 22.07.2019 15:03.
  • von 127.0.0.1