Zoeken op website

RHCSA-serie: Op LDAP gebaseerde authenticatie instellen in RHEL 7 - Deel 14


We beginnen dit artikel met enkele basisbeginselen van LDAP (wat het is, waar het wordt gebruikt en waarom) en laten zien hoe u een LDAP-server instelt en een client configureert om zich ertegen te authenticeren met behulp van Red Hat Enterprise Linux 7-systemen.

Zoals we zullen zien, zijn er verschillende andere mogelijke toepassingsscenario's, maar in deze handleiding zullen we ons volledig concentreren op LDAP-gebaseerde authenticatie. Houd er bovendien rekening mee dat we, vanwege de omvang van het onderwerp, hier alleen de basisbeginselen behandelen, maar dat u de documentatie in de samenvatting kunt raadplegen voor meer diepgaande details.

Om dezelfde reden zul je opmerken dat ik besloten heb om kortheidshalve verschillende verwijzingen naar manpagina's van LDAP-tools weg te laten, maar de bijbehorende uitleg ligt binnen handbereik (man ldapadd, bijvoorbeeld voorbeeld).

Dat gezegd hebbende, laten we aan de slag gaan.

Onze testomgeving

Onze testomgeving bestaat uit twee RHEL 7 boxen:


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

Als je wilt, kun je de machine gebruiken die is geïnstalleerd in Deel 12: Automatiseer RHEL 7-installaties met Kickstart als client.

Wat is LDAP?

LDAP staat voor Lightweight Directory Access Protocol en bestaat uit een reeks protocollen waarmee een client via een netwerk toegang kan krijgen tot centraal opgeslagen informatie (zoals een directory met inlogshells , absolute paden naar thuismappen en andere typische systeemgebruikersinformatie bijvoorbeeld) die toegankelijk moeten zijn vanaf verschillende plaatsen of beschikbaar moeten zijn voor een groot aantal eindgebruikers (een ander voorbeeld is een lijst met thuisadressen en telefoonnummers van alle werknemers in een bedrijf).

Door dergelijke (en meer) informatie centraal te bewaren, kan deze gemakkelijker worden onderhouden en toegankelijk zijn voor iedereen aan wie toestemming is verleend om deze te gebruiken.

Het volgende diagram biedt een vereenvoudigd diagram van LDAP en wordt hieronder gedetailleerder beschreven:

Uitleg van bovenstaand diagram in detail.

  1. Een vermelding in een LDAP-directory vertegenwoordigt een enkele eenheid of informatie en wordt uniek geïdentificeerd door een zogenaamde Distinguished Name.
  2. Een kenmerk is een stukje informatie dat aan een item is gekoppeld (bijvoorbeeld adressen, beschikbare telefoonnummers voor contactpersonen en e-mailadressen).
  3. Aan elk attribuut worden een of meer waarden toegewezen, bestaande uit een door spaties gescheiden lijst. Een waarde die per item uniek is, wordt een Relative Distinguished Name genoemd.

Dat gezegd hebbende, laten we doorgaan met de server- en clientinstallaties.

Een LDAP-server en -client installeren en configureren

In RHEL 7 wordt LDAP geïmplementeerd door OpenLDAP. Om de server en client te installeren, gebruikt u respectievelijk de volgende opdrachten:


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

Zodra de installatie is voltooid, zijn er enkele dingen waar we naar kijken. De volgende stappen moeten alleen op de server worden uitgevoerd, tenzij expliciet anders aangegeven:

1. Zorg ervoor dat SELinux niet in de weg zit door de volgende booleans aanhoudend in te schakelen, zowel op de server als op de client:


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Waar allow_ypbind vereist is voor op LDAP gebaseerde authenticatie, en authlogin_nsswitch_use_ldap mogelijk nodig is voor sommige applicaties.

2. Schakel de service in en start deze:


systemctl enable slapd.service
systemctl start slapd.service

Houd er rekening mee dat u de service ook kunt uitschakelen, opnieuw opstarten of stoppen met systemctl:


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

