RHCSA Serie: LDAP-baséiert Authentifikatioun opsetzen an RHEL 7 - Deel 14


Mir fänken dësen Artikel un andeems Dir e puer LDAP Basics beschreift (wat et ass, wou et benotzt gëtt a firwat) a weisen wéi een e LDAP Server opstellt an e Client konfiguréiert fir géint et mat Red Hat Enterprise Linux 7 Systemer ze authentifizéieren.

Wéi mir wäerte gesinn, ginn et e puer aner méiglech Applikatiounsszenarien, awer an dësem Guide konzentréiere mir eis ganz op LDAP-baséiert Authentifikatioun. Zousätzlech, bedenkt w.e.g. datt wéinst der Breetheet vum Thema nëmme seng Grondlage hei ofdecken, awer Dir kënnt op d'Dokumentatioun bezéien, déi am Resumé duergestallt gëtt fir méi detailléiert Detailer.

Aus dem selwechte Grond wäert Dir feststellen datt ech beschloss hunn e puer Referenzen op Mann Säiten vun LDAP Tools fir Kuerzegkeet ze verloossen, awer déi entspriechend Erklärungen sinn op engem Fangerspëtzt (Man Ldapadd, zum Beispill).

Dat gesot, loosst eis ufänken.

Eis Testëmfeld besteet aus zwee RHEL 7 Këschte:

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

Wann Dir wëllt, kënnt Dir d'Maschinn benotzen déi am Deel 12 installéiert ass: Automatiséiert RHEL 7 Installatiounen mat Kickstart als Client.

LDAP steet fir Lightweight Directory Access Protocol a besteet aus enger Rei vu Protokoller, déi e Client erlaabt, iwwer e Netzwierk, zentral gespäichert Informatioun z'erreechen (wéi e Verzeechnes vu Login Shells, absolute Weeër fir Heemverzeichnungen, an aner typesch System Benotzerinformatioun, zum Beispill) déi vu verschiddene Plazen zougänglech solle sinn oder fir eng grouss Unzuel vun Endbenotzer verfügbar sinn (en anert Beispill wier e Verzeechnes mat Heemadressen an Telefonsnummere vun alle Mataarbechter an enger Firma).

Sou (a méi) Informatioun zentral ze halen heescht datt et méi einfach erhale ka ginn an zougänglech ass vu jidderengem deen d'Erlaabnes kritt huet fir se ze benotzen.

Déi folgend Diagramm bitt e vereinfacht Diagramm vun LDAP, a gëtt hei ënnen méi detailléiert beschriwwen:

Erklärung vun uewen Diagramm am Detail.

  1. En Entrée an engem LDAP Verzeichnis duerstellt eng eenzeg Eenheet oder Informatioun an ass eenzegaarteg identifizéiert mat deem wat en Distinguished Name genannt gëtt.
  2. En Attribut ass e Stéck Informatioun assoziéiert mat enger Entrée (zum Beispill Adressen, verfügbare Kontaktnummeren an E-Mailadressen).
  3. All Attribut gëtt een oder méi Wäerter zougewisen, déi aus enger Plaz getrennte Lëscht besteet. E Wäert deen eenzegaarteg ass pro Entrée gëtt e Relative Distinguished Name genannt.

Wann dat gesot gëtt, loosst eis mam Server a Client Installatiounen virugoen.

Installatioun a Konfiguratioun vun engem LDAP Server a Client

Am RHEL 7 gëtt LDAP vun OpenLDAP implementéiert. Fir de Server a Client z'installéieren, benotzt déi folgend Kommandoen, respektiv:

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

Wann d'Installatioun fäerdeg ass, ginn et e puer Saachen déi mir kucken. Déi folgend Schrëtt sollen eleng um Server ausgefouert ginn, ausser explizit notéiert:

1. Vergewëssert Iech datt SELinux net am Wee kënnt andeems Dir déi folgend Booleaner stänneg aktivéiert, souwuel um Server wéi och um Client:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Wou allow_ypbind fir LDAP-baséiert Authentifikatioun erfuerderlech ass, an authlogin_nsswitch_use_ldap kann vun e puer Uwendungen gebraucht ginn.

2. Aktivéiert a starten de Service:

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

Denkt drun datt Dir och de Service mat systemctl auszeschalten, nei starten oder stoppen kann:

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

