LDAP; další metody autentizace

Jan Dosoudil, 359718@mail.muni.cz

Obsah

LDAP

Wikipedie[1] popisuje LDAP takto:

LDAP (Lightweight Directory Access Protocol) je definovaný protokol pro ukládání a přístup k datům na adresářovém serveru. Podle tohoto protokolu jsou jednotlivé položky na serveru ukládány formou záznamů a uspořádány do stromové struktury (jako ve skutečné adresářové architektuře). Je vhodný pro udržování adresářů a práci s informacemi o uživatelích (např. pro vyhledávání adres konkrétních uživatelů v příslušných adresářích, resp. databázích). Protokol LDAP je založen na doporučení X.500, které bylo vyvinuto ve světě ISO/OSI, ale do praxe se ne zcela prosadilo, zejména pro svou "velikost" a následnou "těžkopádnost".

Protokol LDAP je popsaný v RFC 4510-4521, RFC4510[2] je rozcestníkem k dalším RFC, které popisují detailně jednotlivé části protokolu.

LDAP je client-server protokol určený k přístupu k adresářovým službám, přistupuje k datům organizovaným ve stromové struktuře. Obvykle se pro přístup používá TCP v nešifrované podobě (port 389) nebo zabezpečené variantě pomocí SSL (port 636). Pro přístup k serveru je vyžadována authentizace, často je to jediná využitá služba klientem. Dalšími službami jsou vyhledávání, přidávání, odebírání, upravování, porovnávání, ... záznamů.

Protokol umožňuje distribuované nasazení pomocí replikací a delegací.

Adresářové služby

LDAP poskytuje přístup k adresárovým službám. Pojmem LDAP bývá často označován i vlastní server poskytující adresářové služby pomocí protokolu LDAP. Dále v textu bude LDAP označovat adresářový server, ke kterému je přistupováno pomocí LDAP protokolu.

Adresářový server je nerelační databází určenou pro časté čtení a občasné změny. Server nezaručuje transakční zpracování, formální správnost ani referenční integritu - tuto funkcionalitu si musí aplikace zajistit samy. Data jsou organizována ve stromové struktuře (DIT, Directory Information Tree), kde každý záznam má svoji jednoznačnou identifikaci (atribut DN, Distinguished Name).

Atribut DN je tvořen řetězem RDN (Relative Distinguished Name) v obráceném pořadí, kde jednotlivé RDN jsou odděleny ",". DN udává cestu ke kořenu stromu. Jednotlivé RDN jsou klíčové hodnoty, které mají k vlastní hodnotě přiřazen i sémantický význam. Příkladem může být DN: o=fi,dc=muni,dc=cz, který říká, že v doměné cz je doména muni, které obsahuje organizaci fi.

Schéma databáze

LDAP nepředepisuje pevné schéma objektů, ale objekty musí obsahovat atributy odpovídající jejich třídám (objectClass). Třídy se definují obvykle na úrovni celého serveru. Základní třídy jsou obvykle dodávány se serverem, dodavatel obvykle rozšíří schéma o třídy jím používané, další třídy získáme od dodavatele aplikace, která spolupracuje s LDAP serverem, případně si můžeme vytvořit vlastní schéma. Formát schémata není pevně stanoven a liší se mezi dodavateli serverů. Každy objekt vložený do adresáře musí obsahovat seznam objectClass, které nadefinují jeho povinné a nepovinné atributy a určí tím jeho strukturu.

Nástroje na práci s LDAP

Konzolové nástroje

Základními nástroji pro přístup k ldap serveru z textové konzole jsou nástroje z balíku ldap-utils (debian) ldapadd, ldapcompare, ldapdelete, ldapmodify, ldapsearch, ..., které umožňují přímé volání ldap serveru. Data jsou předávána ve formátu LDIF[3], který je pro člověka čitelný, ale není pohodlný a hodí se spíše pro strojové zpracování.

Grafické nástroje

Nejznámějším grafickým nástrojem pro unixové operační systémy je GQ, který je již značně zastaralý a zdá se mrtvý (31.3.2010).

Dalším nástrojem je Apache Directory Studio[4], který umožňuje komfortní práci s LDAP servery.

