Seria RHCSA: Konfigurowanie uwierzytelniania opartego na LDAP w RHEL 7 - Część 14


Zaczniemy ten artykuł od nakreślenia kilku podstaw LDAP (co to jest, gdzie jest używany i dlaczego) i pokażemy, jak skonfigurować serwer LDAP i skonfigurować klienta do uwierzytelniania przy użyciu systemów Red Hat Enterprise Linux 7.

Jak zobaczymy, istnieje kilka innych możliwych scenariuszy aplikacji, ale w tym przewodniku skupimy się całkowicie na uwierzytelnianiu opartym na LDAP. Ponadto pamiętaj, że ze względu na obszerność tematu omówimy tutaj tylko jego podstawy, ale możesz zapoznać się z dokumentacją opisaną w podsumowaniu, aby uzyskać bardziej szczegółowe informacje.

Z tego samego powodu zauważysz, że zdecydowałem się pominąć kilka odniesień do stron podręcznika narzędzi LDAP ze względu na zwięzłość, ale odpowiednie wyjaśnienia są na wyciągnięcie ręki (na przykład man ldapadd).

To powiedziawszy, zacznijmy.

Nasze środowisko testowe składa się z dwóch pudełek RHEL 7:

Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

Jeśli chcesz, możesz użyć maszyny zainstalowanej w części 12: Automatyzacja instalacji RHEL 7 przy użyciu Kickstart jako klienta.

LDAP to skrót od Lightweight Directory Access Protocol i składa się z zestawu protokołów, które umożliwiają klientowi dostęp za pośrednictwem sieci do centralnie przechowywanych informacji (takich jak katalog powłok logowania, bezwzględne ścieżki do katalogów domowych i inne typowe informacje o użytkowniku systemu, na przykład), który powinien być dostępny z różnych miejsc lub dla dużej liczby użytkowników końcowych (innym przykładem może być katalog adresów domowych i numerów telefonów wszystkich pracowników w firmie).

Przechowywanie takich (i nie tylko) informacji centralnie oznacza, że u200bu200bmogą one być łatwiejsze w utrzymaniu i dostępie do nich dla każdego, kto ma pozwolenie na ich używanie.

Poniższy diagram przedstawia uproszczony diagram LDAP i jest opisany bardziej szczegółowo poniżej:

Szczegółowe wyjaśnienie powyższego schematu.

  1. An entry in a LDAP directory represents a single unit or information and is uniquely identified by what is called a Distinguished Name.
  2. An attribute is a piece of information associated with an entry (for example, addresses, available contact phone numbers, and email addresses).
  3. Each attribute is assigned one or more values consisting in a space-separated list. A value that is unique per entry is called a Relative Distinguished Name.

Biorąc to pod uwagę, przejdźmy do instalacji serwera i klienta.

Instalowanie i konfigurowanie serwera i klienta LDAP

W RHEL 7 LDAP jest zaimplementowany przez OpenLDAP. Aby zainstalować serwer i klienta, użyj odpowiednio następujących poleceń:

# yum update && yum install openldap openldap-clients openldap-servers
# yum update && yum install openldap openldap-clients nss-pam-ldapd

Po zakończeniu instalacji przyjrzymy się kilku rzeczom. Poniższe kroki należy wykonać na samym serwerze, chyba że wyraźnie zaznaczono:

1.Upewnij się, że SELinux nie przeszkadza, trwale włączając następujące wartości logiczne, zarówno na serwerze, jak i kliencie:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Gdzie allow_ypbind jest wymagane do uwierzytelniania opartego na LDAP, a authlogin_nsswitch_use_ldap może być potrzebny niektórym aplikacjom.

2. Włącz i uruchom usługę:

# systemctl enable slapd.service
# systemctl start slapd.service

Pamiętaj, że możesz również wyłączyć, zrestartować lub zatrzymać usługę za pomocą systemctl:

# systemctl disable slapd.service
# systemctl restart slapd.service
# systemctl stop slapd.service

