Múltkor végre sikerül elég bonyolultan megoldani azt, hogy az LDAP-on belül mindenki csak ahhoz férhessen hozzá, amihez szabad neki (legalábbis remélem:)).
Ma bonyolítom a helyzetet.
Adott egy iskola, benne az
- informatikatanárok mindenki jelszavát megváltoztathatják, kivéve egymásét,
- a tanárok megváltoztathatják a saját és a diákok jelszavát,
- a diákok meg csak a sajátjukat.
Kelleni fog egy memberOf overlay (hogy miért, arról Ziesemer szépen és jól ír). Először bekapcsoljuk (memberof_betolt.ldiff):
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: memberofés:
sudo ldapmodify -Y EXTERNAL -f memberof_betolt.ldiffEllenőrzés:
sudo ldapsearch -Y EXTERNAL -b cn=module{0},cn=config
Aztán elindítjuk (memberof_beallit.ldiff):
dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: olcConfig objectClass: top olcOverlay: memberof olcMemberOfDangling: ignore olcMemberOfRefInt: TRUE olcMemberOfGroupOC: groupOfNames olcMemberOfMemberAD: member olcMemberOfMemberOfAD: memberOfés:
sudo ldapadd -Y EXTERNAL -f memberof_beallit.ldiffEllenőrzés:
sudo ldapsearch -Y EXTERNAL -b olcDatabase={1}hdb,cn=config
Eddig jó.
Legyen három csoportunk (infótanár, tanár, diák) (GON_csoportok.ldiff):
dn: cn=ga,ou=Groups,dc=itthon,dc=cucc objectClass: groupOfNames objectClass: top cn: ga member: cn=placeholder dn: cn=gb,ou=Groups,dc=itthon,dc=cucc objectClass: groupOfNames objectClass: top cn: gb member: cn=placeholder dn: cn=gc,ou=Groups,dc=itthon,dc=cucc objectClass: groupOfNames objectClass: top cn: gc member: cn=placeholderés:
ldapadd -D cn=admin,dc=itthon,dc=cucc -w titok -f GON_csoportok.ldiff
Legyenek júzereink(GON_userek.ldiff):
dn: uid=ga1,ou=People,dc=itthon,dc=cucc uidNumber: 20001 gidNumber: 513 objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: ga1 sn: ga1 cn: ga1 userPassword: ga1 loginShell: /bin/bash homeDirectory: /home/ga1 dn: uid=ga2,ou=People,dc=itthon,dc=cucc uidNumber: 20002 gidNumber: 513 objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: ga2 sn: ga2 cn: ga2 userPassword: ga2 loginShell: /bin/bash homeDirectory: /home/ga2 dn: uid=gb1,ou=People,dc=itthon,dc=cucc uidNumber: 20003 gidNumber: 513 objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: gb1 sn: gb1 cn: gb1 userPassword: gb1 loginShell: /bin/bash homeDirectory: /home/gb1 dn: uid=gb2,ou=People,dc=itthon,dc=cucc uidNumber: 20004 gidNumber: 513 objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: gb2 sn: gb2 cn: gb2 userPassword: gb2 loginShell: /bin/bash homeDirectory: /home/gb2 dn: uid=gc1,ou=People,dc=itthon,dc=cucc gidNumber: 513 uidNumber: 20005 objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: gc1 sn: gc1 cn: gc1 userPassword: gc1 loginShell: /bin/bash homeDirectory: /home/gc1 dn: uid=gc2,ou=People,dc=itthon,dc=cucc uidNumber: 20006 gidNumber: 513 objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: gc2 sn: gc2 cn: gc2és:
ldapadd -D cn=admin,dc=itthon,dc=cucc -w titok -f GON_userek.ldiff
Tegyük be a megfelelő usereket a megfelelő csoportokba. A csoportokban felvett member attribútumokkal párhuzamosan kialakul a júzereknél a memberOf rejtett attribútum.
Íme az új ACL, a múltkori kiegészítve ezzel az új követelménnyel, némi tisztázással:
dn: olcDatabase={1}hdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by group.exact="cn=GONldapAdmins,ou=Groups,dc=itthon,dc=cucc" write by * break olcAccess: {1}to dn.subtree="cn=krbcontainer,dc=itthon,dc=cucc" by group.exact="cn=GONkerberosAdmins,ou=Groups,dc=itthon,dc=cucc" write olcAccess: {2}to dn.one="dc=itthon,dc=cucc" filter=(objectClass=sambaDomain) by group.exact="cn=GONsambaAdmins,ou=Groups,dc=itthon,dc=cucc" write by * break olcAccess: {3}to dn.subtree="ou=People,dc=itthon,dc=cucc" attrs=@sambaSamAccount,userPassword by group.exact="cn=GONsambaAdmins,ou=Groups,dc=itthon,dc=cucc" write by * break olcAccess: {4}to dn.subtree="ou=Computers,dc=itthon,dc=cucc" by group.exact="cn=GONsambaAdmins,ou=Groups,dc=itthon,dc=cucc" write by * break olcAccess: {5}to dn.subtree="ou=People,dc=itthon,dc=cucc" attrs=userPassword by self write by anonymous auth by * break olcaccess: {6}to dn.subtree="ou=People,dc=itthon,dc=cucc" filter=(memberof=cn=ga,ou=Groups,dc=itthon,dc=cucc) attrs=userPassword by group.exact="cn=ga,ou=Groups,dc=itthon,dc=cucc" none by * break olcaccess: {7}to dn.subtree="ou=People,dc=itthon,dc=cucc" attrs=userPassword by group.exact="cn=ga,ou=Groups,dc=itthon,dc=cucc" write by * break olcaccess: {8}to dn.subtree="ou=People,dc=itthon,dc=cucc" filter=(memberof=cn=gc,ou=Groups,dc=itthon,dc=cucc) attrs=userPassword by group.exact="cn=gb,ou=Groups,dc=itthon,dc=cucc" write by * break olcAccess: {9}to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange by self read by anonymous auth by * none olcAccess: {10}to * by users read
Állítsuk be, és néhány ldappasswd parancs kiadásával teszteljük. Aztán öröm.
Nincsenek megjegyzések:
Megjegyzés küldése