Product SiteDocumentation Site

11.7. LDAP-mappe

OpenLDAP er en implementering av LDAP-protokollen; med andre ord, den er en database med spesialformål å lagre kataloger. I det mest vanlige brukertilfellet, tillater bruk av en LDAP-tjener sentral forvaltning av brukerkontoer og de tilhørende rettighetene. Dessuten er det lett å kopiere LDAP-databasen, som tillater oppsett av flere synkroniserte LDAP-tjenere. Når nettverket og brukerbasen vokser raskt, kan lasten så bli balansert over flere tjenere.
LDAP-data er strukturert og hierarkisk. Strukturen er definert av "skjemaer", som beskriver den type objekter at databasen kan lagre, med en liste over alle de mulige egenskapene deres. Syntaksen brukes for å referere til et bestemt objekt i databasen basert på denne strukturen, noe som forklarer kompleksiten.

11.7.1. Å installere

slapd-pakken inneholder den åpne OpenLDAP-tjeneren. ldap-utils-pakken inneholder kommandolinje-verktøy for samhandling med LDAP-tjenere.
Å installere slapd stiller vanligvis få spørsmål og det er usannsynlig at den resulterende databasen dekker dine behov. Heldigvis, en enkel dpkg-reconfigure slapd vil la deg konfigurere LDAP-databasen med flere detaljer:
  • Utelate OpenLDAP-tjeneroppsettet? Nei, selvfølgelig ønsker vi å konfigurere denne tjenesten.
  • DNS-domenenavn: “falcot.com”.
  • Organisasjonsnavn: “Falcot Corp”.
  • Et administrativt passord må skrives inn.
  • Database-bakstykke å bruke: “MDB”.
  • Ønsker du at databasen skal fjernes når slapd tvinges? Nei. Det er ingen vits i å risikere å miste databasen på grunn av en feil.
  • Flytte den gamle databasen? Dette spørsmålet blir bare spurt når konfigurasjonen er forsøkt log en database allerede eksisterer. Bare svar "ja" hvis du faktisk ønsker å starte på nytt med en ren database; For eksempel hvis du kjører dpkg-reconfigure slapd rett etter den første installasjonen.
  • Tillate LDAPv2 protokoll? Nei, det er ingen vits i det. Alle verktøyene vi skal bruke forstår LDAPv3-protokollen.
Nå er en minimal database konfigurert, som demonstrert fra følgende spørring:
$ ldapsearch -x -b dc=falcot,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=falcot,dc=com> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# falcot.com
dn: dc=falcot,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Falcot Corp
dc: falcot

# admin, falcot.com
dn: cn=admin,dc=falcot,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
Spørringen returnerte to objekter: Organisasjonen selv, og den administrative brukeren.

11.7.2. Å fylle ut mappen

Ettersom en tom database er ikke spesielt nyttig, har vi tenkt å injisere i den i alle de eksisterende katalogene; Dette inkluderer brukerne, gruppene, tjenestene og vert-databasene.
migrationtools-pakken inneholder et sett skript øremerket til å hente ut data fra standard Unix kataloger (/etc/passwd, /etc/group, /etc/services, /etc/hosts og så videre), konvertere disse dataene, og sette den inn i LDAP-databasen.
Så snart pakken er installert. må /etc/migrationtools/migrate_common.ph redigeres; IGNORE_UID_BELOW og IGNORE_GID_BELOW-valgene må aktiveres (å avkommentere dem er nok), og DEFAULT_MAIL_DOMAIN/DEFAULT_BASE trenger oppdatering.
Selve overføringsoperasjonen håndteres av migrate_all_online.sh-kommandoen, som følger:
# cd /usr/share/migrationtools
# LDAPADD="/usr/bin/ldapadd -c" ETC_ALIASES=/dev/null ./migrate_all_online.sh
migrate_all_online.sh stiller noen få spørsmål om LDAP-databasen som dataene skal overføres til. Tabell 11.1 oppsummerer svarene fra Falcots brukereksempel.

Tabell 11.1. Svar på spørsmål forespurt av migrate_all_online.sh-skriptet

SpørsmålSvar
X.500 navnekontekstdc=falcot,dc=com
LDAP tjener-vertsnavnlocalhost
Manager DNcn=admin,dc=falcot,dc=com
Tiilknyttingsreferanserdet administrative passordet
Å lage DUAConfigProfileno
Vi lar bevisst være å flytte /etc/aliases-filen, siden standard-skjemaet som leveres av Debian ikke inkluderer strukturer som dette skriptet bruker til å beskrive e-post-aliaser. Skulle vi ønske å integrere disse dataene i katalogen, skal /etc/ldap/schema/misc.schema-filen legges til standard-skjemaet .
Legg også merke til bruken av -c-valget til ldapadd-kommandoen; Dette alternativet ber om at prosessen ikke stopper i tilfelle feil. Å bruke dette alternativet kreves fordi å konvertere /etc/services ofte generer noen få feil som trygt kan ignoreres.

11.7.3. Å håndtere kontoer med LDAP