3. Ponieważ usługa slapd działa jako użytkownik ldap (co można zweryfikować za pomocą ps -e -o pid, uname, comm | grep slapd), taki użytkownik powinien być właścicielem katalogu/var/lib/ldap, aby serwer mógł móc modyfikować wpisy utworzone przez narzędzia administracyjne, które mogą być uruchamiane tylko jako root (więcej na ten temat za minutę).

Przed rekurencyjną zmianą własności tego katalogu skopiuj do niego przykładowy plik konfiguracyjny bazy danych dla slapd:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown -R ldap:ldap /var/lib/ldap

4. Skonfiguruj użytkownika administracyjnego OpenLDAP i przypisz hasło:

# slappasswd

jak pokazano na następnym obrazku:

i utwórz plik LDIF (ldaprootpasswd.ldif) z następującą zawartością:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

gdzie:

  1. PASSWORD is the hashed string obtained earlier.
  2. cn=config indicates global config options.
  3. olcDatabase indicates a specific database instance name and can be typically found inside /etc/openldap/slapd.d/cn=config.

W nawiązaniu do przedstawionych wcześniej podstaw teoretycznych, plik ldaprootpasswd.ldif doda wpis do katalogu LDAP. W tym wpisie każda linia reprezentuje parę atrybut: wartość (gdzie dn, changetype, add i olcRootPW to atrybuty, a ciągi po prawej stronie każdego dwukropka to odpowiadające im wartości).

Możesz o tym pamiętać, gdy będziemy kontynuować, i pamiętaj, że używamy tych samych nazw powszechnych (cn u003d) w pozostałej części tego artykułu, gdzie każdy krok zależy od poprzedniego .

5. Teraz dodaj odpowiedni wpis LDAP, określając identyfikator URI odnoszący się do serwera ldap, na którym dozwolone są tylko pola protokołu/hosta/portu.

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

Wynik powinien być podobny do:

i zaimportuj podstawowe definicje LDAP z katalogu /etc/openldap/schema :

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. Niech LDAP używa Twojej domeny w swojej bazie danych.

Utwórz kolejny plik LDIF, który nazwiemy ldapdomain.ldif , z następującą zawartością, zastępując Twoją domenę (w komponencie domeny dc u003d) i odpowiednio hasło:

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

Następnie załaduj go w następujący sposób:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. Nadszedł czas, aby dodać kilka wpisów do naszego katalogu LDAP. Atrybuty i wartości są oddzielone dwukropkiem (:) w poniższym pliku, któremu nadamy nazwę baseldapdomain.ldif :

dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

Dodaj wpisy do katalogu LDAP:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. Utwórz użytkownika LDAP o nazwie ldapuser (adduser ldapuser), a następnie utwórz definicje grupy LDAP w ldapgroup.ldif .

# adduser ldapuser
# vi ldapgroup.ldif

Dodaj następującą zawartość.

dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

gdzie gidNumber to GID w/etc/group dla ldapuser) i załaduj go:

# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. Dodaj plik LDIF z definicjami dla użytkownika ldapuser ( ldapuser.ldif ):

dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

i załaduj:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

Podobnie możesz usunąć właśnie utworzony wpis użytkownika:

# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. Zezwól na komunikację przez zaporę:

# firewall-cmd --add-service=ldap

11. Wreszcie, co nie mniej ważne, włącz klientowi uwierzytelnianie przy użyciu protokołu LDAP.

Aby pomóc nam w tym ostatnim kroku, użyjemy narzędzia authconfig (interfejsu do konfigurowania zasobów uwierzytelniania systemu).

Za pomocą następującego polecenia zostanie utworzony katalog osobisty dla żądanego użytkownika, jeśli nie istnieje po pomyślnym uwierzytelnieniu na serwerze LDAP:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

Podsumowanie

W tym artykule wyjaśniliśmy, jak skonfigurować podstawowe uwierzytelnianie na serwerze LDAP. Aby dalej konfigurować ustawienia opisane w niniejszym przewodniku, zapoznaj się z Rozdziałem 13 - Konfiguracja LDAP w Przewodniku administratora systemu RHEL 7, zwracając szczególną uwagę na ustawienia zabezpieczeń przy użyciu TLS.

Zachęcamy do pozostawienia wszelkich pytań za pomocą poniższego formularza komentarzy.