RHCSA-serien: Sette opp LDAP-basert autentisering i RHEL 7 - del 14


Vi vil begynne denne artikkelen med å skissere noen grunnleggende LDAP (hva det er, hvor det brukes og hvorfor) og vise hvordan du setter opp en LDAP-server og konfigurerer en klient til å autentisere mot den ved å bruke Red Hat Enterprise Linux 7systemer.

Som vi vil se, er det flere andre mulige applikasjonsscenarier, men i denne veiledningen vil vi fokusere helt på LDAP-basert autentisering. I tillegg, husk at på grunn av emnets omfang, vil vi bare dekke det grunnleggende her, men du kan referere til dokumentasjonen som er skissert i sammendraget for mer detaljerte detaljer.

Av samme grunn vil du legge merke til at jeg har bestemt meg for å utelate flere referanser til man-sider for LDAP-verktøy for korthets skyld, men de tilsvarende forklaringene er på fingertupp avstand (man ldapadd, for eksempel).

Når det er sagt, la oss komme i gang.

Vårt testmiljø

Testmiljøet vårt består av to RHEL 7-bokser:


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

Hvis du vil, kan du bruke maskinen installert i Del 12: Automatiser RHEL 7-installasjoner ved å bruke Kickstart som klient.

Hva er LDAP?

LDAP står for Lightweight Directory Access Protocol og består av et sett med protokoller som lar en klient, over et nettverk, få tilgang til sentralt lagret informasjon (som en katalog med påloggingsskall) , absolutte stier til hjemmekataloger og annen typisk systembrukerinformasjon, for eksempel) som bør være tilgjengelig fra forskjellige steder eller tilgjengelig for et stort antall sluttbrukere (et annet eksempel vil være en katalog med hjemmeadresser og telefonnumre til alle ansatte i et selskap).

Å holde slik (og mer) informasjon sentralt betyr at den lettere kan vedlikeholdes og få tilgang til alle som har fått tillatelse til å bruke den.

Følgende diagram gir et forenklet diagram av LDAP, og er beskrevet nedenfor i større detalj:

Forklaring av diagrammet ovenfor i detalj.

  1. En oppføring i en LDAP-katalog representerer en enkelt enhet eller informasjon og identifiseres unikt med det som kalles et Distinguished Name.
  2. Et attributt er en del informasjon knyttet til en oppføring (for eksempel adresser, tilgjengelige kontakttelefonnumre og e-postadresser).
  3. Hvert attributt tildeles én eller flere verdier som består av en mellomromseparert liste. En verdi som er unik per oppføring kalles et Relative Distinguished Name.

Når det er sagt, la oss fortsette med server- og klientinstallasjonene.

Installere og konfigurere en LDAP-server og -klient

I RHEL 7 er LDAP implementert av OpenLDAP. For å installere serveren og klienten, bruk henholdsvis følgende kommandoer:


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

Når installasjonen er fullført, er det noen ting vi ser på. Følgende trinn bør utføres på serveren alene, med mindre det er eksplisitt angitt:

1. Sørg for at SELinux ikke kommer i veien ved å aktivere følgende booleaner vedvarende, både på serveren og klienten:


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Der allow_ypbind kreves for LDAP-basert autentisering, og authlogin_nsswitch_use_ldap kan være nødvendig for enkelte programmer.

2. Aktiver og start tjenesten:


systemctl enable slapd.service
systemctl start slapd.service

Husk at du også kan deaktivere, starte på nytt eller stoppe tjenesten med systemctl:


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

3. Siden slapd-tjenesten kjører som ldap-brukeren (som du kan bekrefte med ps -e -o pid,uname,comm | grep slapd >), bør en slik bruker eie /var/lib/ldap-katalogen for at serveren skal kunne endre oppføringer opprettet av administrative verktøy som bare kan kjøres som root (mer om dette i en minutt).

Før du endrer eierskapet til denne katalogen rekursivt, kopier eksempeldatabasekonfigurasjonsfilen for slapd inn i den:


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

4. Sett opp en OpenLDAP-administratorbruker og tilordne et passord:


slappasswd

som vist på neste bilde:

og lag en LDIF-fil (ldaprootpasswd.ldif) med følgende innhold:


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

hvor :

  1. PASSORD er den hashed-strengen som ble oppnådd tidligere.
  2. cn=config indikerer globale konfigurasjonsalternativer.
  3. olcDatabase indikerer et spesifikt databaseforekomstnavn og kan vanligvis finnes i /etc/openldap/slapd.d/cn=config.

Med henvisning til den teoretiske bakgrunnen gitt tidligere, vil ldaprootpasswd.ldif-filen legge til en oppføring i LDAP-katalogen. I den oppføringen representerer hver linje et attributt: verdipar (der dn, changetype, add og olcRootPW er attributtene og strengene til høyre for hvert kolon er deres tilsvarende verdier).

Det kan være lurt å ha dette i bakhodet når vi går videre, og vær oppmerksom på at vi bruker de samme vanlige navnene (cn=) gjennom resten av denne artikkelen, der hvert trinn avhenger av det forrige. .

5. Legg nå til den tilsvarende LDAP-oppføringen ved å spesifisere URI som refererer til ldap-serveren, der bare protokoll/vert/port-feltene er tillatt.


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

Utgangen skal være lik:

og importer noen grunnleggende LDAP-definisjoner fra /etc/openldap/schema-katalogen:


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

6. La LDAP bruke domenet ditt i databasen.

Opprett en annen LDIF-fil, som vi kaller ldapdomain.ldif, med følgende innhold, og bytt ut domenet ditt (i domenekomponenten dc=) og passordet etter behov:


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

Deretter laster du den på følgende måte:


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

7. Nå er det på tide å legge til noen oppføringer i LDAP-katalogen vår. Attributter og verdier er atskilt med et kolon (:) i følgende fil, som vi kaller 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

Legg til oppføringene i LDAP-katalogen:


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

8. Opprett en LDAP-bruker kalt ldapuser (adduser ldapuser), og lag deretter definisjonene for en LDAP-gruppe i ldapgroup.ldif.


adduser ldapuser
vi ldapgroup.ldif

Legg til følgende innhold.


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

hvor gidNumber er GID-en i /etc/group for ldapuser) og last den:


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

9. Legg til en LDIF-fil med definisjonene for bruker 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

og last den:


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

På samme måte kan du slette brukeroppføringen du nettopp opprettet:


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

10. Tillat kommunikasjon gjennom brannmuren:


firewall-cmd --add-service=ldap

11. Sist, men ikke minst, gjør det mulig for klienten å autentisere ved hjelp av LDAP.

For å hjelpe oss i dette siste trinnet, vil vi bruke authconfig-verktøyet (et grensesnitt for å konfigurere systemautentiseringsressurser).

Ved å bruke følgende kommando opprettes hjemmekatalogen for den forespurte brukeren hvis den ikke eksisterer etter at autentiseringen mot LDAP-serveren er vellykket:


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

Sammendrag

I denne artikkelen har vi forklart hvordan du setter opp grunnleggende autentisering mot en LDAP-server. For ytterligere konfigurering av oppsettet beskrevet i denne veiledningen, se kapittel 13 – LDAP-konfigurasjon i RHEL 7-systemadministratorens veiledning, og vær spesielt oppmerksom på sikkerhetsinnstillingene ved bruk av TLS.

Legg gjerne igjen spørsmål du måtte ha ved å bruke kommentarskjemaet nedenfor.