Serwer LDAP dla klientów z systemem Solaris i Linux

LDAP-DITKilka miesięcy temu otrzymałem zadanie instalacji i konfiguracji serwera LDAP aby uwierzytelniać użytkowników w systemach Solaris 10, Solaris 11 i Linux znajdujących się w infrastrukturze klienta. Jako serwer został wybrany OpenLDAP 2.4.x w konfiguracji Master-Slave oraz wsparciem dla SSL/TLS. Serwery zostały zainstalowane na maszynach wirtualnych z systemem CentOS 6.7.
Nie będę tu opisywał procesu instalacji oprogramowania, bo na nowoczesnych Linuxach wystarczy zrobić po prostu:

$ sudo yum install openldap-servers

Wstępna konfiruacja Directory Information Tree jest robiona również podczas instalacji. Będę tu używał dc=mycompany,dc=com w tym dokumencie. Użyję także „o=mycompany” oraz „o=customer” jako gałęzie w moim drzewie informacji (DIT) do odseparowania użytkowników i grup.
W sieci jest wiele instrukcji jak skonfigurować replikację Master-Slave w OpenLDAP, więc nie będzie to objęte w tym dokumencie, należy sobie znaleźć i skonfigurować to samemu. Ja użyłem dynamicznej konfiguracji, która jest niestety niezbyt dobrze udokumentowana, ale jest możliwość (a czasami jedyna droga) aby przygotować statyczny slapd.conf i skonwertować go do dynamicznej konfiguracji narzędziem ‚slaptest’. Zalecam użycie tej metody.
Poza nakładką ‚syncrepl’ używam również ‚memberof’, ‚refint’ (tutaj jest HOWTO) oraz ‚unique’. Opis (angielski) dostępnych nakładek można znaleźć tutaj: http://www.openldap.org/doc/admin24/overlays.html
Poniżej znajdują się wycinki moich konfigów z listą włączonych modułów:

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: {0}memberof.la
olcModuleLoad: {1}syncprov.la
olcModuleLoad: {2}refint.la
olcModuleLoad: {3}unique
olcModulePath: /usr/lib64/openldap

oraz konfiguracją nakładek:

dn: olcOverlay={0}memberof,olcDatabase={2}bdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
olcOverlay: {0}memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: FALSE

dn: olcOverlay={1}syncprov,olcDatabase={2}bdb,cn=config
objectClass: olcSyncProvConfig
objectClass: olcOverlayConfig
olcOverlay: {1}syncprov
olcSpCheckpoint: 100 10
olcSpSessionlog: 200

dn: olcOverlay={2}refint,olcDatabase={2}bdb,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
olcOverlay: {2}refint
olcRefintAttribute: member memberof

dn: olcOverlay={3}unique,olcDatabase={2}bdb,cn=config
objectClass: olcUniqueConfig
objectClass: olcOverlayConfig
olcOverlay: {3}unique
olcUniqueURI: ldap:///dc=mycompany,dc=com?gidNumber?sub?(objectClass=posixGroup)
olcUniqueURI: ldap:///dc=mycompany,dc=com?uid,uidNumber?sub?(objectClass=posixAccount)

Kiedy serwer(y) LDAP jest już skonfigurowany i działa, można się skupić na Profilach dla Solarisa. Dlaczego warto używać profili? Ponieważ w razie potrzeby jest szybciej i łatwiej zrobić zmianę w pojedynczym wpisie w LDAP niż przekonfigurowywać każdego klienta podłączonego do katalogu LDAP. Osobiście nie słyszałem o takich profilach dla Linuxa, ale z Solarisem 10 i 11 działa to bardzo dobrze.
Aby skonfigurować profile należy rozszerzyć schemat serwera LDAP o odpowiednie Atrybuty i Klasy Obiektów zdefiniowane w DUAConfigProfile:
DUAConfigProfile
Po prostu ściągnij ten plik, zmień nazwę na ‚duaconfig.schema’ i umieść w podkatalogu ‚schema’ katalogu konfiguracji LDAP. Ściągnij również:
NIS Domain schema extension i umieść jako ‚nisdomain.schema’ w tym samym katalogu (domyślnie: /etc/openldap/schema).
a następnie załącz je w ‚slapd.conf’ dyrektywą ‚include’ i wykonaj ponownie slaptest aby skonwertować na konfigurację dynamiczną jeśli takiej używasz.

