Serwer LDAP dla klientów z systemem Solaris i Linux
Kilka 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.