Nå når LDAP-databasen inneholder en del nyttig informasjon, er tiden kommet for å gjøre bruk av disse dataene. I denne seksjonen skal vi se på hvordan du konfigurerer et Linux-system, slik at de ulike system-mappene bruker LDAP-databasen.

11.7.3.1. Å sette opp NSS

NSS-systemet (Name Service Switch, se sidestolpe GÅR VIDERE NSS og systemdatabaser) er et modulært system utformet for å definere eller hente informasjon for system-mapper. Med LDAP som datakilde krever NSS installasjon av libnss-ldap-pakken. Installasjonen av den stiller noen få spørsmål; svarene er oppsummert i Tabell 11.2.

Tabell 11.2. Å sette opp libnss-ldap-pakken

SpørsmålSvar
LDAP-tjener Uniform Resource Identifier ldap://ldap.falcot.com
Øremerket navn for søkerbasen dc=falcot,dc=com
LDAP-versjon som skal brukes 3
Krever LDAP-databasen innlogging?no
Spesielle LDAP rotprivilegierja
Gjør konfigurasjonsfilen lesbar/skrivbar bare for sin eierno
LDAP-konto for rot cn=admin,dc=falcot,dc=com
LDAP passord for rotkontodet administrative passordet
/etc/nsswitch.conf-filen må deretter endres, for å konfigurere NSS til å bruke den nettopp installerte ldap-modulen.

Eksempel 11.26. /etc/nsswitch.conf-filen

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd: ldap compat
group: ldap compat
shadow: ldap compat

hosts: files dns ldap
networks: ldap files

protocols: ldap db files
services: ldap db files
ethers: ldap db files
rpc: ldap db files

netgroup: ldap files
ldap-modulen er vanligvis satt inn før de andre, og den vil derfor spørres først. Unntaket å merke seg er hosts-tjenesten siden å kontakte LDAP-tjeneren krever å kontakte DNS først (for å løse ldap.falcot.com). Uten dette unntaket, ville en forespørsel om vertsnavn prøve å spørre LDAP-tjeneren; dette ville utløse et navneoppslag for LDAP-tjeneren, og så videre i en uendelig sløyfe.
Hvis LDAP-tjeneren skal vurderes som autoritative (og de lokale filene som brukes av filer-modulen ignoreres), kan tjenester konfigureres med følgende syntaks:
service: ldap [NOTFOUND=return] files.
Hvis den forespurte oppføringen ikke finnes i LDAP-databasen, vil søket returnere et "ikke eksisterende" svar, selv om ressursen eksisterer i en av de lokale filene. Disse lokale filene vil bare bli brukt når LDAP-tjenesten er nede.

11.7.3.2. Å sette opp PAM

Denne delen beskriver en PAM-konfigurasjon (se sidestolpe BAK KULISSENE /etc/environment og /etc/default/locale) som vil tillate programmer å utføre de nødvendige godkjenninger mot LDAP-databasen.
LDAP-modulen for PAM leveres av libpam-ldap-pakken. Å installere denne pakken stiller noen spørsmål som er svært lik dem i libnss-ldap. Noen konfigurasjonsparametere (for eksempel URI for LDAP-tjeneren) er faktisk delt med libnss-ldap-pakken. Svarene er er oppsummert i Tabell 11.3.

Tabell 11.3. Å sette opp libpam-ldap

SpørsmålSvar
Tillate LDAP admin-kontoen å oppføre seg som lokal rot?Ja. Dette tilllater å bruke den vanlige passwd-kommandoen for å endre passord lagret i LDAP-databasen.
Krever lDAP-databasen innlogging?no
LDAP-konto for rot cn=admin,dc=falcot,dc=com
LDAP passord for rotkontoLDAP-databasens administrative passord
Å bruke lokal krypteringsalgoritme for passordcrypt
Installering av libpam-ldap tilpasser automatisk standard POAM-konfigurasjonen som er definert i /etc/pam.d/common-auth, /etc/pam.d/common-password og /etc/pam.d/common-account-filene. Denne mekanisme bruker det øremerkede pam-auth-update-verktøyet (levert av libpam-runtime pakken). Dette verktøyet kan også kjøres av administratoren dersom de ønsker å aktivere eller deaktivere PAM moduler.

11.7.3.3. Å sikre LDAP datautveksling

