LDAPu v praxi | |||||
| POPIS: |
LDAPu v praxi
Snad už všechny síťově operační systémy umožňují centralizovanou správu uživatelských účtů případně dalších informací. Pro ukládání informací o účtech je velmi vhodné použít adresář. Tento dokument popisuje jak nainstalovat a nastavit síťové služby s využitím adresářového serveru. Pokusím se co nejvíce využít free a opensource software (Linux, FreeBSD), ale také popíšu konfiguraci pro operační systémy Solaris a Microsoft Windows.
Adresářová služba (dále budu používat pouze adresář) slouží jako centrální úložiště pro spoleřná data, která umí velmi rychle poskytovat. Data o které se adresářová služba stará jsou spíš neměnná, velmi rychle dohledatelná, nepotřebují transakční zpracování. Od adresářové služby je požadována velmi rychlá odpověď a stabilita (jedná se o centrální systém).
Data která se uchovávají v adresáři jsou o lidech (jméno uživatele, login,, telefon, adresa, konfigurace software atd.), data aplikací (konfigurace a umístění jednotlivých komponent systému a podobně) a jmenné služby (hosts, services, skupiny, uživatelé). Klienty adresáře jsou operační systémy, systémy pro správu přístupu k aplikacím, databáze, webový server, mailserver.
Adresář je optimalizován pro velký počet požadavků na čtení (tisíce čtení na jednu zápisovou operaci). Adresář není relační databáze, není optimalizován pro časté zápisy.
Nejčastěji používaným protokolem pro komunikaci s adresářovým serverem je LDAP.
LDAP je standardizovaný komunikační protokol pro adresářové služby přes TCP/IP. LDAP data jsou uchovávána v záznamech, které jsou organizovány ve stromové struktuře (Directory Information Tree - DIT). Nejvyšší záznam v DIT se nazývá suffix nebo také root suffix.
Záznam v LDAPu se skládá ze tří základních prvků:
Které object class a atributy můžete u záznamu použít předepisuje directory schema. Je možné si schema upravit na míru, rozšířit tím záznamy o další atributy, které potřebujete.
Každý záznam v LDAPu, tedy položka v jeho stromové struktuře (DTI) má přiřazené distinguished name (DN), které je unikátni. DN je složeno z atributů a jejich hodnot. Běžně se využívají atributy dc (domainComponent), o (organization), ou (organizationalUnit), uid (userid) a cn (common name), ale jejich využití není nutné.
Ukázka DN: uid=burdaz,ou=people,o=intranet,dc=example,dc=net
První atribut s hodnotou v DN se nazývají relative distinguished name (RDN). Pro naše vzorové DN je RDN uid=burdaz. Řetězec atributů a hodnot popisuje kde se záznam ve stromové struktuře (DIT) nachází.
Atributy popisují záznam, který je obsahuje. Atributy obsahují různá data jako jsou jméno, číslo telefonu, email... Definice každého atributu je součástí schematu. Definice obsahuje informace o datovém typu, jestli je citlivý na velikost písmen, jestli může být atribut uveden v jednom záznamu jednou nebo vícekrát.
· srv.example.net
Pouze shell server, na kterém si uživatelé můžou dělat co chtějí. Domácí adresáře uživatelů jsou mountované z serveru file.example.net automounterem přes NFS.
· www.example.net
Web server a FTP server, zpřístupňuje uživatelské souboury veřejnosti. Uživatelské adresáře jsou mountované z počítače file.example.net přes NFS. Na serveru nemá žádný uživatel shell konto.
· mail.example.net
Mail server, který přijímá a odesílá poštu uživatelů, skenuje ji proti virům a spamu. Emaily se ukládají na server file.example.net. Na serveru nejsou žádná uživatelská shell konta. Server zpřístupňujě poštu uživatelům pomocí IMAPs nebo POP3s protokolu. Podle plánované zátěže lze samozřejmě jednotlivé služby rozdělit na více počítačů.
· ldap.example.net
Na tomto stroji běží adresářový server. Stroj je velmi důležitý, proto na něm nejsou žádné další služby a také na něm nejsou žádná uživatelská konta.
· ldap2.example.net
Server slouží jako záloha v případě výpadku ldap.example.net.
· file.example.net
Na tomto serveru jsou všechny soubory uživatelů, jejich pošta, weby a domácí adresáře. Je to prostě file server. Soubory sdílíme přes SAMBU (pro hlavně MS Windows) a přes NFS.
· gw.example.net
Server slouží jako vnitřní firewall a také jako VPN brána.
Obrázek 2.1. Struktura testovací sítě
??? vychází z protokolu ???, zjednodušuje jeho komunikační protokol, ale bežné použití nabízí více zajímavých funkcí než X.500. Tak jako X.500 i LDAP nabízí datový model pro adresář a protokol pro dotazy a jeho aktualizaci. Více informací najdete v RFC (příloha A – „RFC“) a na webu OpenLDAPu. LDAP protokol není určen pro transakce, proto nekonkuruje klasickým SQL databázím. Protokol LDAP je optimalizován na čtení.
Instalace čehokoliv co je součástí distribuce Debian je docela pohodová. Skládá se většinou ze spuštění programu apt-get a někdy je potřeba trochu přiohnout konfigurák dané aplikace. U OpenLDAPu je pro instalaci následující postup: spustíte instalaci pod uživatelem root pomocí příkazu apt-get install slapd a vyplníte doménu (Obr. 4.1 – „instalace slapd - zadání domény“), organizaci(Obr. 4.2 – „instalace slapd - zadání organizace“), zadáte heslo admina (Obr. 4.3 – „instalace slapd - heslo admina“) a zvolíte >No< pro zakázání LDAPv2(Obr. 4.4 – „instalace slapd - zákaz LDAPv2“).
Obrázek 4.1. instalace slapd - zadání domény
Obrázek 4.2. instalace slapd - zadání organizace
Obrázek 4.3. instalace slapd - heslo admina
Obrázek 4.4. instalace slapd - zákaz LDAPv2
Konfigurace adresářového serveru je uložena v souboru /etc/ldap/slapd.conf
, schémata jsou v adresáři /etc/ldap/schema/
. Po instalaci by měl být soubor slapd.conf připraven pro běžné použití.
Obsah mého konfiguračního souboru /etc/ldap/slapd.conf
, který vygeneroval instalátor (nic jsem v něm neměnil):
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
schemacheck on
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd.args
loglevel 0
modulepath /usr/lib/ldap
moduleload back_bdb
backend bdb
checkpoint 51230
database bdb
suffix "dc=example,dc=net"
directory "/var/lib/ldap"
index objectClass eq
lastmod on
access to attrs=userPassword
by dn="cn=admin,o=example,dc=net" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
access to *
by dn="cn=admin,dc=example,dc=net" write
by * read
Pro práci s adresářem z příkazové řádky lze využít nástroje ldapsearch (Obrázek 4.5 – „ldapsearch“) ldapadd, ldapmodify aldapdelete. Práce s těmito programy není příliš příjemná, ale na druhou stranu je jejich funkčnost 100%. Pro ulehčení práce používám v shellu následující aliasy:
· alias ldap-add='ldapadd -h ldap.example.net -x -D "cn=admin,dc=example,dc=net" -w demo1234' - slouží pro přidání záznamu do LDAPu, záznam se zapisuje po spuštění programu.
· alias ldap-search='ldapsearch -h ldap.example.net -x -D "cn=admin,dc=example,dc=net" -b "dc=example,dc=net" -w demo1234' - jako parametr při spouštění aliasu se zadává vyhledávací maska
· alias ldif-add='ldapadd -h ldap.example.net -x -D "cn=admin,dc=example,dc=net" -w demo1234 -f' - jako parametr při spouštění aliasu je třeba zadat ldif soubor, který chcete do LDAPu přidat
Samozřejmě existují i grafické nástroje, použitelný jsou například gq (Obrázek 4.7 – „gq“) nebo luma (Obrázek 4.6 – „Luma“).
Snad každý normální programovací jazyk má knihovny pro práci s LDAPem, tak vám nic nebrání v tom abyste si napsali nástroje jaké potřebujete.
Obrázek 4.5. ldapsearch
Obrázek 4.6. Luma
Obrázek 4.7. gq
Adresářový server je velmi důležitý pro běh celého systému, proto je vhodné zajistit jeho zálohu. OpenLDAP podporuje replikaci, démon slapd se nastaví tak aby všechny změny zapisoval do logu. Spustí se samostatný daemon slurpd, který sleduje log a změny zasílá dalším adresářovým serverům. Slurpd je LDAP klient, proto nezpomeňte na Kerberos ticket pro autentikaci do adresářových serverů. Sluprd musí mít ACL pro zápis do všech objektů na replikačních LDAP serverech.
Pro přístup k LDAP serveru z venčí je třeba povolit porty 389/tcp (LDAP) a 636/tcp (LDAPs).
Když mi nějaké nastavení programu nevracelo správné výsledky, tak mi pomohlo spostit LDAP server v terminálu ručně s parametrem -d: slapd -d 256, pak je totiž vidět na co se klient ptá a jakou dostane odpověď. Když si pod tou odpovědí neumíte nic představit, tak stačí klientův dotaz spustit ručně pomocí našeho aliasu ldap-search.
Všechna nastavení ukázaná v této kapitole jsou provedena na počítači srv.example.net. Samozřejmě je můžete udělat na jakémkoliv jiném počítači v síti.
Pokud provedete standardní instalaci OS Linux, ověřují se uživatelé proti databázi uživatelů, která je uložena v souborech /etc/passwd
a /etc/shadow
. Seznam uživatelských skupin je v souboru /etc/group
. V některých UNIXových sítích se můžete setkat s využíváním NIS případně NIS+ pro centrální správu uživatelů. My provedeme konfiguraci, která umožní využítí adresářového serveru.
Pro uložení informací o uživatelích do LDAPu potřebujeme vytvořit vhodné struktury.
dn: ou=hosts,dc=example,dc=net
ou: hosts
objectClass: top
objectClass: organizationalunit
dn: ou=rpc,dc=example,dc=net
ou: rpc
objectClass: top
objectClass: organizationalUnit
dn: ou=services,dc=example,dc=net
ou: services
objectClass: top
objectClass: organizationalUnit
dn: ou=networks,dc=example,dc=net
ou: networks
objectClass: top
objectClass: organizationalUnit
dn: ou=people,dc=example,dc=net
ou: people
objectClass: top
objectClass: organizationalUnit
dn: ou=group,dc=example,dc=net
ou: group
objectClass: top
objectClass: organizationalUnit
dn: ou=aliases,dc=example,dc=net
ou: aliases
objectClass: top
objectClass: organizationalUnit
Uživatele pak založíme podle následující šablony:
dn: uid=tsunami,ou=people,dc=example,dc=net
objectclass: top
objectclass: posixAccount
objectclass: inetorgperson
objectclass: shadowAccount
objectclass: organizationalPerson
uid: tsunami
cn: Zdenek Burda
sn: Burda
mail: zdenda@zdenda.com
userPassword: {MD5}bpvs4ZFICfuEkxRkF+ci9g==
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 100
homeDirectory: /home/tsunami
gecos: Zdenek Burda
shadowLastChange:10877
shadowMin: 0
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0
Není potřeba vkládat všechny informace při zakládání účtu, spoustu z nich lze nastavit někdy v budoucnu. Pro nás jsou povinné pouze: cn
, gidNumber
, homeDirectory
, sn
, uid
, uidNumber
.
Pokud používáte autofs pro připojování domácích adresářů ze serveru, nezapomeňte vytvořit uživateli na serveru domácí adresář.
Založíme skupinu users:
dn: cn=users,ou=group,dc=example,dc=net
objectclass: top
objectclass: posixGroup
cn: users
gidNumber: 100
memberuid: tsunami
Pro správnou funkci systému jmenných služeb (NSS) potřebujeme podporu pro ldap. V Debianu se nachází v samostatném balíčkulibnss-ldap
. Při instalaci (apt-get install libnss-ldap) nás instalátor vyzve pro zadání některých údajů:
ldap.example.net
dc=example,dc=net
3
No
No
Na závěr vás instalátor upozorní, že konfigurační soubor /etc/nsswitch.conf
nebude upraven automaticky.
Všechny volby libnss-ldap lze samozřejmě nastavit ručně v souboru /etc/libnss-ldap.conf
případně kdykoliv po nainstalování pomocí rekonfigurace (dpkg-reconfigure libnss-ldap).
Pro naší potřebu upravíme v /etc/nsswitch.conf
následující řádky:
passwd: ldap files
shadow: ldap files
group: ldap files
Jak již z názvu nscd (name service caching daemon) vyplývá, slouží tento program pro kešování informací získávaných z NSS. Doporučuje se použití nscd, proto si ho nainstalujeme i my. Program je součástí snad každé normální distribuce, takže i v Debianu ho najdeme: apt-get install nscd, konfigurační soubor je /etc/nscd.conf
.
Pokud provádíte změny v datech a chcete je okamžitě promítnout do chování systému, je třeba osvěžit cache pomocí/etc/init.d/nscd reload, jinak se vám může stát, že smažete uživatele a on je pořád vidět při použití příkazu id a podobně i když už se do systému nepřihlásí.
Systém autentozačních modulů PAM zajišťuje bezpečné ověření uživatele. Systém PAM je plně programovatelný a umožňuje nezávislost programů na konkrétních autentizačních postupech.
Základem systému PAM jsou připojovatelné moduly, dynamicky linkované knihovny, a najdeme je v /lib/security
.
Pam umožňuje autentizaci uživatele (auth), kontrolu účtu (account), správu relace (session) a změnu hesla (password).
Konfigurace PAM systému se většinou nachází v /etc/pam.conf
a v /etc/pam.d/
.
PAM modul pam_ldap slouží k ověření přihlášení proti LDAPu. Pro jeho správnou funčnost je třeba nastavit informace o LDAPu v /etc/pam_ldap.conf
(vyzve vás k tomu skript při instalaci balíčku libpam-ldap v debianu). Obsah souboru /etc/pam_ldap.conf
může vypadat třeba takto:
base dc=example,dc=net
host 127.0.0.1
ldap_version 3
pam_password md5
rootbinddn cn=admin,dc=example,dc=net
Vlastní ověřování proti LDAPu je třeba nastavit v konfiguraci PAMu:
/etc/pam.d/common-auth
auth sufficient pam_ldap.so
auth sufficient pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-account
account sufficient pam_ldap.so
account sufficient pam_unix.so use_first_pass
/etc/pam.d/common-password
password sufficient pam_ldap.so
password sufficient pam_unix.so use_authok nullok obscure min=6 max=16 md5
/etc/pam.d/common-session
session required pam_ldap.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=077
V případě výpadku LDAP serveru případně poruchy nějakého síťového prvku vzniká docela nepříjemný problém s ověřením uživatele přes síť proti adresířovému serveru. Částečně se dá řešit pomocí PAM modulu pam_ccred, který umožňuje kešovat přihlašovací informace.
/etc/pam.d/common-auth
:
auth sufficient pam_unix.so
auth [authinfo_unavail=ignore success=1 default=die] pam_ldap.so use_first_pass
auth [default=done] pam_ccreds.so action=validate use_first_pass
auth [default=done] pam_ccreds.so action=store use_first_pass
auth [default=done] pam_ccreds.so action=update use_first_pass
/etc/pam.d/common-account
:
account sufficient pam_unix.so nullok_secure
account sufficient pam_ldap.so
account required pam_permit.so
Přihlásíme se do systému, když normálně funguje LDAP server a zkontrolujeme jeslti se nám uložily informace do cache.
vodik:/var/cache# cc_dump
Credential Type User Service Cached Credentials
----------------------------------------------------------------------------------
Salted SHA1 tsunami any 80141f0721cf1eeaca6d182db474ed7eeec0925e
Máme také možnost vyzkoušet, jestli cache obsahuje správné údaje zkušebním přihlášením:
vodik:/var/cache# cc_test -validate any tsunami heslo /var/cache/.security.db
pam_cc_validate_credentials: Success
Zastavte LDAP server (/etc/init.d/slapd stop) a zkuste se přihlásit
[uzivatel@vodik]$ su - tsunami
Password:
You have been logged on using cached credentials.
tsunami@vodik:~$
Pokud chcete umožnit uživatelům přihlášení na kterémkoliv správně nastaveném počítači na síti, je třeba zpřístupnit domácí adresáře.
Jednou z možností, jak zajistit uživateli domácí adresář, je jeho vytvoření při prvním přihlášení do systému. Toto řešení je použitelné například když zakládáte uživatele zápisem do LDAPu z nějakého webového rozhraní a nechcete řešit vytváření domácích adresářů. Pozor, adresář se vytvoří na každém stroji, kde neexistuje. pam_mkhomedir není zrovna dobrý nápad, pokud chcete centralizovat domácí adresáře uživatelů, ale hodí se třeba na serveru, kde chcete automaticky vyrábět domácí adresáře při prvním přihlášení uživatele. Při vytvoření se uživateli do domácího adresáře automaticky nakopíruje obsah /etc/skel/
.
Použití pam_mkhomedir je docela jednoduché, stačí v souboru /etc/pam.d/common-session
upravit říst session přibližně do podoby:
session required pam_ldap.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=077
Pokud máte více počítačů propojených do sítě a chcete umožnit přístup k uživatelským datům z kteréhokoliv počítače, lze využít PAM modul pam_mount. pam_mount po ověření uživatele umí namountovat adresáře třeba ze sítě nebo z nějakého šifrovaného souboru. Je možné mountovat svazky pomocí SMB protokolu a podobně.
Klasický UNIXový nástroj autofs (automounter) umožňuje automatické připojování svazků ze sítě. Po přihlášení uživatele se namountuje jeho domácí adresář přes NFS z nějakého centrálního fileserveru. Autofs má jednu velkou výhodu, umožňuje definovat konfiguraci v LDAPu a tím i centralizovanou správu.
V distribuci Debian je autofs dostupný v samostatném baliíčku. Instalace je jednoduchá: apt-get install autofs
.
Konfigurace autofs se provádí v soubour /etc/auto.master
, pravděpodobně tam budete mít zakomentované nastavení pro adresář /net
, pokud tuto volbu odkomentujete a autofs
restartujete, budete mít možnost "procházet" sítí NFS serverů. Procházení je docela příjemné a rychle se na něj zvyká. Prostě jen napíšete cd /net/server/ a vidíte co má server nasdílené. Jako server lze uvést buď IP adresu nebo přímo doménový název počítače.
Pro automatické mountování domácích adresářů je třeba výchozí konfiguraci autofs trochu rozšířit. Do souboru /etc/auto.master
přidejte řádek
/home /etc/auto.home
Soubor /etc/auto.home
sice neexistuje, ale to nám nevadí, založíme si ho. Jeho obsah:
* -rw server:/export/home/&
První položka na řádku specifikuje uživatelské jméno, protože chceme mountovat adresáře všech uživatelů ze sítě, necháme tam hvězdičku. Jako druhý údaj na řádku jsou uvedeny parametry pro moun no a na konci je uvedeno místo, kde se mají mountované adresáře hledat. & úplně na konci zastupuje uživatelské jméno.
Jak to celé funguje? Řekněme, že máme uživatele v LDAPu a u každého je uveden jako domácí adresář /home/username
. Všechny domácí adresáře máme na jednom společném NFS serveru a jsou na něm umístěny v /export/home/
, tento adresář je vyexportován přes NFS. Na všech pracovních stanicích máme nastaveno uvěřování uživatelů proti LDAPu a také na nich máme nastavené autofs. Uživatel se pak přihlásí. Proti LDAPu se ověří jeho heslo, získaká se informace o tomkde má domácí adresář (/home/username
). Autofs automaticky podle konfigrace vytvoří adresář /home/username
a namountuje do něj server:/export/home/username
. Po odhlášení uživatele ze stanice se přestane adresář /home/username
používat a autofs ho odmountuje a vymaže.
Pokud máte na nějakém adresáři nastavené autofs (/net
, /home
), tak vám systém ani jako uživateli root neumožní změny tohoto adresáře. Je to standardní chování třeba na Solarisu a spousta nováčků je z toho lehce zmatených...
Pro podporu LDAPu v autofs je třeba doinstalovat balíček autofs-ldap. V adresáři /usr/share/doc/autofs-ldap/
najdete příklady konfigurace.
Pro to abyste mohli začít používat ldap a autofs dohromady potřebujete upravit soubor /etc/ldap/slapd.conf
, konkrétně musíte přidat
include /etc/ldap/schema/autofs.schema
Ukážeme si jak by vypadala konfigurace nastíněná v předchozím odstavci do LDAPu.
Do souboru /etc/auto.master
je třeba zapsat odkaz do LDAPu. Použití LDAPu se může zdát jako zbytečné, ale je třeba si uvědomit, že použitím LDAPu centralizujeme konfiguraci autofs do jednoho jediného místa a všechny změny pak budou snadné.
/home ldap://ldap.example.com/ou=auto.indirect,dc=example,dc=net
Ještě je třeba udělat vhodný záznam do LDAPu a máme hotovo.
dn: ou=auto.indirect,dc=example,dc=net
objectClass: top
objectClass: automountMap
ou: auto.indirect
dn: cn=/,ou=auto.indirect,dc=example,dc=net
objectClass: automount
cn: /
automountInformation: file.example.com:/export/home/&
Jistě jste si všimli, že cn=/. Lomítko v tomto případě funguje jako zástupný znak hvězdička.
Nyní stačí restartovat autofs a případně sledovat /var/log/syslog
, kdyby se náhodou objěvily nějaké chyby. Pokud chcete vidět na co se autofs ptá LDAP serveru, spusťte slapd s parametrem -d 256.
Automounter umožňuje držet kompletní konfiguraci v LDAPu. Pro aktivaci této fukce je třeba zapsat do /etc/nsswitch.conf
automounter: ldap
Samozřejmě je možné kombinovat ldap i soubory, ale musíte to do /etc/nsswitch.conf
zapsat:
automounter: ldap files
Pokud řádek pro automounter neexistuje, vytvořte ho.
Obsah nahrazující původní /etc/auto.master
v LDAPu vypadá následovně:
dn: ou=auto.master,dc=example,dc=net
ou: auto.master
objectClass: top
objectClass: automountMap
dn: cn=/home,ou=auto.master,dc=example,dc=net
objectClass: automount
cn: /home
automountInformation: ldap://ldap.example.net/ou=auto.indirect,dc=example,dc=net
dn: cn=/-,ou=auto.master,dc=example,dc=net
objectClass: automount
cn: /-
automountInformation: ldap://ldap.example.net/ou=auto.direct,dc=example,dc=net
V naší konfiguraci direct mapy nepoužíváme, ale přesto zde uvedu příklad.
dn: ou=auto.direct,dc=example,dc=net
objectClass: top
objectClass: automountMap
ou: auto.direct
dn: cn=/usr/local,ou=auto.direct,dc=example,dc=net
objectClass: automount
cn: /usr/local
automountInformation: file.example.net:/usr/local/
Když už máme všechny uživatele v LDAPu, tak by to chtělo nakonfigurovat i SMTP server aby pro ně přijímal poštu případně aby jim dovolil poštu odeslat.
Příklad nastavení IMAP a POP3 serveru pro spolupráci s LDAPem předvedu na programu dovecot, který je dostupný ve většině moderních distribucí.
Pokud máte uživatelská konta v LDAPu a operační systém je nakonfigurován tak aby byli vidět jako uživatelské účty v systému, nemusíte dovecot nijak složitě řešit. Mainstalujte ho, předhoďte mu SSL certifikáty, nastavte jaké protokoly budete používat a spusťte ho. V dovecot.conf nechte standardně zvolený passdb pam a userdb passwd.
Dovecot umožňuje použít různé backendy pro ukládání informacé o uživatelských kontech, jedním z nich je i LDAP. Pokud vyhradíme samostatný stroj pro IMAP/POP3 server, nemusíme ho nastavovat tak aby byli uživatelé dostupní v systému, je to tak bezpečnější. Nastavíme dovecot tak aby si šahal pro informaci o uživateli do LDAPu.
Většina poštovních klientů umí použít adresářový server jako zdroj pro získávání kontaktů.
Jako zdroj pro kontakty si přídáme LDAP následujícím postupem.
· Pustíme Thunderbird a otevřeme adresář (Ctrl+2)
· V adresáři zvolíme -> -> (Obrázek 8.1 – „Thunderbird - Address Book“)
· Vyplníme údaje potřebné pro připojení k LDAP serveru (Obrázek 8.2 – „Thunderbird - Address Book - Directory Server Properties“)
o Name: ldap.example.net
o Hostname: ldap.example.net
o Base DN: ou=people,dc=example,dc=net
Na screenshotu je vyplněná ještě položka Bind DN. Tato položka umožní přihlášení k LDAPu pod konkrétním uživatelem. Využijete jí, pokud máte v LDAPu zakázán anonymní přístup. O heslo budete požádání při prvním přístupu do LDAPu.
· Dále si zapneme automatické doplňování adres i pro LDAP
o V Thunderbirdu zvolíme v menu Edit->Preferences
o Na záložce si zaškrtněte v sekci Address Autocompletion i položku Directory Server. (Obrázek 8.3 – „Thunderbird - Options - Composition“)
Obrázek 8.1. Thunderbird - Address Book
Obrázek 8.2. Thunderbird - Address Book - Directory Server Properties
Obrázek 8.3. Thunderbird - Options - Composition
Mutt (spolu s PINE) je jeden z nejpoužívanějších textových MUA v UNIXovém světě. I mutt umí spolupracovat s LDAPem při výběru adres během psaní nového emailu. Sice neumí s LDAPem spolupracovat nativně, ale přes pomocný skript, ale to nám přece nevadí :-). Na Internetu nalezenete různé skripty, jeden z nich sem dám jako příklad. Návod na rozchození je na začátku skriptu. Pokud se nemusíte k LDAPu přihlašovat jménem a heslem, nechte nastavení prázdné ($username = "";, $password = "";).
#! /usr/bin/perl -Tw
# 2005-02-24: Fixed for AD/Exchange 2003 & Unicode characters,
# anders@bsdconsulting.no If you find this script useful, let me know. :-)
#
# 2000/2001: Original version obtained from Andreas Plesner Jacobsen at
# World Online Denmark. Worked for me with Exchange versions prior to Exchange
# 2000.
#
# Use it with mutt by putting in your .muttrc:
# set query_command = "/home/user/bin/mutt-ldap.pl '%s'"
#
# Then you can search for your users by name directly from mutt. Press ^t
# after having typed parts of the name. Remember to edit configuration
# variables below.
use strict;
use Encode qw/encode decode/;
use vars qw { $ldapserver $domain $username $password $basedn };
# --- configuration ---
$ldapserver = "domaincontroller.yourdomain.com";
$domain = "YOURDOMAIN";
$username = "myuser";
$password = "mypassword";
$basedn = "ou=companyxy,dc=companyxy,dc=tld";
# --- end configuration ---
#my $search=shift;
my $search=encode("UTF-8", join(" ", @ARGV));
if (!$search=~/[\.\*\w\s]+/) {
print("Invalid search parameters\n");
exit 1;
}
use Net::LDAP;
my $ldap = Net::LDAP->new($ldapserver) or die "$@";
$ldap->bind("$domain\\$username", password=>$password);
my $mesg = $ldap->search (
base => $basedn,
filter => "(|(cn=*$search*) (rdn=*$search*) (uid=*$search*) (mail=*$search*))",
attrs => ['mail','cn']
);
$mesg->code && die $mesg->error;
print(scalar($mesg->all_entries), " entries found\n");
foreach my $entry ($mesg->all_entries) {
if ($entry->get_value('mail')) {
print($entry->get_value('mail'),"\t",
decode("UTF-8", $entry->get_value('cn')),"\tFrom Exchange LDAP database\n");
}
}
$ldap->unbind;
FTP je docela nebezpečný protokol, standardně přenáší vše včetně loginu a hesla nezašifrované. Pokud se pro něj rohodnete můžete rovnou na serveru vypnout SSH a používat místo něj třeba telnet.
Místo FTP používám raději SCP nebo SFTP, konkrétně scponly shell s uživateli v chrootu. Výhoda tohoto řešení je, že je bezpečné, relativně snadno nastavitelné (nastavíte scponly jako uživatelův shell a on se pak připojuje přes ssh protokol) a hlavně pro většinu operačních systémů máme použitelné klientské programy. Ve Windows je dostupný program WinSCP, v UNIXových operačních systémech zase klasický scp z příkazového řádku nebo třeba gFTP v grafice.
Jasně, někdo může namítnout, že lze použít FTP over SSL. FTP přes SSL je problém, neexistuje moc kvalitních grafických klientů a když už, tak jsou v javě (nenažrané) nebo komerční. Taky je složitější nastavení. Pokud se někdo spokojí s textovým klientem pro ftp, tak doporučuji lftp, umí snad všchno na co si vzpomenete.
Když už se někdo rozhodne pro provoz FTP serveru, tak většinou doporučuju program vsftpd. Vsftpd podporuje PAM. V Debianu je konfigurační souboru PAMu pro vsftpd /etc/pam.d/vsftpd
. Pokud vám funguje přihlášení uživatele do systému s ověřením proti LDAPu, tak ten samý uživatel se může přihlásit i na FTP.
Teda až když to povolíte v /etc/vsftpd.conf
. Povolte si local_enable=YES, write_enable=YES, anonymous_enable=NO a chroot_local_user=YES. Tohle je samozřejmě pouze základní nastavení jen pro demonstraci "že to funguje".
Pokud požíváte automounter pro uživatelské domácí adresáře, tak se nemusíte ničeho bát, normálně se vše přimountuje a uživatel se i přes ftp dostane ke svým datům.
Když už nám funguje LDAP, tak proč se třeba nepřihlašovat do nějaké firemní webové aplikace a ověřovat to proti němu?
Pro ověřování proti LDAPu použíjeme mod_auth_ldap. Předpokládám, že umíte nastavit ověřování třeba proti souboru s hesly, takže vynechám všechnu teorii a dám se pouze ukázku konfiguračního soubrou. Stejně máte vše v manuálu k apache web serveru.
Doporučuji překlopit apache na HTTPS, jinak vám budou lítat systémová hesla v plaintextu po síti. Následující ukázka umožní přihlášení uživatele jeho běžným loginem (položka uid v ldifu) a jeho standardním heslem.
AuthType Basic
AuthName "Restricted area"
AuthLDAPURL ldap://ldap.example/net:389/ou=people,dc=example,dc=net?uid?sub?(objectClass=*)
require valid-user
V LDAPu je možné uchovávat i záznamy o IP aresách a názvech strojů.
První možnost, často i dostačující, je použít záznamy o počítačích a jejich IP adresách pro překlad pomocí NSS. Vlastně tím postavíme LDAP někam na úrověň souboru /etc/hosts
.
Pro spuštění překladu jmen na IP pomocí záznamů v LDAPu zapište (upravte) do souboru /etc/nsswitch.conf
řádek
hosts: files ldap dns mdns
Do LDAPu pak vkládáme jednotlivé záznamy o počítačích pomocí následujícího LDIFu.
dn: cn=hostname,ou=hosts,dc=example,dc=net
cn: hostname
objectclass: device
objectclass: ipHost
ipHostNumber: 192.168.0.10
Pro DNS server Bind9 existuje patch, který přidává podporu pro LDAP jako backend. Patch se jmenuje bind9-sdb-ldap
Z webu http://directory.fedora.redhat.com/wiki/Download stáhněte instalační balíček pro vaší distribuci (pro mojí Fedoru 5 je to fedora-ds-1.0.2-1.FC5.i386.opt.rpm". Pokud nepoužíváte Fedoru, je možné si FDS přeložit ze zdrojových souborů - dělal jsem to pro FC5, když ještě oficiální balíček neexistoval a šlo to celkem bez problémů.
Balíček nainstalujte a jako uživatel root spusťte konfigurační skript /opt/fedora-ds/setup/setup. Nejprve vás vyzve k odsouhlasení licenčního ujednání a zkontroluje systém (provede kontrolu dostupné paměti a podobně). V dalším kroku vás vyzve k volbě způsobu konfigurace, používám výchozí možnost 2 - Typical - some customization (default), pokud v dalším kroku zadáte jako hostname serveru jeho fqdn, tak na všechny další požadavky akorát můžete bouchnout do enteru případně zadat nové heslo.
· RFC 1558: A String Representation of LDAP Search Filters
· RFC 1777: Lightweight Directory Access Protocol
· RFC 1778: The String Representation of Standard Attribute Syntaxes
· RFC 1779: A String Representation of Distinguished Names
· RFC 1781: Using the OSI Directory to Achieve User Friendly Naming
· RFC 1798: Connectionless LDAP
· RFC 1823: The LDAP Application Programming Interface
· RFC 1959: An LDAP URL Format
· RFC 1960: A String Representation of LDAP Search Filters
· RFC 2251: Lightweight Directory Access Protocol (v3)
· RFC 2307: LDAP as a Network Information Service
· DCE/OS-RFC 86.0: Unified Login with Pluggable Authentication Modules
Definice základních struktur adresáře
dn: ou=Hosts,dc=example,dc=net
ou: Hosts
objectClass: top
objectClass: organizationalUnit
dn: ou=Rpc,dc=example,dc=net
ou: Rpc
objectClass: top
objectClass: organizationalUnit
dn: ou=Services,dc=example,dc=net
ou: Services
objectClass: top
objectClass: organizationalUnit
dn: nisMapName=netgroup.byuser,dc=example,dc=net
nismapname: netgroup.byuser
objectClass: top
objectClass: nisMap
dn: ou=Mounts,dc=example,dc=net
ou: Mounts
objectClass: top
objectClass: organizationalUnit
dn: ou=Networks,dc=example,dc=net
ou: Networks
objectClass: top
objectClass: organizationalUnit
dn: ou=People,dc=example,dc=net
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=example,dc=net
ou: Group
objectClass: top
objectClass: organizationalUnit
dn: ou=Netgroup,dc=example,dc=net
ou: Netgroup
objectClass: top
objectClass: organizationalUnit
dn: ou=Protocols,dc=example,dc=net
ou: Protocols
objectClass: top
objectClass: organizationalUnit
dn: ou=Aliases,dc=example,dc=net
ou: Aliases
objectClass: top
objectClass: organizationalUnit
dn: nisMapName=netgroup.byhost,dc=example,dc=net
nismapname: netgroup.byhost
objectClass: top
objectClass: nisMap
UNIXové skupiny (/etc/group
), které používám na všech serverech. Migrovat do LDAPu úplně všechny skupiny systému je možné pouze v případě, že používáte jeden operční systém a pokud je to Linux, tak i pouze jednu distribuci. Mezi jednotlivými OS jsou totiž trochu jinak přiřazeny čísla skupin k názvům. Jediné co snad souhlasí vždy je, že skupina root ma GID 0 :-).
dn: cn=users,ou=Group,dc=example,dc=net
objectClass: posixGroup
objectClass: top
cn: users
userPassword: {crypt}x
gidNumber: 100
LDIF použitý pro založení uživatele
dn: cn=Zdenek Burda,ou=People,dc=example,dc=net
objectclass: top
objectclass: posixAccount
objectclass: inetorgperson
objectclass: shadowAccount
objectclass: organizationalPerson
uid: tsunami
cn: Zdenek Burda
sn: Burda
userPassword: {MD5}bpvs4ZFICfuEkxRkF+ci9g==
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 100
homeDirectory: /home/tsunami
gecos: Zdenek Burda, iForce, 391
shadowLastChange:10877
shadowMin: 0
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0
· OpenLDAP Software je opensource implementací ???.
· Red Hat Enterprise Linux Documentation - oficiální dokumentace k RHEL, zajímavá je Reference Guide, konkrétně kapitola 13 - LDAP.
· Diplomová práce Karla Benáka o LDAPu.
· LDAP Browser/Editor, kvalitní program pro "průzkum" LDAPu napsaný v javě.
· LUMA, grafický program pro práci s LDAPem, má docela malé systémové nároky a českou lokalizaci.
· pam_ccreds - domácí stránka tohoto užitečného PAM modulu.
· phpLDAPadmin, LDAP obdoba phpMyAdmin pro MySQL, je to podobné webové klikátko pro LDAP.
Intalace skriptů je docela jednoduchá, vytvořte si podadresář někde v domácím adresáři uživatele root a do něj skripty nakopírujte. V souboru ldap-scripts.conf správně nastavte přístupové údaje do LDAPu. Skripty jsem psal relativně na rychlo jen na zkoušku, jestli to bude fungovat, takže všchny chyby hlaste.
adresář
Adresář je specializovaná databáze navržená pro časté čtení a občasné aktualizace. Adresář lze snadno replikovat pro zvýšení dostupnosti.
DAP
Directory Access Protocol, ???
Distinguished Name
Název záznamu v LDAP databázi.
GSSAPI
GSSAPI (Generic Security Services Application Programming Interface) je účelově podobný protokol jako SASL, ale SASL definuje síťový protokol, kdežto GSSAPI definuje programovací rozhraní. GSSAPI je jednou z metod podporovaných v SASL. GSSAPI využívá například Kerberos.
NSS
Name Service Switch je systém pro konfiguraci zdrojů pro získávání různých systémových údajů (uživatelé, skupiny, resolver). Hlavní konfigurační soubor této služby je /etc/nsswitch.conf
. Typické zdroje jsou soubory, DNS, NIS a LDAP.
PAM
Pluggable Authentication Module zajišťuje nezávislost programů na konkrétních autentizačních postupech. Systém PAM se skládá z autentizačních modulů, jejichš konfigurací může administrátor nastavit potřebné parametry ověřování.
SASL
Simple Authentiction and Security Layer je protokol pro klient-server autentizaci přes síť. Poskytuje několik možností pro klienta a server k domluvení metody autentizace. Možné je například ověření pomocí plain-text hesla, databáze hesel umožňující přenos ve formátu hashe nebo GSSAPI.
slapd
LDAP server.
slurpd
Aplikace zajišťující replikaci LDAP serveru.