OpenLDAP

Nejčastěji používanou implementací LDAP serveru v GNU/Linuxu je OpenLDAP[5], server podporuje SASL authentizaci.

Pro instalaci v Debianu doporučuji použít návod[6], ve kterém je detailně popsán postup zprovoznění krok za krokem. Zde uvedu jen stručný výtah:

sudo apt-get install slapd ldap-utils

Nastavit globání konfiguraci pro přístup k LDAP serveru

vi /etc/ldap/ldap.conf

Nastavit hodnoty podle informací vyplněných při instalaci:

BASE  o=fi,dc=muni,dc=cz
URI ldap://10.0.0.10/

Konfigurace OpenLDAP serveru (slapd) se provádí v konfiguračním souboru /etc/ldap/slapd.conf. Výchozí hodnoty by měly být postačující.

Otestovat funkčnost můžeme příkazem

ldapsearch -x

který by měl vyhledat všechny záznamy a vypsat v LDIF formátu na standardní výstup.

LDAP nyní obsahuje pouze základní informace o kořenu adresářové struktury a administrátorovi. Pro další použití je potřeba naplnit adresář objekty. V návodu[6] naleznete vzorový příklad v LDIF formátu. Další možností naplnění adresáře jsou např. konverzní scripty pro převod unixových účtů do ldapu.

Použití LDAPu v GNU/linux

Pro možnost použití LDAP serveru pro ověření uživatelů v GNU/Linuxu (UNIXu) je nutné používat objekty s objectClass PosixAccount a ShadowAccount, které strukturou obsahem odpovídají souborům /etc/passwd a /etc/shadow

Pro zapnutí ověřování uživatelů je potřeba nainstalovat podporu pro ldap v nsswitch, daemon nscd umožní cachování informací získaných přes nss a tím výrazně urychlit opakované dotazy:

sudo apt-get install libnss-ldap nscd

Upravíme konfiguraci libnss-ldap v souboru /etc/libnss-ldap.conf tak, aby odpovídala konfiguraci LDAP serveru:

base  o=fi,dc=muni,dc=cz
uri ldap://10.0.0.10/

Upravíme /etc/nsswitch.conf a tím povolíme dotazování se na LDAP server pro získávání informací o uživatelích.

passwd:         files ldap
group:          files ldap

Přihlašování uživatelů

Přihlašování uživatelů zajistí PAM, nainstalujeme modul pro podporu LDAPu:

sudo apt-get install libpam-ldap

Upravíme konfiguraci pro přístup k ldap serveru v souboru /etc/pam_ldap.conf:

base  o=fi,dc=muni,dc=cz
uri ldap://10.0.0.10/

Nyní je potřeba pro služby v PAMu zapnout ověřování proti LDAPu:

#/etc/pam.d/common-account

account sufficient      pam_unix.so
account required        pam_ldap.so

#/etc/pam.d/common-auth

auth [success=1 default=ignore] pam_unix.so nullok_secure
auth required pam_ldap.so use_first_pass
auth required pam_permit.so

#/etc/pam.d/common-session

session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022

Nyní by již mělo být možné použít ldap uživatele pro přihlašování k systému.

Přístupová práva k jednotlivým objektům LDAP serveru, replikace

Přístupová prava k objektům i replikace je závislá na implementaci serveru. V OpenLDAP se obojí konfiguruje v /etc/ldap/slapd.conf. Pro správnou funkčnost je vyžadováno prvotní sesynchronizování databáze a stejné konfigurace serverů. Příklad konfigurace:

master:
	replica uri=ldap://slave.example.com
		binddn="cn=Manager,o=fi,dc=muni,dc=cz"
		bindmethod=simple credentials=secret
	replogfile /usr/lib/openldap/ldap.replog
slave:
	updatedn cn=Manager,o=fi,dc=muni,dc=cz
	updateref ldap://master.example.com


access to attrs=userPassword,userPKCS12
        by dn="cn=admin,o=fi,dc=muni,dc=cz" write
        by anonymous auth
        by self write
        by * none

Jednorázová hesla - OPIE, S/Key

OPIE[7] je authentizační mechanismus pomocí jednorázových hesel založený na S/Key[8].

Literatura