Som standard transporterer LDAP-protokollen på nettverket i klartekst. Dette inkluderer (krypterte) passord. Ettersom de krypterte passordene kan være hentet fra nettverket, kan de være sårbare for ordbok-type angrep. Dette kan unngås ved hjelp av et ekstra krypteringslag; Å aktivere dette laget er tema for denne seksjonen.
11.7.3.3.1. Å sette opp tjeneren
Det første trinnet er å opprette et nøkkelpar (bestående av en offentlig nøkkel og en privat nøkkel) for LDAP-serveren. Falcot-administratorene gjenbruker easy-rsa for å genere det (se Seksjon 10.2.1.1, «Offentlig nøkkel-infrastruktur: easy-rsa»). Kjøring av ./build-server-key ldap.falcot.com medfører noen dagligdagse spørsmål (plassering, organisasjonsnavn og så videre). Svaret på deet "vanlig navn"-spørsmålet must er det fullstendige vertsnavnet for LDAP-tjeneren; i vårt tilfelle, ldap.falcot.com.
Denne kommandoen oppretter et sertifikat i keys/ldap.falcot.com.crt-filen; den samsvarende private nøkkelen er lagret i keys/ldap.falcot.com.key.
Nå må disse nøklene være installert med sin standard plassering, og vi må sørge for at den private filen er lesbar av LDAP-tjeneren, som kjører med openldap-brukerindentiteten:
# adduser openldap ssl-cert
Adding user `openldap' to group `ssl-cert' ...
Adding user openldap to group ssl-cert
Done.
# mv keys/ldap.falcot.com.key /etc/ssl/private/ldap.falcot.com.key
# chown root:ssl-cert /etc/ssl/private/ldap.falcot.com.key
# chmod 0640 /etc/ssl/private/ldap.falcot.com.key
# mv newcert.pem /etc/ssl/certs/ldap.falcot.com.pem
slapd-nissen må også få beskjed om å bruke disse nøklene tastene til kryptering. LDAP-tjenerkonfigurasjon styres dynamisk: konfigurasjonen kan oppdateres med normale LDAP operasjoner på cn=config-objekthierarki, og tjeneroppdateringer på /etc/ldap/slapd.d i sann tid for å gjøre konfigurasjonen persistent. ldapmodify er dermed det riktige verktøyet for å oppdatere konfigurasjonen:

Eksempel 11.27. Konfigurering slapd for kryptifisering

# cat >ssl.ldif <<END
dn: cn=config
changetype: modify
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.falcot.com.key
-
END
# ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
Det siste trinnet for å aktivere kryptering innebærer å endre SLAPD_SERVICES-variabelen i /etc/default/slapd-filen. Vi skal gjøre det trygt og helt deaktivere usikret LDAP.

Eksempel 11.28. /etc/default/slapd-filen

# Default location of the slapd.conf file or slapd.d cn=config directory. If
# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to
# /etc/ldap/slapd.conf).
SLAPD_CONF=

# System account to run the slapd server under. If empty the server
# will run as root.
SLAPD_USER="openldap"

# System group to run the slapd server under. If empty the server will
# run in the primary group of its user.
SLAPD_GROUP="openldap"

# Path to the pid file of the slapd server. If not set the init.d script
# will try to figure it out from $SLAPD_CONF (/etc/ldap/slapd.conf by
# default)
SLAPD_PIDFILE=

# slapd normally serves ldap only on all TCP-ports 389. slapd can also
# service requests on TCP-port 636 (ldaps) and requests via unix
# sockets.
# Example usage:
# SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
SLAPD_SERVICES="ldaps:/// ldapi:///"

# If SLAPD_NO_START is set, the init script will not start or restart
# slapd (but stop will still work).  Uncomment this if you are
# starting slapd via some other means or if you don't want slapd normally
# started at boot.
#SLAPD_NO_START=1

# If SLAPD_SENTINEL_FILE is set to path to a file and that file exists,
# the init script will not start or restart slapd (but stop will still
# work).  Use this for temporarily disabling startup of slapd (when doing
# maintenance, for example, or through a configuration management system)
# when you don't want to edit a configuration file.
SLAPD_SENTINEL_FILE=/etc/ldap/noslapd

# For Kerberos authentication (via SASL), slapd by default uses the system
# keytab file (/etc/krb5.keytab).  To use a different keytab file,
# uncomment this line and change the path.
#export KRB5_KTNAME=/etc/krb5.keytab

# Additional options to pass to slapd
SLAPD_OPTIONS=""
11.7.3.3.2. Å sette opp klienten
På klientsiden, trenger oppsettet for libpam-ldap og libnss-ldap-modulene å bli modifisert til å bruke en ldaps://-URI.
LDAP-klienter må også kunne godkjenne serveren. I en X.509 offentlig nøkkel infrastruktur, er offentlige sertifikater signert av nøkkelen til en sertifiseringsinstans (CA). Med easy-rsa, har Falcot-administratorene laget sin egen CA, og nå trenger de å konfigurere systemet til å stole på underskriftene til Falcots CA. Dette kan gjøres ved å sette CA-sertifikatet inn i /usr/local/share/ca-certificates og kjøre update-ca-certificates.
# cp keys/ca.crt /usr/local/share/ca-certificates/falcot.crt
# update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....
Adding debian:falcot.pem
done.
done.
Sist men ikke minst, kan standard LDAP URI og standard base DN, brukt av de ulike kommandolinje-verktøyene, endres i /etc/ldap/ldap.conf. Dette vil spare ganske lang skrive.

Eksempel 11.29. /etc/ldap/ldap.conf-filen

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE   dc=falcot,dc=com
URI    ldaps://ldap.falcot.com

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt