Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:ldap_c7:tecbind [17.07.2015 10:19. ] – [LDAP-Anfragen] djangocentos:ldap_c7:tecbind [22.07.2019 15:03. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 240: Zeile 240:
 **LDAP_INVALID_CREDENTIALS**, also ungültige Anmeldedaten. **LDAP_INVALID_CREDENTIALS**, also ungültige Anmeldedaten.
  
-===== Zugriffsrechte des technischen User beschränken =====+===== Zugriffsrechte des (technischen Userbeschrä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:
 +# 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:
 +# 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]]**
  
-FIXME 
  
  • centos/ldap_c7/tecbind.1437128378.txt.gz
  • Zuletzt geändert: 17.07.2015 10:19.
  • von django