Przykładowy profil dla klientów z systemem Solaris wygląda następująco:

dn: cn=dev,ou=profile,dc=mycompany,dc=com
objectClass: DUAConfigProfile
objectClass: top
cn: dev
attributeMap: shadow:userpassword=userPassword
attributeMap: passwd:loginshell=loginShell
attributeMap: passwd:homedirectory=homeDirectory
attributeMap: passwd:uidnumber=uidNumber
attributeMap: passwd:gidnumber=gidNumber
attributeMap: group:gidnumber=gidNumber
attributeMap: automount:automountKey=cn
attributeMap: automount:automountInformation=nisMapEntry
attributeMap: automount:automountMapName=nisMapName
authenticationMethod: tls:simple
credentialLevel: proxy
defaultSearchBase: dc=mycompany,dc=com
defaultServerList: ldapsrvp01 ldapsrvp02
objectclassMap: shadow:shadowAccount=posixaccount
objectclassMap: passwd:posixAccount=posixaccount
objectclassMap: group:posixGroup=posixgroup
objectclassMap: automount:automount=nisObject
objectclassMap: automount:automountMap=nisMap
profileTTL: 300
serviceSearchDescriptor: passwd:ou=people,o=mycompany,dc=mycompany,dc=com?su
b?(|(memberof=cn=uxadmin,ou=groups,o=mycompany,dc=mycompany,dc=com)(membero
f=cn=dev,ou=groups,o=mycompany,dc=mycompany,dc=com));ou=people,o=cu
stomer,dc=mycompany,dc=com?sub?memberof=cn=dev,ou=groups,o=customer
,dc=mycompany,dc=com
serviceSearchDescriptor: group:ou=groups,o=mycompany,dc=mycompany,dc=com;ou=
groups,o=customer,dc=mycompany,dc=com
serviceSearchDescriptor: shadow:ou=people,o=mycompany,dc=mycompany,dc=com?su
b?(|(memberof=cn=uxadmin,ou=groups,o=mycompany,dc=mycompany,dc=com)(membero
f=cn=dev,ou=groups,o=mycompany,dc=mycompany,dc=com));ou=people,o=cu
stomer,dc=mycompany,dc=com?sub?memberof=cn=dev,ou=groups,o=customer
,dc=mycompany,dc=com
serviceSearchDescriptor: auto_master:ou=service,dc=mycompany,dc=com?sub?nisM
apName=auto_master
serviceSearchDescriptor: auto_home:ou=service,dc=mycompany,dc=com?sub?nisMap
Name=auto_home

Wiem, że to może wyglądać dość skomplikowanie, szczególnie filtr dla serviceSearchDescriptor, ale chciałem pokazać jak szukać użytkowników/grup zdefiniowanych w różnych gałęziach drzewa LDAP.
Ten profil jest nazwany ‚cn=dev’ i używa nakładki MemberOf. Pozwala na dostęp do systemu członkom grup ‚uxadmin’ i ‚dev’ z gałęzi ‚o=mycompany,dc=mycompany,dc=com’ oraz członkom grupy ‚dev’ z ‚o=customer,dc=mycompany,dc=com’.
Oczywiście można zdefiniować tyle profili ile potrzeba. Opis poszczególnych parametrów można znaleźć w dokumentacji na stronach Oracle.
Nie spotkałem się z podobnymi profilami dla systemów Linux i nie definiowałem nic takiego po stronie serwera LDAP.
Jak podłączyć klienty z systemu Linux i Solaris opiszę w osobnym wpisie.

Może Ci się również spodoba

Dodaj komentarz