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_name 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_name. 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.
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
.