Nastavení LDAP serveru

13. 9. 2006
Doba čtení: 7 minut

Sdílet

Dnes navážeme na článek o konfiguraci OpenLDAP a budeme dále konfigurovat náš LDAP server. V první části dnešního článku si popíšeme řízení přístupu k záznamům a ve druhé pak probereme Sambu. Dozvíte se, jak ji přimět, aby se uživatelé primárně autentizovali proti LDAPu a jak do adresáře importovat stávající uživatele Samby.

6. Nastavení práv uživatelů

Pokud jste postupovali podle kroků uvedených v předchozím díle, máte připravený adresář se všemi stávajícími uživateli serveru. Příkazy shellu useradd a passwd díky vazbě na PAM upravují i záznamy v adresáři. Prozatím ovšem je vstup do adresáře povolen komukoli, i anonymnímu uživateli. Proto musíme nastavit oprávnění ke změnám pro privilegované uživatele a naopak ostatním uživatelům zabránit v nežádoucích aktivitách. K tomu slouží direktiva access v souboru slapd.conf. Má následující podobu:

access to kam by pro_koho druh_oprávnění

přičemž jednotlivá oprávnění lze řetězit. Ukážeme si to na příkladu.

access to attrs="userPassword"
  by dn="uid=root,ou=people,dc=kin.vslib,dc=cz" write
  by anonymous auth
  by self write
  by * none

access to *
  by dn="uid=root,ou=People,dc=kin.vslib,dc=cz" write
  by anonymous read
  by users read
  by self write

Zde je nastaveno následující: k atributu userPassword nemá přístup k zápisu a čtení nikdo kromě uživatele root, který je uveden plným distinguished_na­me a samotného vlastníka záznamu ( by self write). Anonymní uživatel může atributu využít k autentizaci, ostatní uživatelé nemají přístup vůbec. V druhém pravidle je uvedeno, že ostatní atributy všech záznamů smí modifikovat jen root, ostatní uživatelé je mohou pouze číst. Takto sestavené omezení přístupu lze považovat za základ pro podrobnější dělbu oprávnění. Jak je patrné, oprávnění se zpracovávají od konce, tj. naposledy vložená definice přístupu bude postupně překrývána definicemi uloženými dříve.

Nastavit přístup nemusíte jen jedinému atributu, ale v podstatě jakémukoli elementu adresáře. Může to být filtr, seznam atributů nebo část stromu uvedená svým distinguished_na­me. Stejně tak specifikace, pro koho je omezení určeno, může nabývat různých hodnot. Nejčastěji se kromě jedinečného jména používají hodnoty anonymous, odpovídající nepřihlášenému uživateli, users odpovídající libovolnému uživateli z adresáře a self, odpovídající vlastníku dotazovaného záznamu. Definovaná oprávnění se obvykle používají čtyři: auth pro pouhou autentizaci (budou pracovat jen dotazy, které předávají přihlašovací informace a vrací pravdu/nepravdu podle toho, zda se autentizace zdařila), search, které stačí vyhledávacím funkcím, aby zjistili, zda hledaný záznam v adresáři je či není, read, které např. při vyhledávání dovolí vrátit při vyhledávání obsah záznamu a write, které povolí libovolný přístup k datům v adresáři (nebo jeho definované části). Podrobný popis naleznete v manuálové stránce  slapd.access(5).

7. Samba

Sdílení datového prostoru lze realizovat několika způsoby, nejčastější variantou je NFS nebo Samba. Protože drtivá většina klientských počítačů používá některý z OS Windows, je pro uživatele výhodnější a jednodušší druhá možnost. Pro NFS je nutné instalovat speciálního klienta, problematické je i šifrování provozu. Samba je flexibilnější, má vcelku zdařilý systém autentizace a navíc vytváří prostředí vhodné pro čtení, zápis i spouštění Windows aplikací. V této části se dozvíte, jak přimět Sambu, aby se uživatelé primárně autentizovali proti LDAPu a jak do adresáře importovat stávající uživatele Samby.

Co budete potřebovat: balík smb_ldap. Binární distribuce obvykle mají již podporu LDAPu v Sambě zakompilovanou, Gentoo vyžaduje doinstalování zmíněného balíku. Dále je vhodné instalovat smbldap_tools, sadu Perlových skriptů usnadňujících práci s uživateli. Bez nich by import byl velmi obtížný. V článku [2] se doporučuje instalace CLAM-AV, což jsou open-source antivirové programy. Není to sice nutné k provozování LDAPu, ale pokud předpokládáte, že vaši uživatelé budou moci spouštět na sdílených svazcích aplikace, je vhodné mít alespoň nějakou ochranu proti virům. Podpora PAM v Sambě se předpokládá.

První úpravy se týkají souboru slapd.conf. K již deklarovaným schématům přidejte ještě schéma pro záznamy generované Sambou:

include         /etc/openldap/schema/samba.schema

A na konec souboru připojte sekvenci

index    sambaSID   eq
index    sambaPrimaryGroupSID    eq
index    sambaDomainName    eq
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname   eq,subinitial

Pamatujte, že žádný atribut nesmí být definován dvakrát! Takže ještě zakomentovat řádku

index           objectClass     eq

Další úpravy proveďte v sekci [global] souboru  smb.conf:

