Konfiguracja klienta LDAP w systemie Solaris

LDAP DIT
Oracle Solaris ma wbudowane wsparcie dla LDAP w systemie operacyjnym, więc nie ma potrzeby instalowania specjalnego oprogramowania aby skonfigurować go do korzystania z repozytoriów użytkowników/grup i innych zdefiniowanych w LDAP. Można to zrobić na różne sposoby i ja opiszę tu kilka z nich.

Jeśli wymagana jest bezpieczna komunikacja, a korzystamy z własnoręcznie wygenerowanych i podpisanych certyfikatów to najpierw trzeba zainstalować certyfikat CA na każdym z klientów.
Można to osiągnąć importując certyfikat CA do lokalnego magazynu przy pomocy narzędzia certutil (/usr/sfw/bin/certutil w Solaris 10). Najpierw należy utworzyć bazę NSS:
(Proszę nie wprowadzać hasła, po prostu naciśnij enter)

certutil -N -d /var/ldap
chmod 444 /var/ldap/*

Teraz ściągnij certyfikat CA i zapisz go gdzieś na dysku, np. w /var/tmp/cacert.pem. Następnie dodaj certyfikat CA do NSS DB:

certutil -A -n "ca-cert" -i /var/tmp/cacert.pem -a -t CT -d /var/ldap

Powinny zostać utworzone trzy pliki w katalogu /var/ldap: cert8.db, key3.db oraz secmod.db. Teraz można przetestować czy to działa używając ldapsearch:

ldapsearch -v -h ldapsrvp01 -p 636 -Z -P /var/ldap/cert8.db \ 
 -b "dc=mycompany,dc=com" -s base "objectclass=*"

gdzie ldapsrvp01 jest nazwą serwera LDAP zdefiniowaną w /etc/hosts lub DNS i również znajduje się w polu Common Name w certyfikacie serwera. Jeśli te nazwy będą się różnić, dostaniesz komunikat błędu, np.

ldap_search: Can't contact LDAP server.

W tym przypadku należy zdefiniować nazwę z CN znajdującego się w certyfikacie serwera w /etc/hosts lub wygenerować na nowo certyfikat serwera z właściwą nazwą.

Teraz można przejść do inicjalizacji klienta LDAP.
Chwila! Jeszcze nie, szczególnie jeśli nie planujesz używania LDAPa jako resolvera nazw domenowych itp. Inicjalizacja klienta LDAP powoduje zastąpienie pliku /etc/nsswitch.conf plikiem /etc/nsswitch.ldap (w Solarisie 10). To może być niebezpieczne, ponieważ w większości instalacji, z którymi się spotkałem, do rozwiązywania nazw służy DNS, a to ustawienie zostanie nadpisane.
Moja rada jest taka, aby zrobić kopię pliku /etc/nsswitch.ldap i nadpisać go aktualną zawartością pliku /etc/nsswitch.conf:

mv /etc/nsswitch.ldap /etc/nsswitch.ldap.default
cp -p /etc/nsswitch.conf /etc/nsswitch.ldap

wtedy wyedytować /etc/nsswitch.ldap i dodać ‚ldap’ do tych wpisów gdzie zamierzamy z tego repozytorium korzystać, np.:

passwd:     files ldap
group:      files ldap

ale pozostałe zostawić tak jak było i powinno być, np.:

hosts:      cluster files [SUCCESS=return] dns
# Note that IPv4 addresses are searched for in all of the ipnodes databases
# before searching the hosts databases.
ipnodes:    cluster files dns [TRYAGAIN=0]
networks:   files dns
protocols:  files

Teraz można zainicjalizować klienta LDAP ręcznie lub używając Profili zdefiniowanych na serwerze.
Zakładam, że użytkownik „cn=proxyuser,dc=mycompany,dc=com” z hasłem „secretProxyPassword” jest zdefiniowany w LDAPie i posiada dostęp do odczytu drzewa informacji (DIT), bazą jest „dc=mycompany,dc=com”, a nazwą serwera jest „ldapsrvp01” (można też użyć adresu IP).
Inicjalizacja manualna:

ldapclient manual \
-a domainName=mycompany.com -a credentialLevel=proxy \
-a defaultSearchBase=dc=mycompany,dc=com \ 
-a proxyDN=cn=proxyagent,dc=mycompany,dc=com \ 
-a proxyPassword=secretProxyPassword \
ldapsrvp01

To spowoduje następujące rzeczy:
Zostanie utworzony plik ldap_client_file z powyższymi ustawieniami LDAP
Zostanie utworzony plik ldap_client_cred z dn i hasłem użytkownika proxyagent
/etc/nsswitch.ldap zostanie skopiowany jako /etc/nsswitch.conf
Usługa svc:/network/ldap/client:default zostanie uruchomiona

Jeśli ma być użyta szyfrowana komunikacja oraz dostępna możliwość zmiany haseł użytkowników z systemu, należy dodać następujące ustawienia:

ldapclient mod \
-a authenticationMethod=tls:simple \
-a enableShadowUpdate=TRUE \
-a adminDN=cn=admin,dc=mycompany,dc=com \
-a adminPassword=secretAdminPassword

Trochę mylące może być to, że authenticationMethod jest „tls:simple”, ale połączenie do serwera nie odbywa się na porcie 389 z użyciem StartTLS, ale po SSL na porcie 636, proszę to mieć na uwadze.

Kolejnym sposobem jest inicjalizacja klienta LDAP używając Profilu, jeśli taki jest umieszczony w LDAP w gałęzi „ou=profile,dc=mycompany,dc=com”, mój poprzedni wpis zawiera krótki opis i przykładowy profil. Tutaj do skonfigurowania klienta używam profilu „cn=dev,ou=profile,dc=mycompany,dc=com”:

ldapclient init \
-a domainName=mycompany.com \
-a profileName=dev \
-a proxyDN=cn=proxyagent,dc=mycompany,dc=com \
-a proxyPassword=secretProxyPassword \
-a adminDN=cn=admin,dc=mycompany,dc=com \
-a adminPassword=secretAdminPassword \
-a enableShadowUpdate=TRUE \
192.168.0.1

Jeśli system zostanie pomyślnie skonfigurowany powinna być możliwość wylistowania ustawień LDAP:

ldapclient list
NS_LDAP_FILE_VERSION= 2.0
NS_LDAP_BINDDN= cn=proxyagent,dc=mycompany,dc=com
NS_LDAP_BINDPASSWD= {NS1}4a3788e8c053424f
NS_LDAP_SERVERS= 192.168.0.1
NS_LDAP_SEARCH_BASEDN= dc=mycompany,dc=com
NS_LDAP_CREDENTIAL_LEVEL= proxy
...

oraz użytkowników/grup z drzewa LDAP poprzez „getent passwd”, „getent group” itp.
Jeśli coś poszło źle, należy przyjrzeć się problemowi zaczynając od komunikatów zwróconych przez komendę ldapclient, logów, statusu usługi ldap/client oraz konfiguracji NSS (/etc/nsswitch.conf).

Inną metodą konfiguracji klienta LDAP – szczególnie jeśli jest duża ilość tych klientów – jest skonfigurowanie jednej maszyny używając którejś z powyższych metod, a następnie skopiowanie zawartości katalogu /var/ldap oraz pliku /etc/nsswitch.conf na pozostałe maszyny. Później wystarczy włączyć na nich usługę svc:/network/ldap/client:default i voila. Jest to szybka i niezbyt zalecana metoda, ale działa.

Może Ci się również spodoba

Dodaj komentarz