10.11.2011

Как заставить OpenLDAP работать на основе posixGroup и groupOfNames одновременно

Обычно все при установке применяют схему nis.schema, чтобы была совместимость с Samba и тем самым переводят работу LDAP с groupOfNames на posixGroup.
К сожалению это имеет обратный негативный момент:

"Its use is strongly discouraged because it is very inefficient, but mostly because posixGroup membership is a badly designed grouping philosophy"

Получается, что мы не сможем подключить к нашему LDAP множество хороших сервисов, как например Atlassian Jira. Нужно подключать groupOfNames.

Переходим в директорию со схемами:
cd /etc/ldap/slapd.d/cn=config

Открываем для редактирования схему, посвященную загрузке модулей:
vi cn=module{0}.ldif

В ней будет уже подгружен один модуль - бэкэнд hdb (или bdb):
dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
structuralObjectClass: olcModuleList
entryUUID: 0a04d41e-3161-1030-9fef-abf604861a01
creatorsName: cn=admin,cn=config
createTimestamp: 20110622211920Z
entryCSN: 20110622211920.678877Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20110622211920Z



Мы подключим еще 12 модулей. Почти все они не понадобятся, но вообще в будущем меньше будете спотыкаться о нехватку чего-либо:
dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}accesslog
olcModuleLoad: {2}auditlog
olcModuleLoad: {3}constraint
olcModuleLoad: {4}dynlist
olcModuleLoad: {5}memberof
olcModuleLoad: {6}ppolicy
olcModuleLoad: {7}refint
olcModuleLoad: {8}seqmod
olcModuleLoad: {9}syncprov
olcModuleLoad: {10}sssvlv
olcModuleLoad: {11}translucent
olcModuleLoad: {12}unique
olcModuleLoad: {13}back_monitor

structuralObjectClass: olcModuleList
entryUUID: 0a04d41e-3161-1030-9fef-abf604861a01
creatorsName: cn=admin,cn=config
createTimestamp: 20110622211920Z
entryCSN: 20110622211920.678877Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20110622211920Z

Причем внимание: сразу перегрузить не получится. Поэтому пошагово комментим некоторые строчки olcModuleLoad (можно и по две по три сразу) и перегружаем. Если не slapd не может рестартовать, то комментим что-нибудь и опять рестартуем.

Теперь, когда все 13 модулей подкачаны, создадим два оверлея в базе.
Перейдем в ее директорию:
cd olcDatabase={1}hdb

И там создадим два файла:

tee > olcOverlay={4}dynlist.ldif
 
dn: olcOverlay={4}dynlist
objectClass: olcOverlayConfig
objectClass: olcDynamicList
olcOverlay: {4}dynlist
olcDlAttrSet: {4}groupOfURLs memberURL
structuralObjectClass: olcDynamicList

 
tee > olcOverlay={5}memberof.ldif
 
dn: olcOverlay={5}memberof
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: {5}memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: posixGroup
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
structuralObjectClass: olcMemberOf


Перезагружать пока slapd нельзя, ведь мы использовали groupOfURLs, а его еще нету. Находится он в файле /etc/ldap/schema/dyngroup.schema пакета slapd, но мы схему вгрузить не можем. Поэтому берем ее из пакета slapd от Wheezy:

tee > /etc/ldap/schema/dyngroup.ldif

dn: cn=dyngroup,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: dyngroup
olcObjectIdentifier: {0}NetscapeRoot 2.16.840.1.113730
olcObjectIdentifier: {1}NetscapeLDAP NetscapeRoot:3
olcObjectIdentifier: {2}NetscapeLDAPattributeType NetscapeLDAP:1
olcObjectIdentifier: {3}NetscapeLDAPobjectClass NetscapeLDAP:2
olcObjectIdentifier: {4}OpenLDAPExp11 1.3.6.1.4.1.4203.666.11
olcObjectIdentifier: {5}DynGroupBase OpenLDAPExp11:8
olcObjectIdentifier: {6}DynGroupAttr DynGroupBase:1
olcObjectIdentifier: {7}DynGroupOC DynGroupBase:2
olcAttributeTypes: {0}( NetscapeLDAPattributeType:198 NAME 'memberURL' DESC 'I
 dentifies an URL associated with each member of a group. Any type of labeled
 URL can be used.' SUP labeledURI )
olcAttributeTypes: {1}( DynGroupAttr:1 NAME 'dgIdentity' DESC 'Identity to use
  when processing the memberURL' SUP distinguishedName SINGLE-VALUE )
olcAttributeTypes: {2}( DynGroupAttr:2 NAME 'dgAuthz' DESC 'Optional authoriza
 tion rules that determine who is allowed to assume the dgIdentity' EQUALITY a
 uthzMatch SYNTAX 1.3.6.1.4.1.4203.666.2.7 X-ORDERED 'VALUES' )
olcObjectClasses: {0}( NetscapeLDAPobjectClass:33 NAME 'groupOfURLs' SUP top S
 TRUCTURAL MUST cn MAY ( memberURL $ businessCategory $ description $ o $ ou $
  owner $ seeAlso ) )
olcObjectClasses: {1}( DynGroupOC:1 NAME 'dgIdentityAux' SUP top AUXILIARY MAY
  ( dgIdentity $ dgAuthz ) )


Теперь можно попробовать перегрузить:
invoke-rc.d slapd restart

Переходим в директорию схем от cn=schema:
cd ../cn=schema

И там создадим объект dynamicGroup с последним свободным номером:
tee > cn={24}dynamicGroup.ldif

dn: cn=dynamicGroup

olcObjectClasses: {0}( 2.16.840.1.113730.2.33
     NAME 'groupOfURLs'  
     SUP top STRUCTURAL
     MUST cn
     MAY ( memberURL $ businessCategory $ description
     $ o $ ou $                 owner $ seeAlso ) )

olcAttributeTypes: {0}( 2.16.840.1.113730.1.198
     NAME 'memberURL'  
     DESC 'Identifies an URL associated with each member of a group.
     Any type of labeled URL can be used.' SUP labeledURI )

objectClass: olcSchemaConfig

cn: dynamicGroup

****

Теперь, прежде чем использовать, нужно обязательно прочитать и понять Dynamic Lists.



Комментариев нет:

Отправить комментарий