3. Well de slapd-Service als ldap-Benotzer leeft (wat Dir mat ps -e -o verifizéiere kënnt pid,uname,comm | grep slapd), soll esou Benotzer den /var/lib/ldap-Verzeichnis besëtzen, fir datt de Server fäeg sinn Entréen z'änneren, déi vun administrativen Tools erstallt sinn, déi nëmmen als Root kënne lafen (méi doriwwer an enger Minutt).

Ier Dir d'Besëtzer vun dësem Verzeichnis rekursiv ännert, kopéiert d'Probe-Datebankkonfiguratiounsdatei fir anzeschloen:

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

4. Setzt en OpenLDAP Administrativ Benotzer op a gitt e Passwuert un:

# slappasswd

wéi am nächste Bild gewisen:

a erstellt eng LDIF Datei (ldaprootpasswd.ldif) mat den folgenden Inhalter:

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

wou:

  1. PASSWORD ass déi hashed String déi virdru kritt gouf.
  2. cn=config weist global Configuratiounsoptiounen un.
  3. olcDatabase weist e spezifeschen Datebank-Instanznumm un a kann normalerweis bannent /etc/openldap/slapd.d/cn=config fonnt ginn.

Bezitt op den theoreteschen Hannergrond, dee virdru geliwwert gouf, gëtt d'Datei ldaprootpasswd.ldif en Entrée an den LDAP-Verzeichnis derbäi. An dëser Entrée stellt all Zeil en Attribut duer: Wäertpaar (wou dn, changetype, add, an olcRootPW d'Attributer sinn an d'Strings riets vun all Colon hir entspriechend Wäerter sinn).

Dir wëllt dëst am Kapp behalen wéi mir weidergoe goen, an notéiert w.e.g. datt mir déiselwecht Common Names benotzen (cn=) am Rescht vun dësem Artikel, wou all Schrëtt vum viregten hänkt .

5. Füügt elo déi entspriechend LDAP-Entrée un andeems Dir den URI spezifizéiert deen op den ldap-Server referéiert, wou nëmmen de Protokoll/Host/Port Felder erlaabt sinn.

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

D'Ausgab soll ähnlech sinn wéi:

an importéiert e puer grondleeënd LDAP Definitiounen aus dem /etc/openldap/schema Verzeichnis:

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

6. Hutt LDAP Är Domain an hirer Datebank benotzen.

Erstellt eng aner LDIF-Datei, déi mir ldapdomain.ldif nennen, mat den folgenden Inhalter, ersetzt Äert Domain (am Domain Component dc=) a Passwuert wéi passend:

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

Da lued et wéi follegt:

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

7. Elo ass et Zäit fir e puer Entréen an eise LDAP Verzeichnis ze addéieren. Attributer a Wäerter ginn duerch e Colon (:) an der folgender Datei getrennt, déi mir baseldapdomain.ldif nennen:

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

Füügt d'Entréen an de LDAP Verzeichnis:

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

8. Erstellt en LDAP-Benotzer mam Numm ldapuser (adduser ldapuser), erstellt dann d'Definitioune fir eng LDAP-Grupp an ldapgroup.ldif.

# adduser ldapuser
# vi ldapgroup.ldif

Füügt folgenden Inhalt.

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

wou gidNumber de GID an /etc/group fir ldapuser ass) a lued et:

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

9. Füügt eng LDIF Datei mat den Definitioune fir de Benotzer 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

a lued et:

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

Ähnlech kënnt Dir de Benotzerentrée läschen, deen Dir just erstallt hutt:

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

10. Erlaabt Kommunikatioun duerch d'Firewall:

# firewall-cmd --add-service=ldap

11. Lescht, awer net zulescht, erméiglecht de Client ze authentifizéieren mat LDAP.

Fir eis an dësem leschte Schrëtt ze hëllefen, benotze mir d'Authconfig Utility (eng Interface fir d'Konfiguratioun vun der Systemauthentifikatiounsressourcen).

Mat dem folgenden Kommando gëtt den Heemverzeechnes fir den ugefrote Benotzer erstallt wann et net existéiert nodeems d'Authentifikatioun géint den LDAP Server geléngt:

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

Resumé

An dësem Artikel hu mir erkläert wéi Dir d'Basis Authentifikatioun géint en LDAP Server opstellt. Fir de Setup, deen an dësem Guide beschriwwe gëtt, weider ze konfiguréieren, kuckt w.e.g. Kapitel 13 - LDAP Konfiguratioun am RHEL 7 System Administrator Guide, besonnesch Opmierksamkeet op d'Sécherheetsastellunge mat TLS.

Fillt gratis all Froen ze hannerloossen déi Dir hutt mat dem Kommentarformular hei drënner.