Wyszukiwanie w witrynie

Seria RHCSA: Konfigurowanie uwierzytelniania opartego na LDAP w RHEL 7 – część 14


Zaczniemy ten artykuł od przedstawienia podstaw LDAP (co to jest, gdzie jest używane i dlaczego) oraz pokażemy, jak skonfigurować serwer LDAP i skonfigurować klienta do uwierzytelniania się na nim za pomocą Systemy Red Hat Enterprise Linux 7.

Jak zobaczymy, istnieje kilka innych możliwych scenariuszy zastosowań, ale w tym przewodniku skupimy się wyłącznie na uwierzytelnianiu opartym na LDAP. Ponadto należy pamiętać, że ze względu na obszerność tematu omówimy tutaj jedynie jego podstawy, ale po bardziej szczegółowe informacje można zapoznać się z dokumentacją przedstawioną w podsumowaniu.

Z tego samego powodu zauważyłeś, ż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 (man ldapadd, na przykład przykład).

To powiedziawszy, zaczynajmy.

Nasze środowisko testowe

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.

Co to jest LDAP?

LDAP oznacza 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żytkownikach systemu), które powinny być dostępne z różnych miejsc lub dostępne 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 firma).

Centralne przechowywanie takich (i nie tylko) informacji oznacza, że mogą być łatwiej utrzymywane i dostępne dla każdego, kto otrzymał uprawnienia do ich używania.

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

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

  1. Wpis w katalogu LDAP reprezentuje pojedynczą jednostkę lub informację i jest jednoznacznie identyfikowany za pomocą tak zwanej nazwy wyróżniającej.
  2. Atrybut to informacja powiązana z wpisem (na przykład adresy, dostępne numery telefonów kontaktowych i adresy e-mail).
  3. Każdemu atrybutowi przypisana jest jedna lub więcej wartości składających się na listę oddzieloną spacjami. Wartość, która jest unikalna dla każdego wpisu, nazywana jest względną nazwą wyróżniającą.

Powiedziawszy to, przejdźmy do instalacji serwera i klienta.

Instalowanie i konfigurowanie serwera i klienta LDAP

W RHEL 7 LDAP jest implementowany 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 przyglądamy się kilku rzeczom. Poniższe kroki należy wykonać na samym serwerze, chyba że wyraźnie zaznaczono:

1. Upewnij się, że SELinux nie przeszkadza, włączając na stałe następujące booleany zarówno na serwerze, jak i na 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ć potrzebne w niektórych aplikacjach.

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


systemctl enable slapd.service
systemctl start slapd.service

Pamiętaj, że możesz także wyłączyć, ponownie uruchomić 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żesz sprawdzić za pomocą ps -e -o pid,uname,comm | grep slapd ), taki użytkownik powinien posiadać katalog /var/lib/ldap, aby serwer mógł modyfikować wpisy utworzone za pomocą narzędzi administracyjnych, które można uruchomić tylko jako root (więcej na ten temat w artykule minuta).

Przed rekursywną 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. HASŁO to uzyskany wcześniej zahaszowany ciąg znaków.
  2. cn=config wskazuje globalne opcje konfiguracji.
  3. olcDatabase wskazuje konkretną nazwę instancji bazy danych i zazwyczaj można ją znaleźć w /etc/openldap/slapd.d/cn=config.

Nawiązując do podanego wcześniej podstaw teoretycznych, plik ldaprootpasswd.ldif doda wpis do katalogu LDAP. W tym wpisie każda linia reprezentuje parę atrybut:wartość (gdzie dn, typ zmiany, add i olcRootPW to atrybuty, a ciągi znaków po prawej stronie każdego dwukropka to odpowiadające im wartości).

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

5. Teraz dodaj odpowiedni wpis LDAP, podając URI odnoszący się do serwera ldap, gdzie dozwolone są tylko pola protokół/host/port.


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

Dane wyjściowe powinny być podobne do:

i zaimportuj kilka podstawowych definicji 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. Pozwól 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 odpowiednio Twoją domenę (w komponencie domeny dc=) i 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. Teraz czas dodać kilka wpisów do naszego katalogu LDAP. Atrybuty i wartości są oddzielone dwukropkiem (:) w następującym pliku, któremu nazwiemy 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ą treść.


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 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 to:


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ę sieciową:


firewall-cmd --add-service=ldap

11. Na koniec włącz klientowi uwierzytelnianie przy użyciu protokołu LDAP.

Aby pomóc nam w tym ostatnim kroku, skorzystamy z narzędzia authconfig (interfejs do konfigurowania zasobów uwierzytelniania systemu).

Za pomocą poniższego polecenia tworzony jest katalog domowy żą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

Streszczenie

W tym artykule wyjaśniliśmy, jak skonfigurować podstawowe uwierzytelnianie na serwerze LDAP. Aby dokładniej skonfigurować konfigurację opisaną w niniejszym przewodniku, zapoznaj się z rozdziałem 13 – Konfiguracja LDAP w podręczniku administratora systemu RHEL 7, zwracając szczególną uwagę na ustawienia zabezpieczeń przy użyciu protokołu TLS.

Zachęcamy do pozostawienia jakichkolwiek pytań, korzystając z poniższego formularza komentarza.