passdb backend = ldapsam:ldap://ldap.kin.vslib.cz/  # LDAP server s autentizačními informacemi
ldap passwd sync = yes # synchronizovat hesla zadaná příkazem smbpasswd?
ldap suffix = dc=kin.vslib,dc=cz
ldap admin dn = cn=root,dc=kin.vslib,dc=cz
ldap ssl = start tls
ldap group suffix = ou=Group
ldap user suffix = ou=People
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=
## předcházející čtyři položky upravte podle ou, ve kterých jsou uživatelé a skupiny
add user script = /usr/sbin/smbldap-useradd -m "%u"
ldap delete dn = no # chcete-li mazat dn uživatelů ze Samby, upravte na yes
## následují odkazy na skripty, mají význam jen při nainstalovaném smbldap-tools
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

V prvním řádku si všimněte URI, které je uvozeno ldap:// a nikoli ldaps://. Zabezpečení je totiž zapnuto direktivou start tls, komunikace se serverem bude šifrována, i když poběží po portu 389. Pokud máte povolený pouze port 636, řádek ldap ssl = start tls vypusťte a uveďte url sekvencí ldaps://. Suffixy upravte podle svého nastavení. Pokud si nejste jisti, spusťte

# ldapsearch dn -LLL

a zjistíte, do jaké organizační jednotky ( ou) byly zařazeny skupiny uživatelů a v jaké jsou uživatelé. Pokud jste je importovali s pomocí migrationtools, mají skupiny atribut ou=Group a uživatelé ou=People. Import uživatelů ze Samby by totiž v zásadě neměl měnit jejich počet, jen by měl doplnit dodatečné informace ke stávajícím.

Teď restartujte Sambu a propojte smbpasswd s LDAPem:

# smbpasswd -w rootovské_heslo_do_LDAPu

A můžeme přistoupit k samotnému importu. Vlastně ještě ne — teď je potřeba nastavit kofigurační soubory smbldap-tools. Prvním je smbldap.conf a jsou v něm informace týkající se obecného nastavení importu a práce s uživateli Samby.

# identifikátor domény; získáte jej příkazem "net getlocalsid"
SID="S-1-5-21-394859400-385291240-3741148699"
# doména; musí korespondovat s pracovní skupinou, jak je uvedena v souboru smb.conf
sambaDomain="DOMAIN"
# LDAP server (master i slave uveďte totéž)
slaveLDAP="ldap.kin.vslib.cz"
masterLDAP="ldap.kin.vslib.cz"
# použít TLS/SSL?
ldapTLS="1"
verify="require"
# ssl certifikáty a klíče
cafile="/etc/openldap/cacert.pem"
clientcert="/etc/openldap/servercrt.pem"
clientkey="/etc/openldap/serverkey.pem"
# následující upravte podle vašeho nastavení
suffix="dc=kin.vslib,dc=cz"
usersdn="ou=People,${suffix}"
groupsdn="ou=Group,${suffix}"
idmapdn="ou=Idmap,${suffix}"
# opět místo DOMAIN název pracovní skupiny
sambaUnixIdPooldn="sambaDomainName=DOMAIN,${suffix}"
scope="sub"
hash_encrypt="MD5"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="999"
userSmbHome="\\PDC-SRV\%U"
userProfile="\\PDC-SRV\profiles\%U"
with_smbpasswd="1"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"

Příkaz net getlocalsid by měl vypsat jediný řádek. Poslední tři řádky konfiguračního souboru říkají smbldap-tools, jak mají kódovat hesla. hash_encrypt je závislá na tom, jakým způsobem váš systém generuje otisky hesel do shellu. Dejte si pozor hlavně na správně nastavené dn, abyste nevyrobili nový, nicméně zcela nepoužitelný strom.

Druhým konfiguračním souborem je smbldap_bind.conf, kde je uvedeno, jak se Samba spojí s LDAP serverem.

slaveDN="cn=root,dc=kin.vslib,dc=cz"
slavePw="heslo"
masterDN="cn=root,dc=kin.vslib,dc=cz"
masterPw="heslo"

Heslo musí být uvedeno ve své skutečné podobě. To je dost velká díra do bezpečnosti a proto by tento soubor měl být čitelný pouze pro roota a pokud možno smazán po použití. Do značné míry se lze bez smbldap-tools po hromadném importu obejít a nové uživatele zakládat pomocí smbpasswd. Úpravy záznamů v adresáři raději přenechte přímo nástrojům LDAPu, ev. jejich frontendům.

Vlastní import nastartujete příkazem

# smbldap-populate

který se o vše potřebné postará. Budete dotázáni na heslo a pravděpodobně vyzváni ke změně, načež budou data ze souboru smbpasswd exportována a přiřazena záznamům v adresáři. Tím je import dokončen a pro přihlašování k Sambě je od této chvíle rozhodující záznam v LDAPu.

bitcoin_skoleni

Závěrem tohoto dílu několik slov k smbldap-tools: tuto sadu nástrojů využijete, nechcete-li mít autentizační data jinde než v adresáři. Což lze samozřejmě realizovat i jinak — existují knihovny pro Perl nebo PHP, které generují tytéž informace a není problém je v náležité struktuře do adresáře vložit.

Literatura:

[1] ECKSTEIN, R. a kol.Samba — Linux jako server v sítích s Windows. 2. vydání. Computer Press, Brno 2005. ISBN: 80–251–0649–7.
[2] HOWTO SAMBA-LDAP Domain Controller [online] http://gentoo-wiki.com/HOWTO_SAMBA-LDAP_Domain_Controller_(with_Real_Time_antivirus) .
[3] Samba3-HOWTO. [online] http://samba.org/~samba-bugs/docs/samba-docs-latest.tar.bz2 .