apt-get install slapd ldap-utils libnss-ldap libpam-ldap nscd gq
slapd:
stand-alone LDAP server ldap-utils:
klientské utility libnss-ldap:
Name Service Switch, který umožňuje LDAP serveru
fungovat jako Name service libpam-ldap:
LDAP moduly do PAM nscd:
Name Service Caching Daemon gq:
gtk klient# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
# Schema check allows for forcing entries to
# match schemas for their objectClasses's
schemacheck on
# ...
#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend bdb
checkpoint 512 30
#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database bdb
# The base of your directory in database #1
suffix "dc=localdomain"
# Where the database file are physically stored for database #1
directory "/var/lib/ldap"
# Indexing options for database #1
index uid objectClass eq
# Save the time that the entry gets modified, for database #1
lastmod on
rootdn "cn=admin,dc=localdomain"
rootpw secret # lze zadat i hash vygenerovany pomoci slappasswd(8)
Aplikace, která čte, modifikuje a ukládá data v adresáři. Neměla by být zaměňována s adresářem, což je pouze databáze objektů, které ona zpřístupňuje. Adresářová služba je rozhraním k adresáři, provádí autentizaci a poskytuje přístup k datům.
Je založený na modelu X.500: Jedná se o strom, v němž každý uzel je objektem tvořeným množinou pojmenovaných atributů. Každý atribut může mít jednu nebo více hodnot. Většina služeb používá strom s právě jedním vrcholem. Bývá zvykem, že struktura adresáře odráží organizační nebo geografickou strukturu. V dnešní době se často používají DNS jména pro jednotlivé úrovně adresáře. Dále mohou být objekty v databázi např. lidé, organizační celky, tiskárny, dokumenty, atd..
Každý uzel v adresáři je určen jednoznačným jménem: tzv. Distinguished Name (DN), které je složeno z Relative Distinguished Name (RDN) a z DN rodičovského elementu.
LDAP je binární protokol, proto se k popisu uzlů používá textový formát LDIF (LDAP Data Interchange Format). Uzel vyjádřený v LDIF může vypadat např. takto:
dn: cn=John Doe,dc=example,dc=com cn: John Doe givenName: John sn: Doe telephoneNumber: +1 555 6789 telephoneNumber: +1 555 1234 mail: john@example.com manager: cn=Barbara Doe,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top
DN objektu nepatří mezi jeho atributy, je to název. LDAP nedefinuje pořadí atributů, takže server může vracet hodnoty v atributu, atributy v objektu a objekty ve výsledku vyhledávání v libovolném pořadí.
Obsah uzlů ve stromu je definován pomocí schémat. Schéma definuje atributy, které uzel musí/může obsahovat, a jejich formáty. Implementace OpenLDAP je distribuována s několika schématy uloženými jako /etc/ldap/schema/*.schema. Tyto definice jsou zohledněny direktivou "include" v /etc/ldap/slapd.conf:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema
Jeden uzel ve stromu může být definován pomocí jednoho nebo více schémat. Ta se definují atributem objectClass (viz. příklad výše). Stejně jako objekty v adresáři jsou i schémata uspořádána v hierarchii na základě dědičnosti. Je-li objektu v objectClass priřazeno schéma, jsou mu automaticky přiřazeni i všichni předkové uvedeného schématu. Na vrcholu hierarchie dědičnosti je třída "top".
Specifikace schémat a návod k vytvoření vlastního schématu můžete najít na http://www.openldap.org/doc/admin23/schema.html
slapcat
- výpis celé databáze v LDIF formátuslappasswd
- vygeneruje hash hesla ve formátu použitelném ve slapd.confslaptest
- zkontroluje správnost slapd.confslurpd
- ldap replikační démonslapd
- ldap démonldapsearch
- vyhledáníldapadd, ldapmodify, ldapdelete
- přidávávání, modifikace a mazáníldapmodrdn
- přejmenování rdnldappasswd
- mění heslo ldap objektuldapwhoami
- kdo jsem?Můžeme použít i gtk klient GQ.
Autentizace klienta serveru se označuje jako bind. Bind ověřuje heslo s atributem userPassword daného DN (-D 'uid=karel,dc=localdomain'). Důležité tedy je, že pro LDAP neexistuje externí záznam pro uživatele, nýbrž tito jsou uloženi v LDAP stromu spolu s ostatními objekty. Připojení bez uvedeného DN a hesla nastaví připojení do stavu anonymous.
Autorizace je nastavena v /etc/ldap/slapd.conf
Příklady konfigurace:
access to attrs=userPassword by dn="cn=admin,dc=localdomain" write by anonymous auth by self write by * none
Překlad: Pro všechny atributy userPassword nastav, že cn=admin,dc=localdomain je může měnit, anonymní uživatel se musí autentizovat nebo má smůlu, vlastník (ten, který se přihlásí pod DN objektu) ho může měnit a jinak ho nesmí nikdo ani číst.
access to * by dn="cn=admin,dc=localdomain" write by * read
Překlad: Nastav pro všechny objekty, že cn=admin,dc=localdomain je může měnit a všichni ostatní je mohou číst.
Pro úplnou specifikaci nastavení autorizace můžete nahlédnou na: http://www.openldap.org/doc/admin22/slapdconfig.html#Access Controlobjectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY DESC 'Abstraction of an account with POSIX attributes' MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description ) ) objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' SUP top AUXILIARY DESC 'Additional attributes for shadow passwords' MUST uid MAY ( userPassword $ shadowLastChange $ shadowMin $ shadowMax $ shadowWarning $ shadowInactive $ shadowExpire $ shadowFlag $ description ) )
Často používané parametry:
-D 'cn=admin,dc=localdomain'
: za koho se vydávám-x
: použij jednoduchou autentizaci-W
: zeptej se na heslo-f /tmp/file.ldif
: načti vstup ze souboru-H ldap://ldap.fi.muni.cz
: použitý LDAP server
# vyhledání skupin na fi, jejichž členem je objekt s uid 'staudek' $ ldapsearch -x -H ldap://ldap.fi.muni.cz -b 'ou=Group,dc=fi,dc=muni,dc=cz' \ '(&(objectClass=posixGroup)(memberUid=staudek))'Specifikace syntaxe pro vyhledávání vč. příkladů viz. RFC2254
# vytvoření LDIF souboru pro přidání do adresáře $ cat > /tmp/new.ldif << "EOF" dn: uid=bond,dc=agaue,dc=lab,dc=fi,dc=muni,dc=cz cn: bond uid: bond uidNumber: 10 gidNumber: 1000 homeDirectory: /home/bond objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword: heslo loginShell: /bin/bondshell gecos: James Bond description: chlapek EOF $ ldapadd -xW -D 'cn=admin,dc=agaue,dc=lab,dc=fi,dc=muni,dc=cz' \ -f /tmp/new.ldif
cat > /tmp/modify.ldif << "EOF" dn: uid=bond,dc=agaue,dc=lab,dc=fi,dc=muni,dc=cz changetype: modify replace: loginShell loginShell: /bin/bash - delete: description EOF $ ldapmodify -xW -D 'cn=admin,dc=agaue,dc=lab,dc=fi,dc=muni,dc=cz' \ -f /tmp/modify.ldif
$ ldapdelete -xW -D 'cn=admin,dc=agaue,dc=lab,dc=fi,dc=muni,dc=cz' \ 'uid=bond,dc=agaue,dc=lab,dc=fi,dc=muni,dc=cz'
O replikaci se stará démon slurpd, který je součástí balíku slapd. Při konfiguraci slapd.conf rozlišujeme, jestli se jedná o master server nebo slave server. Konfigurace master:
replogfile /var/lib/ldap/ldap.replog replica uri=ldap://slave.localdomain binddn="cn=Replicator,dc=localdomain" # DN se zapisem do databaze bindmethod=simple credentials=secret
Konfigurace slave:
updatedn cn=Replicator,dc=localdomain
Více viz. http://www.openldap.org/doc/admin23/replication.html
Tady potřebujeme mít nainstalovanou knihovnu /lib/security/pam_ldap.so. Aby naše programy používaly LDAP přes PAM, musíme doplnit příslušné řádky do souborů v /etc/pam.d/*. Např. pro /etc/pam.d/login:
auth required pam_nologin.so auth sufficient pam_ldap.so auth sufficient pam_unix.so shadow use_first_pass auth required pam_deny.so account sufficient pam_unix.so account sufficient pam_ldap.so account required pam_deny.so
Potom nastavíme PAM, aby uměl komunikovat s LDAPem (/etc/pam_ldap.conf(5)):
host 127.0.0.1 base dc=localdomain
Pro spolupráci ldap s NSS máme nainstalovanou knihovnu nss_ldap. S nastavením NSS začneme u souboru /etc/nsswitch.conf, kde připíšeme "ldap" tam, kde cheme, aby se ldap používal. Řetězec "ldap" znamená, že pro vyhledávání se použije knihovna libnss_ldap.so.
passwd: files ldap shadow: files ldap group: files ldapDále musíme nastavit NSS, aby stejně jako PAM věděl, jak má komunikovat s LDAPem. Do souboru /etc/libnss-ldap.conf napíšeme:
host 127.0.0.1 base dc=localdomain
Více viz. libnss-ldap.conf(5)
Abychom zabránily dotazům na LDAP server pokaždé, když pustíme příkaz typu
ls -l /home
, je dobrým nápadem nakonfigurovat na stanicích nscd,
aby kešoval tato data. Dokud jsou data v keši platná, používají se namísto
dotazování se znovu na server. Konfigurace (/etc/nscd.conf(5)):
enable-cache passwd yes positive-time-to-live passwd 600 negative-time-to-live passwd 20 suggested-size passwd 211 check-files passwd yes enable-cache hosts yes positive-time-to-live hosts 3600 negative-time-to-live hosts 20 suggested-size hosts 211 check-files hosts yes