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 som 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 kompleksiteten.

11.7.1. Å installere

Pakken slapd inneholder den åpne OpenLDAP-tjeneren. Pakken ldap-utils inneholder kommandolinjeverktø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 sette opp LDAP-databasen med flere detaljer:
  • Utelate OpenLDAP-tjeneroppsettet? Nei, selvfølgelig ønsker vi å sette opp denne tjenesten.
  • DNS-domenenavn: «falcot.com».
  • Organisasjonsnavn: «Falcot Corp».
  • Et administrativt passord må skrives inn.
  • Bruk database-backend: «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 oppsettet er forsøkt, og 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 satt opp, som demonstrert av 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 ikke er spesielt nyttig, har vi tenkt å legge inn (injisere) i den i alle de eksisterende katalogene; Dette inkluderer brukerne, gruppene, tjenestene og vertsdatabasene.
Pakken migrationtools 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
Vertsnavnet på LDAP-serverenlocalhost
Manager-DNcn=admin,dc=falcot,dc=com
Tilknytningsreferanserdet administrative passordet
Lag DUAConfigProfilenei
Vi lar bevisst være å flytte /etc/aliases-filen, siden standardskjemaet som leveres av Debian ikke inkluderer strukturer som dette skriptet bruker til å beskrive e-postaliaser. Skulle vi ønske å integrere disse dataene i katalogen, skal /etc/ldap/schema/misc.schema-filen legges til standardskjemaet.
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 setter opp et Linux-system, slik at de ulike systemmappene bruker LDAP-databasen.

11.7.3.1. Oppsett av NSS

NSS-systemet (Name Service Switch, se sidestolpe FOR VIDEREKOMMENDE NSS og systemdatabaser) er et modulært system utformet for å definere eller hente informasjon for systemmapper. 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. Oppsett av libnss-ldap-pakken

SpørsmålSvar
LDAP-tjener Uniform Resource Identifierldap://ldap.falcot.com
Øremerket navn for søkerbasendc=falcot,dc=com
LDAP-versjon som skal brukes3
Krever LDAP-databasen innlogging?nei
Spesielle LDAP-rotprivilegierja
Gjør oppsettsfilen lesbar/skrivbar bare for sin eiernei
LDAP-konto for rotcn=admin,dc=falcot,dc=com
LDAP-passord for rotkontodet administrative passordet
Filen /etc/nsswitch.conf må deretter endres, for å sette opp NSS til å bruke den nettopp installerte ldap-modulen.

Eksempel 11.26. Filen /etc/nsswitch.conf

# /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
Modulen ldap er vanligvis satt inn før de andre, og den vil derfor spørres først. Unntaket å merke seg er hosts-tjenesten, siden 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 files-modulen ignoreres), kan tjenester settes opp med følgende syntaks:
tjeneste: 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. Oppsett av PAM

Denne delen beskriver et PAM-oppsett (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 oppsettsparametere (for eksempel URI for LDAP-tjeneren) er faktisk delt med libnss-ldap-pakken. Svarene er er oppsummert i Tabell 11.3.

Tabell 11.3. Oppsett av libpam-ldap

SpørsmålSvar
Tillate LDAP-administrasjonskontoen å 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?nei
LDAP-konto for rotcn=admin,dc=falcot,dc=com
LDAP-passord for rotkontoLDAP-databasens administrative passord
Å bruke lokal krypteringsalgoritme for passordkrypten
Installering av libpam-ldap tilpasser automatisk standard PAM-oppsettet 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 type ordbokangrep. Dette kan unngås ved hjelp av et ekstra krypteringslag; å aktivere dette laget er tema for denne seksjonen.
11.7.3.3.1. Oppsett av tjenermaskinen
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-key-server ldap.falcot.com medfører noen dagligdagse spørsmål (plassering, organisasjonsnavn og så videre). Svaret på spørsmålet «common name» («vanlig navn»-spørsmålet ) være 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
Nissen slapd må også få beskjed om å bruke disse nøklene/tastene til kryptering. LDAP-tjeneroppsettet styres dynamisk: oppsettet kan oppdateres med normale LDAP-operasjoner på cn=config-objekthierarki, og tjeneroppdateringer på /etc/ldap/slapd.d i sann tid for å gjøre oppsettet varig. ldapmodify er dermed det riktige verktøyet for å oppdatere oppsettet:

Eksempel 11.27. Oppsett av slapd for kryptering

# 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. Filen /etc/default/slapd

# 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. Oppsett av 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 tjeneren. I en X.509 offentlig nøkkelinfrastruktur 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 å sette opp 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 kommandolinjeverktøyene, endres i /etc/ldap/ldap.conf. Dette vil spare ganske mye skriving.

Eksempel 11.29. Filen /etc/ldap/ldap.conf

#
# 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