LDAP + libnss-ldapd + Owncloud + memberof + RFC2307bis

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
derpascal
Beiträge: 25
Registriert: 13.07.2012 15:31:42

LDAP + libnss-ldapd + Owncloud + memberof + RFC2307bis

Beitrag von derpascal » 05.10.2014 20:46:16

Moin,

ich arbeite mich gerade in LDAP rein. Alle meine Aussagen sind nur das, was ich bis jetzt gelernt habe. Es kann ggf. auch einfach Falsch sein. Freue mich über jede Verbesserung.

Folgende Anforderung:
- LDAP zur User und Gruppenverwaltung
- User einer bestimmten Gruppe dürfen sich per SSH einloggen
- User einer anderen Gruppe dürfen OwnCloud nutzen.

LDAP ist angelegt: Punkt 1 erfüllt
SSH funktioniert für die User in der "sshuser" Group: Punkt 2 erfüllt
Alle User können Owncloud nutzen: Hier hänge ich.

Um die Gruppen im System nutzen zu können muss ich die Struktur "posixGroup" nutzen. Die User werden nur mit ihrem Namen als "memberuid" angegeben.
Um in OwnCloud die User zu beschränken braucht es bei den Usern das Feld "memberof". Dies lässt dich automatisch durch das Overlaymodul memberof erzeugen. Jedoch braucht der dafür den DN der member in den Gruppen. Dies ist bei der posixGroup nicht möglich, sondern bei groupOfNames. Beide zusammen würde bedeuten, dass ich jede Gruppe in zwei unterschiedlichen Formaten pflegen müsste. Die von mir gefundene Lösung heißt RFC2307bis: http://www.heinlein-support.de/blog/how ... x-gruppen/

Unten auf der Seite steht eigentlich schon die Lösung. Ich habe die komplette Seite verstanden, nur weiß ich nicht, was ich mit diesem File machen soll. Ich habe es einfach mal mit

Code: Alles auswählen

ldapmodify -Y EXTERNAL -H ldapi:// -f rfc2307bis.ldif
und mit

Code: Alles auswählen

ldapadd    -Y EXTERNAL -H ldapi:// -f rfc2307bis.ldif
versucht, aber beides hat Fehler geworfen.

Kann mir bitte jemand sagen, ob ich auf dem richtigen Weg bin?
Ob es eine bessere Lösung gibt?
Was ich mit dem "rfc2307bis.ldif" machen muss?


Vielen Dank für eure Unterstützung.

------------------------------------------------------------------------------------
Vielleicht hilft das auch noch. Meine Installation sieht wie folgt aus:

OS: Debian jessie/sid

Code: Alles auswählen

kill $(pidof pynslcd)
aptitude purge ldap-utils slapd libnss-ldapd
rm -rf /var/backups/*.ldapdb

echo "slapd slapd/password1 string adminpw1234
slapd slapd/password2 string adminpw1234
slapd slapd/no_configuration boolean false
slapd slapd/move_old_database boolean true
slapd slapd/purge_database boolean true
slapd shared/organization string local
slapd slapd/backend string HDB
slapd slapd/domain string local
slapd slapd/allow_ldap_v2 boolean false
" | debconf-set-selections

aptitude -y install ldap-utils slapd

ldapmodify -Y EXTERNAL -H ldapi:// -f mod_config.ldif
ldapadd    -Y EXTERNAL -H ldapi:// -f add_config.ldif

for file in structur.ldif group.ldif user.ldif; do
    ldapadd -x -D cn=admin,dc=local -W -f $file
done

for file in mod_user.ldif; do
    ldapmodify -x -D cn=admin,dc=local -W -f $file
done

ldappasswd -x -D cn=admin,dc=local -W uid=derpascal,ou=Users,dc=local

echo "libnss-ldapd libnss-ldapd/nsswitch multiselect group, passwd, shadow
pynslcd nslcd/ldap-uris string ldapi:///
pynslcd nslcd/ldap-base string dc=local
" | debconf-set-selections

aptitude -y install libnss-ldapd
# cat mod_config.ldif

Code: Alles auswählen

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=local" write
        by self write
        by anonymous auth
        by * read
olcAccess: {1}to *
        by dn="cn=admin,dc=local" write
        by * read
        by anonymous read
# cat add_config.ldif

Code: Alles auswählen

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
objectClass: top
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof.la

dn: olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof

dn: cn=module,cn=config
cn: module
objectclass: olcModuleList
objectclass: top
olcmodulepath: /usr/lib/ldap
olcmoduleload: refint.la

dn: olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner
# cat structur.ldif

Code: Alles auswählen

dn: ou=Groups,dc=local
ou: Groups
objectClass: top
objectClass: organizationalUnit


dn: ou=Users,dc=local
ou: Users
objectClass: top
objectClass: organizationalUnit
# cat group.ldif

Code: Alles auswählen

dn: cn=sshuser,ou=Groups,dc=local
cn: sshuser
gidNumber: 100000
objectClass: posixGroup

dn: cn=ownclouduser,ou=Groups,dc=local
cn: ownclouduser
gidNumber: 100001
objectClass: posixGroup
# cat user.ldif

Code: Alles auswählen

dn: uid=derpascal,ou=Users,dc=local
uid: derpascal
uidNumber: 100000
gidNumber: 65534
cn: derpascal
sn: derpascal
objectClass: posixAccount
objectclass: organizationalPerson
loginShell: /bin/bash
homeDirectory: /home/derpascal

dn: uid=ocadmin,ou=Users,dc=local
uid: ocadmin
uidNumber: 100001
gidNumber: 65534
cn: OwnCloud Admin
sn: OwnCloud Admin
objectClass: posixAccount
objectclass: organizationalPerson
loginShell: /bin/false
homeDirectory: /dev/null
# cat mod_user.ldif

Code: Alles auswählen

dn: cn=sshuser,ou=Groups,dc=local
changetype: modify
add: memberuid
memberuid: derpascal

dn: cn=ownclouduser,ou=Groups,dc=local
changetype: modify
add: memberuid
memberuid: derpascal
memberuid: ocadmin

Code: Alles auswählen

wget http://www.heinlein-support.de/blog/wp-content/uploads/2013/12/rfc2307bis.ldif_.txt -O rfc2307bis.ldif
Zuletzt geändert von derpascal am 06.10.2014 21:27:26, insgesamt 2-mal geändert.

derpascal
Beiträge: 25
Registriert: 13.07.2012 15:31:42

Re: LDAP + libnss-ldapd + Owncloud (+ memberof (+ ?RFC2307b

Beitrag von derpascal » 06.10.2014 21:25:45

Moin,

nochmal ne Nacht schlafen, mit nem frischen Kopf Google Quälen und schon findet man doch die richtige Antwort. Der erste Hinweiß, den ich gefunden habe war, dass slapd sich nicht so schön mit den Tools Schema wegnehmen lassen will. Das muss händisch passieren. Der zweite Hinweiß war, dass ich das NIS Schema entfernen musste. Nun ändert sich meine Installation/Konfiguration wie folgt:

Installation:

Code: Alles auswählen

...
aptitude -y install ldap-utils slapd

# Ab hier neu
service slapd stop

mkdir /etc/ldap/slapd.d-off/
mv    /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{2\}nis.ldif /etc/ldap/slapd.d-off/
cp    rfc2307bis.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{2\}rfc2307bis.ldif
chown openldap. /etc/ldap/slapd.d/cn\=config -R

service slapd start
...
mod_user.ldif:
"memberuid" muss gegen "member" ersetzt werden und es muss der DN genommen werden, also statt

Code: Alles auswählen

...
add: memberuid
memberuid: derpascal
...
add: memberuid
memberuid: derpascal
memberuid: ocadmin
...
dann

Code: Alles auswählen

...
add: member
member: uid=derpascal,ou=Users,dc=local
...
add: member
member: uid=derpascal,ou=Users,dc=local
member: uid=myocadmin,ou=Users,dc=local
...
group.ldif: Hier ist das Schema nun etwas anders:
statt pro Gruppe:

Code: Alles auswählen

...
objectClass: posixGroup
...
muss dann

Code: Alles auswählen

...
member:
objectClass: posixGroup
objectClass: groupOfNames
...
Das von http://www.heinlein-support.de/blog/how ... x-gruppen/ geladene rfc2307bis.ldif Schema musste ich auch noch anpassen:

von

Code: Alles auswählen

dn: cn=rfc2307bis,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: rfc2307bis
...
nach

Code: Alles auswählen

dn: cn={2}rfc2307bis
objectClass: olcSchemaConfig
cn: {2}rfc2307bis
...
und das wars dann. Ich hoffe, ich kann hiermit jemanden noch helfen, der auch hängen geblieben ist.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: LDAP + libnss-ldapd + Owncloud + memberof + RFC2307bis

Beitrag von ThorstenS » 07.10.2014 13:23:16

schön, dass du das hier dokumentiert hast. :-)

Antworten