Serija RHCSA: Postavljanje provjere autentičnosti temeljene na LDAP-u u RHEL 7 - 14. dio


Započet ćemo ovaj članak ocrtavanjem nekih LDAP osnova (što je to, gdje se koristi i zašto) i pokazati kako postaviti LDAP poslužitelj i konfigurirati klijenta za autentifikaciju pomoću Red Hat Enterprise Linux 7sustavi.

Kao što ćemo vidjeti, postoji nekoliko drugih mogućih scenarija primjene, ali u ovom ćemo se vodiču u potpunosti usredotočiti na autentifikaciju temeljenu na LDAP-u. Osim toga, imajte na umu da ćemo zbog opsežnosti predmeta ovdje pokriti samo njegove osnove, ali možete pogledati dokumentaciju navedenu u sažetku za detaljnije detalje.

Iz istog razloga, primijetit ćete da sam odlučio izostaviti nekoliko referenci na stranice s uputama za LDAP alate radi sažetosti, ali odgovarajuća objašnjenja su na dohvat ruke (man ldapadd, za primjer).

To je reklo, počnimo.

Naše okruženje za testiranje

Naše testno okruženje sastoji se od dva RHEL 7 okvira:


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

Ako želite, možete koristiti stroj instaliran u Dijelu 12: Automatizirajte instalacije RHEL 7 koristeći Kickstart kao klijent.

Što je LDAP?

LDAP je kratica za Lightweight Directory Access Protocol i sastoji se od skupa protokola koji klijentu omogućuju pristup, preko mreže, centralno pohranjenim informacijama (kao što je imenik ljuski za prijavu , apsolutni putovi do kućnih imenika i druge tipične informacije o korisniku sustava, na primjer) koji bi trebali biti dostupni s različitih mjesta ili dostupni velikom broju krajnjih korisnika (još jedan primjer bio bi imenik kućnih adresa i telefonskih brojeva svih zaposlenika u poduzeće).

Centralno čuvanje takvih (i više) informacija znači da ih je lakše održavati i lakše im pristupati svi koji su dobili dopuštenje za njihovo korištenje.

Sljedeći dijagram nudi pojednostavljeni dijagram LDAP-a, a u nastavku je detaljnije opisan:

Detaljno objašnjenje gornjeg dijagrama.

  1. Unos u LDAP direktoriju predstavlja jednu jedinicu ili informaciju i jedinstveno je identificiran onim što se naziva razlikovnim imenom.
  2. Atribut je informacija povezana s unosom (na primjer, adrese, dostupni telefonski brojevi za kontakt i adrese e-pošte).
  3. Svakom atributu dodijeljena je jedna ili više vrijednosti koje se sastoje od popisa odvojenih razmakom. Vrijednost koja je jedinstvena po unosu naziva se Relativno razlikovno ime.

Uz to, nastavimo s instalacijama poslužitelja i klijenta.

Instaliranje i konfiguriranje LDAP poslužitelja i klijenta

U RHEL 7, LDAP implementira OpenLDAP. Za instalaciju poslužitelja i klijenta koristite sljedeće naredbe:


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

Nakon dovršetka instalacije, gledamo neke stvari. Sljedeće korake treba izvesti samo na poslužitelju, osim ako nije izričito navedeno:

1. Pobrinite se da vam SELinux ne smeta tako da trajno omogućite sljedeće booleove, i na poslužitelju i na klijentu:


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Gdje je allow_ypbind potreban za autentifikaciju temeljenu na LDAP-u, a authlogin_nsswitch_use_ldap može biti potreban nekim aplikacijama.

2. Omogućite i pokrenite uslugu:


systemctl enable slapd.service
systemctl start slapd.service

Imajte na umu da također možete onemogućiti, ponovno pokrenuti ili zaustaviti uslugu pomoću systemctl-a:


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

3. Pošto usluga slapd radi kao ldap korisnik (što možete provjeriti s ps -e -o pid,uname,comm | grep slapd ), takav bi korisnik trebao posjedovati direktorij /var/lib/ldap kako bi poslužitelj mogao mijenjati unose stvorene administrativnim alatima koji se mogu pokrenuti samo kao root (više o tome u minuta).

Prije rekurzivne promjene vlasništva ovog direktorija, kopirajte konfiguracijsku datoteku uzorka baze podataka za slapd u njega:


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

4. Postavite OpenLDAP administrativnog korisnika i dodijelite lozinku:


slappasswd

kao što je prikazano na sljedećoj slici:

i izradite LDIF datoteku (ldaprootpasswd.ldif) sa sljedećim sadržajem:


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

gdje :

  1. PASSWORD je raspršeni niz dobiven ranije.
  2. cn=config označava opcije globalne konfiguracije.
  3. olcDatabase označava određeni naziv instance baze podataka i obično se može pronaći unutar /etc/openldap/slapd.d/cn=config.

Pozivajući se na ranije danu teorijsku pozadinu, datoteka ldaprootpasswd.ldif će dodati unos u LDAP direktorij. U tom unosu svaki redak predstavlja par atribut:vrijednost (gdje su dn, changetype, add i olcRootPW atributi, a nizovi desno od svake dvotočke njihove odgovarajuće vrijednosti).

Možda ćete to htjeti imati na umu dok nastavljamo dalje i imajte na umu da koristimo iste uobičajene nazive (cn=) u ostatku ovog članka, gdje svaki korak ovisi o prethodnom .

5. Sada dodajte odgovarajući LDAP unos navodeći URI koji se odnosi na ldap poslužitelj, gdje su dopuštena samo polja protokol/host/port.


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

Izlaz bi trebao biti sličan:

i uvezite neke osnovne LDAP definicije iz /etc/openldap/schema direktorija:


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

6. Neka LDAP koristi vašu domenu u svojoj bazi podataka.

Napravite drugu LDIF datoteku, koju ćemo nazvati ldapdomain.ldif, sa sljedećim sadržajem, zamjenjujući vašu domenu (u komponenti domene dc=) i zaporku prema potrebi:


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

Zatim ga učitajte na sljedeći način:


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

7. Sada je vrijeme da dodate neke unose u naš LDAP direktorij. Atributi i vrijednosti odvojeni su dvotočkom (:) u sljedećoj datoteci koju ćemo nazvati 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

Dodajte unose u LDAP imenik:


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

8. Stvorite LDAP korisnika pod nazivom ldapuser (adduser ldapuser), zatim kreirajte definicije za LDAP grupu u ldapgroup.ldif.


adduser ldapuser
vi ldapgroup.ldif

Dodajte sljedeći sadržaj.


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

gdje je gidNumber GID u /etc/group za ldapuser) i učitajte ga:


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

9. Dodajte LDIF datoteku s definicijama za korisnika 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 učitaj:


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

Isto tako, možete izbrisati korisnički unos koji ste upravo stvorili:


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

10. Dopustite komunikaciju kroz vatrozid:


firewall-cmd --add-service=ldap

11. Na kraju, ali ne manje važno, omogućite klijentu autentifikaciju pomoću LDAP-a.

Kako bi nam pomogli u ovom posljednjem koraku, koristit ćemo uslužni program authconfig (sučelje za konfiguriranje resursa za provjeru autentičnosti sustava).

Koristeći sljedeću naredbu, kreira se matični direktorij za traženog korisnika ako ne postoji nakon što provjera autentičnosti prema LDAP poslužitelju uspije:


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

Sažetak

U ovom smo članku objasnili kako postaviti osnovnu autentifikaciju na LDAP poslužitelju. Za daljnje konfiguriranje postavki opisanih u ovom vodiču, pogledajte Poglavlje 13 – LDAP konfiguracija u RHEL 7 Vodiču za administratore sustava, obraćajući posebnu pozornost na sigurnosne postavke pomoću TLS-a.

Slobodno ostavite sva pitanja koja možda imate koristeći obrazac za komentare u nastavku.