3. Omdat de service slapd wordt uitgevoerd als de ldap-gebruiker (wat je kunt verifiëren met ps -e -o pid,uname,comm | grep slapd >), zou een dergelijke gebruiker eigenaar moeten zijn van de map /var/lib/ldap, zodat de server de items kan wijzigen die zijn aangemaakt door beheertools die alleen als root kunnen worden uitgevoerd (meer hierover in een minuut).

Voordat u het eigendom van deze map recursief wijzigt, kopieert u het voorbeelddatabaseconfiguratiebestand voor slapd ernaar:


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

4. Stel een OpenLDAP-beheerdersgebruiker in en wijs een wachtwoord toe:


slappasswd

zoals weergegeven in de volgende afbeelding:

en maak een LDIF bestand (ldaprootpasswd.ldif) met de volgende inhoud:


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

waar :

  1. WACHTWOORD is de eerder verkregen gehashte tekenreeks.
  2. cn=config geeft globale configuratieopties aan.
  3. olcDatabase geeft de naam van een specifieke database-instantie aan en kan doorgaans worden gevonden in /etc/openldap/slapd.d/cn=config.

Verwijzend naar de eerder gegeven theoretische achtergrond, zal het bestand ldaprootpasswd.ldif een vermelding toevoegen aan de LDAP-directory. In dat item vertegenwoordigt elke regel een attribuut: waardepaar (waarbij dn, changetype, add en olcRootPW de attributen zijn en de strings rechts van elke dubbele punt de corresponderende waarden zijn).

Misschien wilt u dit in gedachten houden terwijl we verder gaan, en houd er rekening mee dat we in de rest van dit artikel dezelfde algemene namen (cn=) gebruiken, waarbij elke stap afhangt van de vorige. .

5. Voeg nu de corresponderende LDAP-invoer toe door de URI op te geven die verwijst naar de ldap-server, waar alleen de protocol/host/poort-velden zijn toegestaan.


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

De uitvoer moet vergelijkbaar zijn met:

en importeer enkele basis-LDAP-definities uit de map /etc/openldap/schema:


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

6. Laat LDAP uw domein in zijn database gebruiken.

Maak nog een LDIF-bestand, dat we ldapdomain.ldif zullen noemen, met de volgende inhoud, waarbij u uw domein (in de domeincomponent dc=) en wachtwoord vervangt, indien van toepassing:


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

Laad het dan als volgt:


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

7. Nu is het tijd om enkele vermeldingen toe te voegen aan onze LDAP-directory. Attributen en waarden worden gescheiden door een dubbele punt (:) in het volgende bestand, dat we baseldapdomain.ldif noemen:


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

Voeg de vermeldingen toe aan de LDAP-directory:


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

8. Maak een LDAP-gebruiker met de naam ldapuser (adduser ldapuser) en maak vervolgens de definities voor een LDAP-groep in ldapgroup.ldif.


adduser ldapuser
vi ldapgroup.ldif

Voeg de volgende inhoud toe.


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

waarbij gidNumber de GID is in /etc/group voor ldapuser) en laad deze:


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

9. Voeg een LDIF-bestand toe met de definities voor gebruiker 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

en laad het:


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

Op dezelfde manier kunt u de zojuist gemaakte gebruikersinvoer verwijderen:


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

10. Communicatie via de firewall toestaan:


firewall-cmd --add-service=ldap

11. Als laatste, maar daarom niet minder belangrijk, moet u de client in staat stellen zich te authenticeren met behulp van LDAP.

Om ons bij deze laatste stap te helpen, zullen we het hulpprogramma authconfig gebruiken (een interface voor het configureren van systeemauthenticatiebronnen).

Met behulp van de volgende opdracht wordt de thuismap voor de aangevraagde gebruiker gemaakt als deze niet bestaat nadat de authenticatie tegen de LDAP-server is gelukt:


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

Samenvatting

In dit artikel hebben we uitgelegd hoe u basisauthenticatie tegen een LDAP-server instelt. Om de instellingen die in deze handleiding worden beschreven verder te configureren, raadpleegt u Hoofdstuk 13 – LDAP-configuratie in de RHEL 7-systeembeheerdershandleiding, waarbij u speciale aandacht besteedt aan de beveiligingsinstellingen met behulp van TLS.

Laat gerust al uw vragen achter via het onderstaande opmerkingenformulier.