Jihočeská univerzita v Českých Budějovicích Pedagogická fakulta Katedra informatiky
Jednotný systém autentizace a autorizace uživatelů v heterogenním prostředí diplomová práce
Autor: David Hartman Vedoucí diplomové práce: Ing. Ladislav Lhotka, CSc.
České Budějovice 2004
PROHLÁŠENÍ: Prohlašuji, že diplomovou práci na téma Jednotný systém autentizace a autorizace uživatelů v heterogenním prostředí jsem vypracoval samostatně s použitím odborné literatury, která je citována v seznamu literatury na konci diplomové práce. V Příbrami dne 5.4.2004 ………………………………..…
David Hartman
2
PODĚKOVÁNÍ: Děkuji vedoucímu diplomové práce Ing. Ladislavu Lhotkovi, CSc. za pomoc při realizaci praktické části a velmi cenné rady při jejím zpracování. Dále bych chtěl poděkovat vedení Česko-anglického gymnasia, zejména RNDr. Danuši Lhotkové, za možnost vyzkoušet si vše v reálném provozu.
3
Obsah OBSAH ............................................................................... 4 ÚVOD................................................................................. 6 1. ZÁKLADNÍ 1.1. 1.2. 1.3. 1.4. 1.5.
INFORMACE
..................................................... 7
Server Samba ...................................................................... 7 Adresářové služby a LDAP ................................................... 8 Informace o účtech a hesla uživatelů ................................... 12 Domény Windows, řídící počítač domény ............................. 13 Konfigurace sítě LAN a serveru .......................................... 14
2. INSTALACE
POTŘEBNÉHO SOFTWARU.................................
15
2.1. Stažení, kompilace a instalace Samby .................................. 15 2.2. Stažení a instalace OpenLDAP ............................................ 16 2.3. Stažení a instalace balíku smbldap-tools .............................. 16 4. KONFIGURACE
SERVERU
OPENLDAP ................................ 17
4.1. Schéma a úprava konfigurace .............................................. 17 4.2. Konfigurace smbldap-tools ................................................. 21 5. KONFIGURACE LINUXU (MODULY PAM) ............................ 25 5.1. 5.1. 5.2. 5.3.
Linux-PAM ....................................................................... 25 Konfigurační soubory modulů PAM ..................................... 26 Konfigurace modulů PAM .................................................. 28 Testování nastavení ........................................................... 30
6. SOUBOROVÉ 6.1. 6.2. 6.3. 6.4.
SYSTÉMY .....................................................
32
Síťové souborové systémy .................................................. 33 Konfigurace serveru NFS ................................................... 34 Konfigurace klientů systému NFS ....................................... 36 Správa diskových kvót ....................................................... 38
7. KONFIGURACE SAMBY .................................................... 40 7.1. Použití nástroje SWAT ....................................................... 40 7.2. Konfigurace Samby jako PDC ............................................. 42 7.3. Přihlášení Windows do domény ........................................... 46 8. SPRÁVA
UŽIVATELŮ A JEJICH NASTAVENÍ
.......................... 48
8.1. Správa uživatelů pomocí smbldap-tools ............................... 48 8.2. Uživatelské profily a jejich nastavení .................................. 54 9. WWW
ROZHRANÍ PRO SPRÁVU UŽIVATELŮ .........................
57
9.1. SUDO (propůjčování identifikace) ...................................... 57 9.2. Konfigurace webového serveru Apache ................................ 58
4
9.3. 9.4. 9.5. 9.6.
Práva k záznamům LDAP ................................................... 59 API rozhraní jazyka PHP pro práci s LDAP .......................... 60 Změna hesla přes webové rozhraní ...................................... 60 Správa uživatelů přes webové rozhraní ................................ 62
10. DALŠÍ
VYUŽITÍ ADRESÁŘE
LDAP .................................... 70
11. ZÁVĚR ........................................................................ 71 SEZNAM
POUŽITÉ LITERATURY
ZDROJE
DOSTUPNÉ ON-LINE
............................................ 72
................................................ 73
PŘÍLOHY .......................................................................... 74 A. Konfigurační a zdrojové soubory ........................................... 74 A.1. /etc/openldap/slapd.conf .......................................................................... 74 A.2. /etc/openldap/ldap.conf............................................................................ 75 A.3. base.ldif.................................................................................................... 75 A.4. /usr/local/sbin/smbldap_conf.pm ............................................................. 77 A.5. /etc/exports (othello.caglan.cz) ................................................................ 81 A.6. /etc/fstab (othello.caglan.cz) .................................................................... 81 A.7. /etc/fstab (public.caglan.cz) ..................................................................... 81 A.7. /etc/xinetd.d/swat ..................................................................................... 81 A.8. /etc/samba/smb.conf................................................................................. 82 A.9. /etc/sudoers .............................................................................................. 88 A.10. Skript pro změnu hesla uživatele ............................................................. 88 A.11. Formulář pro změnu hesla ....................................................................... 90 B. Obsah CD............................................................................ 91
5
Úvod Pro každého správce počítačové sítě by byla určitě krásná představa, kdyby měl v síti pouze identické počítače se stejným operačním systémem. Skutečnost je ovšem jiná. Správce dnes a denně stojí před problémy, jak propojit počítače s různými operačními systémy a jak co nejvíce zpříjemnit život uživateli tak, aby tyto problémy vůbec nepocítil. Z hlediska uživatele by bylo jistě příjemné, aby měl jen jedno uživatelské jméno a heslo pro přihlášení ke stanicím s operačním systémem Microsoft Windows, ke stanicím s operačním systémem Linux i pro čtení pošty. Tato diplomovaná práce si klade za cíl vytvořit centrální server pro autentizaci a autorizaci uživatelů pro heterogenní síť, který by byl použitelný pro nasazení v malé či středně velké počítačové síti LAN. V síti budou zapojeny stanice s operačními systémy Microsoft Windows a Linux. Je zde podrobně rozebrána jedna z možností, jak takový server vytvořit. Konkrétně tento server běží na volně šiřitelném operačním systému Linux. Pro sdílení síťových zdrojů, jako jsou tiskárny a soubory, se bude starat server Samba, který používá databázi uživatelů uloženou v adresáři LDAP. Všechny stanice v síti, s operačními systémy Windows nebo Linux, se ověřují proti tomuto serveru. Ukládání informací o jednotlivých uživatelích do adresáře LDAP má hned několik výhod. Nejvýznamnější je velice dobrá podpora pro práci s LDAP záznamy v jednotlivých programovacích jazycích nebo třeba to, že v adresáři se mohou uchovávat i jiné informace než jen ty, které jsou potřebné pro přihlášení ke stanici, tedy například fotografie jednotlivých uživatelů, adresy, telefony apod. . Na konci diplomové práce je na konkrétních příkladech v programovacím jazyce PHP popsána práce s LDAP záznamy. Součástí práce je i webové rozhraní pro centrální správu uživatelů, které naleznete na přiloženém CD.
6
1. Základní informace 1.1. Server Samba Samba je sada nástrojů, které umožňují unixovým systémům využívat protokol SMB (Server Message Block). Tento protokol využívá pro přenos dat v sítích klient-server mnoho operačních systémů včetně Windows nebo OS/2. Jeho podporou umožňuje Samba serverům se systémy Unix komunikovat stejným síťovým protokolem, jaký používají i produkty Microsoft Windows. Díky tomu mohou počítače se systémem Unix a nainstalovanou Sambou vystupovat jako servery v síti, složené z počítačů se systémy Windows a navíc nabízet následující služby: •
sdílení souborových systémů
•
sdílení tiskáren instalovaných na serveru nebo jeho klientech
•
podpora klientů při prohlížení síťového okolí
•
autentizace klientů, kteří se přihlašují do domény Windows
V současné době se Samba skládá z několika programů (démonů), které poskytují sdílení síťových zdrojů klientům SMB v síti. Jednotlivé části jsou: smbd - démon smbd je zodpovědný za správu sdílených síťových zdrojů mezi počítačem se serverem Samba a jeho klienty. Poskytuje souborové a tiskové služby a služby prohlížení klientům SMB v jedné nebo více sítích. Smbd obsluhuje veškerou komunikaci mezi serverem Samba a síťovými klienty. Kromě toho je zodpovědný za autentizaci uživatelů, zamykání prostředků a sdílení dat s využitím protokolu SMB. nmbd - démon nmbd je jednoduchý jmenný server, který sdružuje funkce jmenného serveru NetBIOS a serveru WINS (Windows Internet Naming Service), podobně jako je tomu v případě LAN Manageru. Tento démon přijímá požadavky na jmenný server a poskytuje odpovídající data. Poskytuje také prohlížecí seznamy a účastní se volby prohlížeče.
7
Distribuce Samby také obsahuje několik nástrojů, spouštěných z příkazového řádku: smbclient - unixový klient, podobný FTP, který je možné použít pro připojení ke sdíleným prostředkům Samby smbtar - program pro zálohování sdílených dat, podobný nástroji tar, známému z prostředí systému Unix nmblookup - program, který provádí vyhledávání jmen pomocí protokolu NetBIOS nad TCP/IP smbpasswd - program, který umožní správci změnu zašifrovaných hesel, které Samba používá smbstatus - program, jehož výstupem je seznam aktivních síťových připojení ke zdrojům na serveru Samba testparm - jednoduchý program pro ověření platnosti konfiguračního souboru Samby testprns - program, který provádí testování různých tiskáren a zjišťuje, jestli jsou tyto tiskárny rozpoznatelné démonem smbd
1.2. Adresářové služby a LDAP LDAP (Lightweight Directory Access Protocol) je „odlehčená“ verze protokolu DAP (Directory Access Protocol), který je součástí sady protokolů X.500 [http://www.itu.int/]. Protokol X.500 byl poněkud těžkopádný, zejména kvůli různým dodatečným operacím při transakcích a skutečnosti, že pro běžný síťový provoz používal komplikovaný síťový protokol OSI, který byl na osobních počítačích obtížně implementovatelný. LDAP byl původně vyvinut jako brána k adresáři X.500, přičemž k síťové komunikaci používal rozšířenější a jednodušší protokol TCP/IP a umožňoval tak osobním počítačům s implementovaným protokolem TCP/IP přistupovat k adresářovým službám. LDAP poskytuje adresářové služby takovým způsobem, že správně navržený adresář dovoluje uživatelům přistupovat k datům jednoznačně identifikovaných
8
v globálním měřítku. Každá položka je jednoznačná v tom smyslu, že žádné dvě položky na světě nemají stejný přístupový identifikátor. Server LDAP byl vytvořen a optimalizován pro zpracování jednoduchých dat, která se po zapsání jen zřídka mění. Tradiční databáze byly vytvořeny pro transakce a optimalizovány pro operace čtení a zápisu dat, zatímco LDAP je adresářový systém optimalizovaný na zpracování dotazů (tedy čtení textových dat). Ve skutečnosti jsou aktualizace dat (zápis) na LDAP velmi pomalé. Servery LDAP obvykle používají jednoduché základní databáze, jako jsou databáze Berkeley DB nebo GDBM (GNU Database Manager). Ty poskytují potřebné funkce bez dalších zbytečností a nároků. Na následujícím obrázku je zobrazen organizační diagram uspořádaní dat v adresáři LDAP, který budeme používat v našem případě. Jednotliví uživatelé jsou jednoznačně určeni hierarchií tohoto stromu.
Obrázek 1.2.1. : Organizační diagram uspořádání dat
Strom je rozdělen do čtyř úrovní znázorněných na obrázku 1.2.1. . Každá úroveň je pojmenována a má přiřazenu konkrétní hodnotu (např. první úroveň má název
dc
hartman,
a hodnotu
CZ).
Chceme-li nalézt data uživatele s uživatelským jménem
postupujeme od kořene stromu směrem k listu a cestu zapíšeme
v obráceném pořadí: uid=hartman,
ou=Users, dc=CAG, dc=CZ.
9
Krátce se ještě zastavíme u obecné terminologie LDAP: Položka – položka je pro adresář zhruba totéž, co pro databázi záznam. Uzel obsahující uživatelské jméno
hartman
může (a musí, aby se uživatel mohl
přihlásit) obsahovat také další informace. Celý uzel jako takový se nazývá položka. Označuje se také jako DSE (Distinguished Service Entry = rozlišená položka služby). Atributy – atribut je pro adresář tím, čím je pro databázi pole záznamu. Pole v položce
hartman
hodnotu „David atribut
označující jeho jméno je označeno
Hartman“
obsahující
cn
a má přiřazenu
– to je příklad atributu. Dalším může být například
emailovou
adresu
s
názvem
mail
a
hodnotou
„
[email protected]“. Položka hartman je tedy tvořena několika atributy. Rozlišený název (DN) – název používaný k jednoznačné identifikaci uživatele David Hartman je
uid=hartman, ou=Users, dc=CAG, dc=CZ.
To je rozlišený
název neboli DN (Distinguished Name). Atribut, v našem případě
uid,
je zde
vybrán jako klíč, který bude položku představovat. Cesta vedoucí k položce a její hodnoty vytvářejí právě rozlišený název. Proto je tedy DN jednoznačným identifikátorem každé položky. Relativní rozlišený název (RDN) – jak již bylo řečeno, každý záznam je přístupný pomocí svého jedinečného jména DN, které je tvořeno ze jména samotného záznamu RDN (Relative Distinguished Name) a celé cesty vedoucí k položce od kořene stromu. V našem případě má záznam David Hartman RDN uid=hartman a DN uid=hartman,
ou=Users, dc=CAG, dc=CZ.
Schéma – schéma adresáře LDAP definuje rozvržení informací obsažených v adresáři a jejich uspořádání. Klienti nebo externí rozhraní tak mohou určit, jak jsou data v adresáři uložena a jak k nim lze přistupovat v případě hledání, přidávání, odstraňování, změn atd. Tyto základní termíny budeme v textu dále používat. Zbytek poměrně rozsáhlé terminologie LDAP není v našem případě potřeba.
10
Pro výměnu dat mezi klienty a serverem LDAP se nejčastěji používá formát LDIF (LDAP Data Interchange Format = formát výměny dat LDAP). Nejedná se ale o jediný způsob výměny dat. Data se mohou předávat prostřednictvím řetězců s položkami oddělenými čárkou nebo dokonce pomocí jazyka XML. Jazyk LDIF byl definován s ohledem na „lehkost“ LDAP. LDIF je textový formát, takže binární data (např. obrázky) je zapotřebí převést metodou base64 do textové podoby a pak je lze teprve uložit jako součást definice LDIF. Když si klienti vyměňují protokolem LDAP informace se serverem LDAP, odesílají a přijímají atributy a položky vyjádřené pomocí formátu LDIF. Kromě toho poskytuje formát LDIF čitelnou podobu dat uložených v adresáři. Vlastní uložení dat na serveru LDAP je ve formátu daném konkrétně využívanou základní databází, který nemá s LDIF nic společného! LDIF lze považovat za jakýsi „jazyk LDAP“ a má i svá úskalí, jako je například nutnost ukládat binární atributy v textovém vyjádření. S tímto problémem se setkáme při ukládání fotografií uživatelů do adresáře LDAP. Nyní si ukážeme, jak takové LDIF vyjádření uživatelských dat vypadá: dn: uid=hartman, ou=Users, dc=CAG,dc=CZ displayName: Hartman David lmPassword: 2F0421A3F32CFBT6VAD3B435B51404EE primaryGroupID: 1201 objectClass: inetOrgPerson objectClass: posixAccount objectClass: sambaAccount smbHome: \\OTHELLO\homes userPassword:: e1NTSEF9NjM5L2J4dXGhR2dJMmo5R0R2RUgvWUZQY3lRQnMwMDM= scriptPath: hartman.cmd ou: administrator mail:
[email protected] uid: hartman uidNumber: 1304 cn: Hartman David loginShell: /bin/bash homeDrive: H: gidNumber: 100 o: Anglo-Czech High School rid: 3608 gecos: Hartman David description: Hartman David homeDirectory: /home/Z/hartman ntPassword: 27B384FF53JCE2CDAF44734AF2BFBAB2
Výpis je zkrácen a nejsou zde uvedeny všechny atributy, včetně zakódovaných dat atributu
jpegPhoto,
který obsahuje fotografii uživatele. Jak je z výpisu patrné,
11
na každém řádku je uveden vždy jeden atribut a za oddělovačem „:“ (dvojtečka) následuje jeho hodnota. Na pořadí jednotlivých atributů nezáleží. Jak jsme si řekli v předchozím textu, atribut
dn
je jednoznačný identifikátor každé položky, který
sleduje cestu k položce od nejvyšší úrovně, takzvaného kořene. Když budeme postupovat k této položce od vrcholu stromu v diagramu našeho adresáře (viz obrázek 1.2.1.) uvidíme, že DN této položky je dc=CZ,
uid=hartman, ou=Users, dc=CAG,
což je shodné s hodnotou atributu dn ve vyjádření LDIF. Atribut dn se skládá
z názvů RDN oddělených čárkami, přičemž nejvíce vlevo je obvykle atribut samotné položky. Jako RDN této položky jsme stejně tak mohli použít například atribut mail. Její DN by pak bylo
[email protected], v případě atributu
uid
ou=Users, dc=CAG, dc=CZ.
Stejně jako
je zde daná položka jednoznačně určena. Bylo by ale chybné
použít například atribut
cn,
který jako hodnotu obsahuje celé jméno uživatele.
V systému se mohou vyskytovat dva uživatelé, kteří mají stejné jméno a příjmení, zatímco uživatelské jméno považujeme v celém systému za jednoznačné.
1.3. Informace o účtech a hesla uživatelů Ve standardní instalaci Samby jsou informace o uživatelských účtech a hesla uživatelů, potřebná pro přihlášení do systému Windows, uložena v souboru /etc/smbpasswd.
Vinou nekompatibility LAN Manager a NT hesel je nutné, aby
uživatel byl nejprve vytvořen jako uživatel systému Unix (uvedený v /etc/passwd) a až poté může být pro něj vytvořen záznam v
/etc/smbpasswd.
To nevadí pro malý
počet uživatelů a v systémech, kde se noví uživatelé přidávají jen zřídka. V ostatních případech to však může způsobit problémy. Jelikož je nutné, aby uživatel byl uveden v /etc/passwd, musí se tento soubor replikovat na všechny linuxové stanice, které se přes server Samba vzdáleně ověřují. Pokud stanice uživatele nenajde ve svém lokálním souboru
/etc/passwd,
nemůže
uživatele přihlásit, protože nemá informace o jeho UID, GID, domovském adresáři a shellu. Kopírování souboru na všechny linuxové stanice při každém přidání nového uživatele do systému je neefektivní a problematické.
12
Uložením všech informací o jednotlivých uživatelích a jejich hesel pro systémy Windows i Linux na jedno místo - do adresáře LDAP se odstraní potřeba kopírování souboru /etc/passwd na jednotlivé stanice a usnadní správa. V každém záznamu pro uživatele v adresáři LDAP jsou uloženy informace potřebné pro přihlášení do Linuxu i Windows a další informace.
1.4. Domény Windows, řídící počítač domény Nadstavbou protokolu SMB, vyvinutou firmou Microsoft, jsou tzv. domény Windows. Doména je skupina počítačů obsahující server, který pracuje jako tzv. řídící počítač domény (Domain Controller - DC). Pro existenci domény je tento server nutnou podmínkou. DC domény (přihlašovací server) je ústředním bodem domény Windows. Jednou z jeho hlavních funkcí je proces autentizace (ověření) a autorizace (přidělení nebo odepření uživatelského přístupu) ke sdíleným síťovým zdrojům. Řídící počítač domény tedy obsahuje centrální seznam hesel, které jsou svázány s uživatelskými jmény, což je mnohem efektivnější než uchovávání stovek hesel na klientských počítačích ke každému sdílenému síťovému zdroji. Aktivní DC domény se nazývá primární řídící počítač domény (Primary Domain Controller - PDC). Kromě toho může v doméně existovat jeden nebo více záložních řídících počítačů domény (Backup Domain Controllers - BDCs), které přebírají funkci primárního DC v případě jeho výpadku. Záložní DC provádějí synchronizaci dat s primárním DC. Kopie dat mají pouze pro čtení a mohou se aktualizovat jen v případě synchronizace s PDC. Samba může bez jakýchkoli problémů pracovat jako PDC pro počítače s operačními systémy Windows 95/98, Windows 2000 a Windows XP. Operační systémy Windows 95/98 používají starší šifrovací systém zděděný ze síťového softwaru LAN Manager, zatímco klienti a servery na bázi NT používají novější šifrovací systém. V adresáři LDAP jsou uloženy obě varianty hesel. Problém může
13
nastat se staršími verzemi Windows 95, kde není
šifrování hesel podporováno
vůbec.
1.5. Konfigurace sítě LAN a serveru Ke konfiguraci Samby jako PDC pro stanice s operačním systémem Microsoft Windows předpokládejme, že všechny stanice jsou ve stejné síti 192.168.1.0/24 a doména má název CAG. Server, který slouží jako PDC má IP adresu 192.168.1.1/32, NetBIOS jméno OTHELLO a zároveň slouží a jako server WINS. Informace o uživatelských účtech, heslech, počítačích a skupinách jsou uloženy v serveru LDAP s RDN dc=CAG,dc=CZ. Server (obrázek 1.5.1.) je od firmy Compaq (ProLiant DL350M) a je určen pro menší a střední počítačové sítě. Hardwarová konfigurace je 1x CPU Intel Pentium III (1,13 GHz FC-PGA, 256KB L2 cache), 512 MB RAM (PC 133MHz, ECC SDRAM DIMM), integrovaný Ultra2 SCSI řadič a 2x Fast Ethernet
síťový
adaptér
(Intel
82557/8/9
a
3c905C-TX). Data se ukládají na dva SCSI pevné disky s celkovou kapacitou 72 GB a přenosovou rychlostí 160 MB/s. Na serveru je nainstalován operační systém RedHat Linux 7.3 a server zároveň Obrázek 1.5.1. : ProLiant DL350M
slouží jako webový a poštovní server.
14
2. Instalace potřebného softwaru Abychom mohli nakonfigurovat server Samba jako PDC, potřebujeme stabilní verzi Samby [www.samba.org], serveru OpenLDAP [www.openldap.org] a balík skriptů pro správu uživatelských účtů a skupin z příkazového řádku smbldap-tools [www.idealx.com]. Samba je nyní ve verzi 3.x.x, ale pro naše potřeby plně postačí i poslední stabilní verze 2.2.8a-1.
2.1. Stažení, kompilace a instalace Samby Samba je dostupná ve formě jak binárních, tak zdrojových souborů na několika zrcadlených místech v Internetu. Primární domovský server Samby lze najít na adrese
http://www.samba.org.
Abychom Sambu mohli používat spolu s LDAP
serverem, musíme ji zkompilovat ze zdrojových souborů nebo si vytvořit RPM balíčky Samby s podporou LDAP. Na serveru je nainstalována distribuce Linuxu od firmy RedHat [www.redhat.com], a proto je výhodnější druhá možnost. Nejprve stáhneme a nainstalujeme poslední verzi balíčku zdrojových souborů (rpm
samba-2.2.8a-1.src.rpm
instalaci se v
–ivh
/usr/src/redhat/BUILD/
samba-2.2.8a-1.src.rpm).
Po úspěšné
objeví adresář se stejným jménem jako je
název balíčku se zdrojovými soubory. Než přistoupíme ke kompilaci RPM souborů musíme
nejprve
upravit
soubor
/usr/src/redhat/SPECS/samba.spec,
který
obsahuje možnosti pro kompilaci. Zapneme podporu pro LDAP (--with-ldapsam), podporu modulů PAM (--with-pam) a podporu tiskového serveru CUPS (--enable-cups). Příkazem
cd /usr/src/redhat/SPECS/ && rpm –ba samba.spec
spustíme
kompilaci RPM souborů. Pokud vše proběhne v pořádku, najdeme v adresáři /usr/src/redhat/RPMS/i386/ samba-2.2.8a-1.rpm
a
RPM
soubory
samba-common-2.2.8a-1.rpm,
samba-client-2.2.8a-1.rpm,
15
které stačí nainstalovat
příkazem
rpm
samba-*.
–ivh
Před instalací nových RPM souborů je nutné
odinstalovat všechny předchozí balíčky Samby!
2.2. Stažení a instalace OpenLDAP Instalace
serveru
ftp://ftp.redhat.com
LDAP
o
něco
jednodušší.
nebo jiného mirroru RPM balíčky
openldap-clients-2.0.27-2.7.3
nainstalovat příkazem
je a
Stačí
stáhnout
openldap-2.0.27-2.7.3,
openldap-servers-2.0.27-2.7.3
rpm –ivh openldap-*.
z
a
ty
Tato verze opět není poslední, ale je
ověřeno, že se Sambou bezproblémově spolupracuje.
2.3. Stažení a instalace balíku smbldap-tools Smbldap-tools je balíček skriptů, naprogramovaných v jazyce Perl, sloužící k základním operacím s uživatelskými účty. Všechny tyto příkazy se používají z příkazového řádku. Ještě před instalací je nutné zkontrolovat, zda je v systému nainstalován modul pro Perl s názvem
Net::LDAP
a samozřejmě Perl samotný.
Samba musí být nainstalována na stejném stroji jako tyto skripty, ale server OpenLDAP může být spuštěn na jiném počítači. V takovém případě je nutné zkontrolovat bezchybnou komunikaci se serverem LDAP pomocí standardních nástrojů. Instalace skriptů je snadná. Stačí ze stránek stáhnout soubor se zdrojovými kódy s názvem
http://samba.idealx.org/
smbldap-tools-0.7.2.tgz,
jej a všechny soubory nakopírovat do adresáře
/usr/local/sbin/.
rozbalit
Pro systémy
s distribucí RedHat autoři doporučují použít připravený RPM balíček, který se instaluje příkazem rpm
–ivh smbldap-tools-0.7-2.i386.rpm.
Pro verzi Samby 3 je
určen stejnojmenný balík skriptů ve vyšší verzi. Ten nově umožňuje uživatelům změnu hesla z příkazového řádku. To je dáno zejména rozdělením jednoho konfiguračního souboru na dva. První může číst pouze uživatel root a obsahuje definici administrátorského účtu pro připojení k serveru LDAP. Druhý obsahuje nastavení globálních parametrů, které mohou číst všichni uživatelé.
16
4. Konfigurace serveru OpenLDAP Před vlastním spuštěním serveru OpenLDAP je nutné udělat několik změn v konfiguračních souborech tak, aby byl schopen sloužit jako databáze uživatelů, počítačů a skupin pro Sambu a systém Linux. Musí akceptovat LDAP schéma, které používá Samba verze 2.x.x, běžet na základu
dc=CAG, dc=CZ
a obsahovat povinné
záznamy. Struktura stromu může vypadat například takto: dc=CAG,dc=CZ | +--- ou=Users : k ukládání uživatelských účtů (posixAccount | a sambaAccount) pro Unixové a Windows systémy | +--- ou=Computers : k ukládání účtů počítačů (sambaAccount) pro | Windowsové systémy | +--- ou=Groups : k ukládání systémových skupin (posixGroup) | pro Unixové a Windows systémy
Pro ukládání objektů je možné použít i jiný strom, ale tato struktura je doporučena vývojáři Samby a je podporována skripty z balíku smbldap-tools. Účty pro uživatele systému Windows, stejně jako účty jednotlivých počítačů (pracovních stanic), se ukládají pomocí třídy objektů sambaAccount (samba.schema). Účty pouze pro Unix se ukládají pomocí třídy objektů posixAccount (nis.schema) a uživatelské skupiny pomocí třídy posixGroup.
4.1. Schéma a úprava konfigurace Soubor v adresáři
samba.schema
je dodáván se zdrojovými kódy Samby a je uložen
/usr/src/redhat/BUILD/samba-2.2.8a/examples/LDAP/.
je potřeba zkopírovat do adresáře používat schéma
inetOrgPerson,
/etc/openldap/schema/.
je nutné v souboru
Tento soubor
Pokud se bude zároveň
samba.schema
zakomentovat
typ atributu displayName, který je již tímto schématem definován. Pokud se používat nebude, nemusíme dělat žádné úpravy.
17
Dalším nezbytným krokem je správné nastavení serveru LDAP Daemon). Do souboru
/etc/openldap/slapd.conf
slapd
(Stand-alone
přidáme schéma pro
Sambu a nastavíme údaje pro přihlášení administrátora, který má neomezený přístup ke všem uloženým záznamům. # soubor /etc/openldap/slapd.conf pro SAMBA-LDAP include include include include include
/etc/openldap/schema/core.schema /etc/openldap/schema/cosine.schema /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/nis.schema /etc/openldap/schema/samba.schema
database sufix
ldbm "dc=CAG,dc=CZ"
rootdn rootpw
"cn=Manager,dc=CAG,dc=CZ" tajneheslo
directory
/var/lib/ldap
Celý soubor je v příloze. Direktiva database kterou bude server LDAP používat a direktiva
ldbm
označuje základní databázi,
directory /var/lib/ldap
říká
serveru, kde najde vlastní databázi a indexové soubory. K tomuto konfiguračnímu souboru musí mít přístup pouze uživatel, pod kterým je spouštěn LDAP server a nesmí mít v žádném případě nastaven atribut čtení pro zbytek světa. Heslo administrátora je zde uloženo jako prostý text, což není z hlediska bezpečnosti příliš dobré, a proto je lepší heslo do konfiguračního souboru uložit v zašifrované podobě. [hartman@othello /]$ /usr/sbin/slappasswd -h {CRYPT} -s tajneheslo {CRYPT}qBCGp7afTjd3A
Takto získané heslo stačí do souboru uložit místo původního hesla. Utilitu /usr/sbin/slappasswd
budeme také používat pro generování zašifrovaného
uživatelského hesla (atribut userPassword) při jeho změně přes webové rozhraní. Ke generování LAN Manager (LM) a NT hesel (atributy lmPassword a
ntPassword)
naopak budeme používat utilitu /usr/local/sbin/mkntpwd, která je součástí balíčku smbldap-tools. Řádek s heslem by pak vypadal takto: # (…) rootpw # (…)
{CRYPT}qBCGp7afTjd3A
18
Posledním souborem, který ještě musíme před spuštěním upravit, je /etc/openldap/ldap.conf.
Tento soubor může mít nastaven atribut čtení pro zbytek
světa, ale nesmí mít pro tuto skupinu nastaven atribut zápisu. # soubor /etc/openldap/ldap.conf pro SAMBA-LDAP # # LDAP Defaults # HOST 127.0.0.1 BASE dc=CAG,dc=CZ BINDDN cn=Manager,dc=CAG,dc=CZ
Nyní je server připraven k prvnímu spuštění. Pokud při spuštění dojde k nějakým chybám, je nutné zkontrolovat schémata a zda adresář
/var/lib/ldap/
vlastní uživatel, pod kterým se spouští server LDAP. Pokud je vše nastaveno správně a přesto nelze server spustit, může pomoci dokumentace (man
ldap).
Server spustíme
na systémech RedHat příkazem: [root@othello root]# service ldap start Startuji slapd:
Pokud spuštění serveru
slapd
[
OK
]
proběhlo bez problémů, je potřeba vytvořit
stromovou strukturu, která je popsána v úvodu této podkapitoly. Soubor
base.ldif
je součástí balíku smbldap-tools. Jsou v něm kromě základních prvků stromu definovány i všechny skupiny, které budou pak k dispozici pro Windows i unixové uživatele. Většina z nich se ale nikdy nepoužije. Celý soubor najdete v příloze. Popsaný LDIF soubor přidáme příkazem: [hartman@othello tmp]$ ldapadd -x -h localhost -D \ > "cn=Manager,dc=CAG,dc=CZ" -f base.ldif –W Enter LDAP Password:
Po zadání hesla administrátora se vytvoří požadovaná struktura. Pro její kontrolu můžeme použít nějaký nástroj pro správu záznamů, jakým je například LDAP Browser/Editor [http://www.iit.edu/~gawojar/ldap/]. Tento program je celý napsaný v programovacím jazyce JAVA a funguje v operačních systémech Windows i Linux. Na serveru jsou jednotlivé záznamy uloženy v kódování
19
Unicode UTF-8, které tento program korektně zobrazuje i ukládá v systému Windows (testováno na Windows XP SP1). Pokud je naším cílem pouze záznamy prohlížet, nemusíme při vytváření nového připojení vyplňovat DN pro administrátora ani jeho heslo, ale musíme zaškrtnout možnost pro anonymní přístup (Anonymous bind). Nové připojení by pak mohlo vypadat následujícím způsobem (obrázek 4.1.1.).
Obrázek 4.1.1. : LDAP Browser/Editor – nové připojení
Po uložení nově definovaného připojení se připojíme k serveru. Pokud jsou všechny údaje v pořádku, zobrazí se struktura, která byla vytvořena v předchozí části. Správný výpis struktury stromu vypadá následovně (obrázek 4.1.2.).
Obrázek 4.1.2. : LDAP Browser/Editor – struktura adresáře LDAP
20
4.2. Konfigurace smbldap-tools Ještě
zbývá
upravit
konfigurační
soubor
smbldap_conf.pm
balíku
smbldap-tools, který se nachází ve stejném adresáři jako skripty. Tento soubor musíme upravit podle nastavení serveru OpenLDAP, zejména musíme zadat heslo administrátora, adresu serveru LDAP a specifické informace o uložení uživatelských profilů a domovských adresářů. Při konfiguraci narazíme na dvě matoucí proměnné: slaveLDAP a masterLDAP. V našem případě máme jen jeden server LDAP, a proto vyplníme obě hodnoty stejně, tj.
127.0.0.1
(nebo
localhost).
Pokud by byl server
LDAP spuštěn na jiném počítači, vyplnili bychom zde jeho IP adresu. # Slave LDAP : needed for read operations # # Ex: $slaveLDAP = "127.0.0.1"; $slaveLDAP = "localhost"; # # Master LDAP : needed for write operations # # Ex: $masterLDAP = "127.0.0.1"; $masterLDAP = "localhost"; # # LDAP Suffix # # Ex: $suffix = "dc=IDEALX,dc=ORG"; $suffix = "dc=CAG,dc=CZ";
Abychom mohli jednotlivé záznamy uživatelů pomocí těchto skriptů také měnit, musíme zadat údaje pro přihlášení administrátora, který má právo zápisu pro celý strom. Zde bohužel musí být heslo uvedeno v nezašifrované podobě. Tento problém neřeší ani nejnovější verze těchto skriptů. # # Credential Configuration # # Bind DN used # Ex: $binddn = "cn=Manager,$suffix"; for cn=Manager,dc=IDEALX,dc=org $binddn = "cn=Manager,$suffix"; # # Bind DN passwd used # Ex: $bindpasswd = 'secret'; for 'secret' $bindpasswd = "tajneheslo";
21
Poslední úpravou je nastavení cesty k domovskému adresáři pro Windows (bude po přihlášení přimapován jako disk H:\) a cestu k uživatelskému profilu s nastavením. Skripty ve výchozím nastavení počítají s uložením uživatelských profilů na jiném místě než v domovském adresáři. My budeme adresář s nastavením vždy ukládat do domovského adresáře každého uživatele (např.
/home/Z/hartman/profile/).
# # The UNC path to home drives location without the username last # extension (will be dynamically prepended) # Ex: q(\\\\PDC-netbios-name\\homes) for \\PDC-netbios-name\homes $_userSmbHome = q(\\\\OTHELLO\\homes); # # The UNC path to profiles locations without the username last # extension (will be dynamically prepended) # Ex: q(\\\\PDC-netbios-name\\profiles) for # \\PDC-netbios-name\profiles $_userProfile = q(\\\\OTHELLO\\homes\\profile); # # The default Home Drive Letter mapping # (will be automatically mapped at logon time if home directory # exist) # Ex: q(U:) for U: $_userHomeDrive = q(H:);
Za zmínku ještě stojí proměnná, která určuje název přihlašovacího skriptu. Ve výchozím nastavení není jeho název definován a při vytvoření nového uživatele se automaticky použije hodnota UživatelskéJméno.cmd. Zkušenost ale ukázala, že to není dobré řešení, protože vždy po vytvoření nového uživatele je nutné tento soubor vytvořit ručně v adresáři /etc/samba/netlogon/. Výhodnější je použít „univerzální“ přihlašovací skript, například s názvem startup.cmd, pro všechny uživatele. Pokud nějaký uživatel bude mít specifický přihlašovací skript, lze tento název změnit v jeho záznamu (atribut scriptPath ) a tento soubor potom nakopírovat do výše uvedeného adresáře. Tím je konfigurace globálních proměnných u konce, ještě ale provedeme drobnou úpravu vlastního skriptu pro vytvoření nového uživatele. Bylo by určitě příjemné, kdybychom mohli server LDAP využívat v emailových klientech také jako adresář (pouze pro čtení). Podporu serveru LDAP jako adresáře obsahuje většina
22
z nich a nejpropracovanější je určitě v programech Ximian Evolution (Linux) a Netscape Mail (Windows). Základní podporu najdeme i v programech od firmy Microsoft (Outlook, Outlook Express) a dalších. Aby fungovala funkce vyhledávání emailových adres podle jména a příjmení uživatele, musíme ke každému záznamu přidat atribut s názvem
mail,
který bude obsahovat emailovou adresu ve tvaru
UživatelskéJmé
[email protected]. Ještě přidáme atribut o (Organization), kde bude hodnota napevno nastavena na Anglo-Czech High School. Ve skriptu
smbldap-useradd.pl
najdeme část, kde se vytváří pole hodnot jednotlivých atributů a přidáme
mail
a
o
následujícím způsobem (zvýrazněno tučně): # # smbldap-useradd.pl # # (…) o: Anglo-Czech High School cn: $userName sn: $userName uid: $userName mail: $userName\@cag.cz uidNumber: $userUidNumber gidNumber: $userGidNumber # (…)
Další kosmetickou úpravou tohoto skriptu bude přidání atributu
ou
(Organizational Unit), kde hodnotou bude třída, kterou student navštěvuje. Učitelé zde budou mít uloženu hodnotu teacher a ostatní other. Zde již není úprava tak jednoduchá. Musíme umožnit zadání hodnoty z příkazového řádku a ošetřit případ, kdy hodnota nebude zadána explicitně. Nejprve otestujeme, zda jsou všechny parametry správně zadány. Pokud tomu tak není vypíšeme nápovědu, kde jsme přidali novou volbu -e, za kterou by měl následovat název třídy (např. Prima, Sekunda, Tercie,…,1.ročník atd.). my $ok = getopts('axnmwPG:u:g:d:s:c:e:k:A:B:C:D:E:F:H:?', \%Options); # (…) print " -s shell\n"; print " -c gecos\n"; print " -e department (probably class)\n"; # (…) # my $userDepartment = $Options{'e'}; if (!defined($userDepartment)) { $userDepartment = 'other'; } # (…)
23
Pokud je zadána volba -e a za ní následuje název třídy, pak se tato hodnota uloží do proměnné
$userDepartment.
Není-li hodnota zadána, místo názvu třídy se
použije řetězec other. Nakonec tuto proměnnou uložíme jako atribut
ou,
podobně
jako tomu bylo v předchozím případě (úpravy jsou zvýrazněny tučně). # (…) o: Anglo-Czech High School cn: $userName sn: $userName uid: $userName mail: $userName\@cag.cz ou: $userDepartment uidNumber: $userUidNumber gidNumber: $userGidNumber # (…)
Pro ilustraci je na obrázku 4.1.3. ukázka prohledávání adresáře LDAP v programu Netscape Mail 7.1. . Po zadání části jména nebo příjmení se prohledají všechny záznamy a zobrazí se jen ty, které odpovídají zadanému kritériu. Tento program samozřejmě obsahuje i pokročilejší funkce pro vyhledávání. Ve sloupci Name je zobrazena hodnota atributu Company je atribut
o
cn,
ve sloupci Email hodnota atributu
a nakonec sloupec Department je atribut
způsobem fungují i ostatní klienti pro práci s adresářem LDAP.
Obrázek 4.1.3. : Netscape Mail - vyhledávání v adresáři LDAP
24
ou.
mail,
Podobným
5. Konfigurace Linuxu (moduly PAM) V době, kdy neexistoval žádný univerzální autentizační systém, musela každá aplikace, která poskytovala nějakou službu, provést kontrolu uživatele sama. Některé služby měly své bezpečnostní mechanismy velmi slabé a mnoho lidí se je snažilo oklamat za účelem získání nepovoleného přístupu. Další vadou na kráse zabudovaných systémů ověřování identity byla nemožnost jejich rozšiřování. Například při přechodu na systém stínových hesel, kdy jsou hesla uchována ve zvláštním, běžným uživatelům nepřístupném souboru upravit zdrojové kódy programu
login
/etc/shadow,
bylo nutné
a všech podobných aplikací, které využívaly
k ověřování uživatelů soubor /etc/passwd.
5.1. Linux-PAM Hlavní myšlenkou PAM je, aby uživatelské programy byly nezávislé na konkrétních autentizačních postupech. Aplikace chce obvykle vědět, zda má službu poskytnout nebo ne, ale nezajímá ji, jakým způsobem je ověření uživatele realizováno. Linux-PAM (Pluggable Authentication Modules for Linux) je systém modulů, který ovládá autentizační úlohy aplikací/služeb systému. Nejdůležitější vlastností PAM je, že administrátor může úpravou seznamu modulů libovolně určovat postup autentizace. Pro mnoho serverů je jím stále jednoduchý soubor s hesly. Modul PAM je knihovna, kterou lze připojit k uživatelským i systémovým programům. Když programy potřebují provést autentizaci nebo autorizaci uživatele, zavolají funkci, která se nachází v knihovně PAM. Volaná funkce hledá konfigurační soubory dané aplikace a jestliže žádný takový soubor není, použije modul PAM implicitní konfigurační soubor /etc/pam.d/other. Konfigurační soubor sděluje knihovně, jaké typy ověření se musí provést za účelem autentizace a autorizace uživatele. Na základě toho se volá příslušný modul. Ten může zkontrolovat cokoli, například může jednoduše nahlédnout do souboru s hesly nebo provést nějakou složitější
25
kontrolu - např. zavolat server LDAP, jako tomu bude v našem případě. Poté co modul provedl kontrolu, vrátí volající aplikaci zprávu „ověřeno/neověřeno“.
5.1. Konfigurační soubory modulů PAM Stejně jako ostatní programy v distribuci RedHat si i systém PAM ukládá své konfigurační soubory do adresáře
/etc/,
konkrétně
/etc/pam.d/.
Soubory mají
stejný název jako je název aplikace, pro kterou je modul určen. Jestliže aplikace používající modul PAM nemá vlastní konfigurační soubor, automaticky se použije konfigurační soubor s názvem
/etc/pam.d/other.
Konfigurační soubor modulu
PAM je zajímavý tím, že každý řádek se v průběhu procesu ověřování vyhodnocuje. Každý řádek specifikuje modul, který provádí činnost spojenou s autentizací nebo autorizací a vrací příznak úspěchu nebo neúspěchu. Celkový výsledek se vrací do programu, který modul PAM zavolal. Pojmem „neúspěch“ není zde míněno selhání programu. Znamená to, že při ověřování toho, zda by uživatel mohl provést určitou činnost, se vrátila hodnota „NE“. Každý soubor se skládá z řádků v následujícím formátu: module_type
kde
module_type
Password.
control_flag
module_path
označuje jeden ze čtyř typů modulů:
arguments
Auth, Account, Session
nebo
Poznámky musí začínat křížkem (#). V tabulce 5.1.1. jsou uvedeny typy
těchto modulů a jejich stručný popis. Typ modulu Auth
Funkce Přikazuje aplikačnímu programu, aby vyzval uživatele k zadání hesla a uděluje práva uživatelů a skupin.
Account
Neprovádí autentizaci ani autorizaci, ale vymezuje přístup na základě jiných faktorů, jako např. čas nebo místo, kde se uživatel nachází. Přihlášení superuživatele může proběhnout např. jen prostřednictvím konzole.
Session
Určuje, jaká činnost (pokud taková existuje) se musí provést před přihlášením uživatele nebo po něm.
Password
Určuje, který modul umožní uživateli změnu hesla.
Tabulka 5.1.1. : Typy modulů a jejich funkce
26
Control_flag
nám umožňuje určit, jak naložíme s úspěchem nebo
neúspěchem určitého modulu autorizace. Řídící příznaky (Control Flags) jsou popsány v tabulce 5.1.2. . Parametr
module_path
určuje platnou cestu do adresáře modulu, který provádí
autentizaci nebo autorizaci. Kompletní seznam modulů najdete na webové stránce věnované modulům PAM [www.kernel.org/pub/linux/libs/pam/]. Řídící příznak Required
Funkce Jestliže je specifikován tento příznak, modul MUSÍ provést autorizaci jednotlivce úspěšně.
Requisite
Tento příznak je podobný příznaku required, pouze s tím rozdílem, že když requisite neuspěje při ověřování, moduly uvedené v konfiguračním souboru za ním se nevolají a aplikace obdrží návratovou hodnotu „neúspěch“. Máme tak možnost vyžadovat splnění určitých podmínek ještě před vlastním přihlášením (podmínkou může být např. to, že uživatel se nachází v lokální počítačové síti a není přihlášen z Internetu).
Suffiscient
Jestliže modul suffiscient vrátí hodnotu „úspěch“ a v konfiguračním souboru se nevyskytují žádné další řídící příznaky required nebo suffiscient, modul PAM vrátí volající aplikaci hodnotu „úspěch“.
Optional
Tento příznak umožňuje, aby modul PAM dále kontroloval další moduly, a to i v případě, že tento modul neuspěl. Můžeme jej použít tehdy, když je povoleno přihlášení uživatele i přesto, že určitý modul neuspěl.
Tabulka 5.1.2. : Řídící příznaky a jejich funkce
Posledním údajem v konfiguračním souboru modulu PAM je položka arguments.
Jsou to parametry, které se předávají modulu. Ačkoli jsou tyto parametry
pro každý modul specifické, mají několik všeobecných voleb, které se dají použít u všech modulů. Tyto parametry jsou popsané v tabulce 5.1.3. . Jak jsme již zmínili dříve, když nemůže modul PAM najít konfigurační soubor specifický pro danou aplikaci, použije místo toho univerzální (generický) konfigurační soubor. Tento soubor se nazývá
27
/etc/pam.d/other.
Implicitně je tento
soubor nastaven tak, že všechny pokusy o autorizaci se zaprotokolují a poté okamžitě zamítnou. Toto nastavení by se nemělo měnit! Parametr debug
Funkce Zasílá podrobné výpisy o ladění log-souborům systému (nejčastěji do adresáře /var/log/).
no_warn
Nepředává volající aplikaci žádné výstražné zprávy.
use_first_pass
Nevyzývá uživatele k dvojímu zadání hesla. Místo toho se k potvrzení jeho způsobilosti ke vstupu do systému použije heslo, které uživatel zadal u předchozího modulu. Tato volba je podobná jako use_first_pass, kde uživatel neobdrží výzvu k zadání hesla. Jestliže ale stávající heslo způsobí, že modul vrátí „neúspěch“, uživatel je nucen zadat heslo podruhé a modul to zkouší znovu.
try_first_pass
use_mapped_pass
Předává heslo z předchozího modulu do modulu aktuálního, stejně jako use_first_pass. Heslo se však použije k vygenerování šifrovacího nebo dešifrovacího klíče.
Tabulka 5.1.3. : Parametry modulu PAM a jejich funkce
Pokud při konfiguraci modulů PAM uděláme chybu, může se stát, že se do systému nebudeme moci přihlásit ani jako superuživatel root. Pro minimalizaci tohoto rizika, je dobré si vytvořit zálohu původního (funkčního) konfiguračního souboru a ze systému se neodhlašovat dříve, než vše řádně vyzkoušíme. Pokud se ale náhodou přece jen stane, že se nelze přihlásit, stačí systém restartovat v „jednouživatelském režimu“ a nahradit změněný konfigurační soubor funkční zálohou nebo vrátit všechny změny zpět.
5.2. Konfigurace modulů PAM Pro ověřování pracovních stanic proti serveru LDAP je nutné vhodně upravit konfigurační soubory modulů PAM tak, aby se kromě souboru s hesly kontrolovaly i záznamy LDAP. V zásadě existují dva postupy, jak toho docílit. Prvním z nich je ruční editace souboru nástroje
/etc/pam.d/system-auth
/usr/sbin/authconfig,
a druhým použití konfiguračního
ve kterém jen nastavíme údaje o serveru LDAP a
on upraví potřebné soubory sám. Druhý způsob je k dispozici jak v textové konzoli, tak i grafickém prostředí (/usr/bin/authconfig-gtk).
28
Obrázek 5.2.1. : GNOME – konfigurace PAM
Obrázek 5.2.2. : GNOME – konfigurace PAM
Na obrázcích 5.2.1. a 5.2.2. je ukázka „Konfigurace autentizace“ v prostředí Gnome distribuce RedHat. Na těchto dvou kartách povolíme podporu LDAP a pokud v systému běží démon
nscd
(Name Service Cache Deamon), můžeme povolit i
kešování uživatelských informací, což by mohlo ulehčit serveru LDAP při opakovaných dotazech a zrychlit jeho odezvu. Pro přihlášení do systému jen samotné
zapnutí
podpory
LDAP
nestačí.
Musíme
ještě
nastavit
informace, na kterém stroji server LDAP běží a v jaké části stromu se mají informace o uživatelích hledat. Obrázek 5.2.3. : GNOME – nastavení LDAP
Na obou kartách po kliknutí na
tlačítko „Konfigurace LDAP“ vyplníme údaje, jako jsou na obrázku 5.2.3. Informace o uživatelích jsou uloženy v části s DN: LDAP je
othello.caglan.cz.
ou=Users,dc=CAG,dc=CZ
a adresa serveru
Po potvrzení obou dialogových oken se změny zapíší
do souboru /etc/pam.d/system-auth. #%PAM-1.0 # This file is auto-generated.
29
# User changes will be destroyed the next time authconfig is run. auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so likeauth nullok auth sufficient /lib/security/pam_ldap.so use_first_pass auth required /lib/security/pam_deny.so account account
required sufficient
/lib/security/pam_unix.so /lib/security/pam_ldap.so
password password
required sufficient
password password
sufficient required
/lib/security/pam_cracklib.so retry=3 type= /lib/security/pam_unix.so nullok use_authtok md5 shadow /lib/security/pam_ldap.so use_authtok /lib/security/pam_deny.so
session session session
required required optional
/lib/security/pam_limits.so /lib/security/pam_unix.so /lib/security/pam_ldap.so
Změny v konfiguračním souboru jsou zvýrazněny tučně. V kapitole 4.1. jsme upravovali konfigurační soubor
/etc/openldap/ldap.conf .
Nyní do něj připíšeme
další nastavení. Nejdůležitější je změna způsobu vyhledávání z výchozího na
?sub ,
?one
která je nutná právě díky rozdělení jednotlivých účtů počítačů
(ou=Computers,dc=CAG,dc=CZ) a uživatelů (ou=Users,dc=CAG,dc=CZ). # soubor /etc/openldap/ldap.conf pro SAMBA-LDAP # (…) nss_base_passwd dc=CAG,dc=CZ?sub nss_base_shadow dc=CAG,dc=CZ?sub nss_base_group ou=Groups,dc=CAG,dc=CZ?one ssl no pam_passwords md5 # - The End
5.3. Testování nastavení K otestování korektní komunikace systému se serverem LDAP vytvoříme uživatelský učet s názvem „testuser“ a zkusíme tohoto nového uživatele přihlásit. K vytvoření
uživatele
použijeme
skript
z
balíku
smbldap-tools
s
názvem
smbldap-useradd.pl. [root@othello /]# smbldap-useradd.pl -m -c "Test User" testuser [root@othello /]# smbldap-passwd.pl testuser Changing password for testuser New password : Retype new password : all authentication tokens updated successfully
30
Uživatele se podařilo vytvořit a to znamená, že balík smbldap-tools a server OpenLDAP jsou správně zkonfigurovány a že spolu komunikují. Nezbývá nic jiného než otestovat zda se podaří uživatele do systému přihlásit. [root@othello /]# ssh testuser@othello testuser@othello's password: Last login: Mon Dec 15 10:49:34 2003 from hartman.caglan.cz [testuser@othello testuser]$ id uid=1363(testuser) gid=100(users) skupiny=100(users) [testuser@othello testuser]$ finger testuser Login: testuser Name: Test User Directory: /home/testuser Shell: /bin/bash On since Fri Mar 5 22:37 (CET) on pts/1 from othello.caglan.cz No mail. No Plan.
Uživatel se úspěšně přihlásil přes ssh klienta a to ukazuje, že i PAM moduly jsou bezchybně nakonfigurovány. Systém při ověřování uživatele nejprve hledá uživatele lokálně a pak až prohledává adresář LDAP. To je správné, protože jen tak se může přihlásit k systému i superuživatel root, který je veden pouze lokálně. O úspěšném přihlášení bychom našli záznam i v systémových log-souborech. Jelikož tohoto uživatele již nepotřebujeme, tak ho smažeme i s jeho domovským adresářem, který mu byl při založení vytvořen. [root@othello /]# smbldap-userdel.pl -r testuser
31
6. Souborové systémy Každý uživatel přihlášený do systému potřebuje místo pro uložení svých specifických konfiguračních souborů. Tímto místem je domovský adresář, který umožňuje všem uživatelům pracovat ve svém vlastním upraveném prostředí. V tomto adresáři se ukládají nejen konfigurační soubory každého uživatele, ale i jeho pracovní soubory, dokumenty a profil s nastavením pro stanice s Windows (jak bude popsáno v dalších kapitolách). Z důvodu konzistence většina serverů umísťuje adresáře jednotlivých uživatelů do adresáře /home/ pod stejným názvem, jako je jeho uživatelské jméno. Výjimkou jsou systémové účty, jako např. účet superuživatele, který má tradičně podobu /root/. Umístění domovských adresářů do
/home/
není povinné. Má to však svůj
organizační význam. Z hlediska lepší přehlednosti je v systémech s velkým počtem uživatelů vhodné jejich domovské adresáře ještě dále členit do podadresářů. Toho s výhodou využijeme například při nastavení diskových kvót pro jednotlivé skupiny uživatelů. V našem případě budeme adresáře ukládat do tří podadresářů: kde budou uloženy domovské adresáře pro zaměstnance, /home/O/
/home/S/
/home/Z/,
pro studenty a
pro všechny ostatní.
Místo, kde má systém hledat domovský adresář přihlášeného uživatele, je uloženo jako atribut
homeDirectory
(např.:
homeDirectory:
/home/Z/hartman)
v jeho záznamu LDAP. V kapitole 5 jsme nastavili linuxové pracovní stanice a server pro ověřování uživatelů proti serveru LDAP. Na serveru, kde mají uživatelé své adresáře uloženy lokálně, proběhne celý proces přihlášení v pořádku i s načtením jeho konfiguračních souborů. Na pracovních stanicích je situace jiná. Uživatel se sice přihlásí, ale jeho konfigurační soubory se nenačtou, protože domovský adresář uživatele se nepodařilo nalézt. Tento problém se dá na linuxových stanicích vyřešit pomocí NFS (Network File System). Umístěním domovských adresářů na diskové oddíly připojené přes NFS umožníme uživateli přístup do jeho domovského adresáře z jakékoli linuxové pracovní stanice v síti. V prostředí s různými operačními systémy
32
je to velmi výhodné, protože uživatelé se nemusí obávat přechodu mezi jednotlivými stanicemi. Pro každý operační systém mají specifická nastavení, která se navzájem neovlivňují a z každého z nich mohou přistupovat ke svým dokumentům.
6.1. Síťové souborové systémy Unix umožňuje sdílení souborů a aplikací v rámci počítačové sítě prostřednictvím síťového souborového systému NFS (Network File System), jehož podstata je podobná sdílení disků ve Windows. Hlavní podobnost spočívá v tom, že oba operační systémy umožňují připojovat síťové disky a pracovat s nimi jako s lokálními. Kromě této vlastnosti mají síťový souborový systém OS Linux a Windows více rozdílného než společného. Pro připojování a odpojování síťových disků platí stejné principy jako pro souborové systémy. Nesmí se však zapomenout nakonfigurovat server tak, aby povolil uživatelům sdílení určitých diskových oddílů. Připojení síťového souborového systému si objasníme na následujícím příkladu. Chceme-li na pracovní stanici
public
othello
sdílet domovské adresáře všech studentů
/mnt/Shomes/S/
ze serveru
tak, aby se jevil jako lokální adresář /home/S/, musíme zadat:
[root@public /]# mkdir -p /mnt/nfs/Shomes [root@public /]# mount othello:/mnt/Shomes/ /mnt/nfs/Shomes [root@public /]# ln -s /mnt/nfs/Shomes/S/ /home/S
Připojit síťový nebo souborový systém lze jen do existujícího adresáře. Z hlediska přehlednosti vytvoříme adresář
/mnt/nfs/Shomes/,
do kterého příkazem
v druhém řádku připojíme sdílený souborový systém ze serveru
othello.
Nakonec
vytvoříme symbolický odkaz /home/S na adresář /mnt/nfs/Shomes/S/. Pro kontrolu zkusíme vypsat obsah adresáře /home/S/. [root@public /]# cd /home/S/ [root@public S]# ll celkem 1224 drwx-----18 adamek users drwx-----22 altera users drwx-----6 ambroz users ... výpis zkrácen
4096 úno 15 10:15 adamek 4096 led 13 13:57 altera 4096 úno 23 10:15 ambroz
33
Kontrola byla úspěšná. V adresáři
/home/S/
jsou skutečně adresáře
jednotlivých uživatelů, v našem případě ale jen studentů. Jak sdílet celou strukturu adresáře
/home/*
ze serveru
othello
na pracovních stanicích bude rozebráno
později.
6.2. Konfigurace serveru NFS Server NFS lze nastavit ve dvou krocích. Prvním z nich je vytvoření souboru /etc/exports,
který definuje, jaké části disku serveru budou sdíleny s ostatními
uživateli sítě. Soubor také stanoví pravidla sdílení. V souboru
/etc/exports
je
například uvedeno, zda má určitý uživatel právo z disku jen číst nebo také zapisovat. Druhým krokem je spuštění serveru NFS, který se řídí instrukcemi zapsanými v souboru /etc/exports. Server NFS má jen jeden konfigurační soubor, kterým je
/etc/exports.
Formát každé položky tohoto souboru je následující: /dir/to/export
kde
client1 (permissions)
/dir/to/export
client1, client2
client2 (permissions)
znamená adresář, který chceme sdílet s ostatními uživateli,
atd. jsou jména stanic klientů NFS (pozor na správnou funkci DNS
nebo chyby v souboru /etc/hosts) a permissions jsou přístupová práva příslušející dané klientské stanici. V tabulce 6.2.1. jsou platná přístupová práva s jejich popisem. Řídící příznak secure ro noaccess
no_root_squash
Funkce Číslo portu, po kterém klient požaduje připojení. Musí být menší než 1024 (standardní nastavení). Přístupová práva pouze po čtení. Klientovi bude odepřen přístup do některých podadresářů adresáře /dir/to/export/. Tento parametr umožňuje klientovi připojit například adresář /home/, přičemž přístup do adresáře /home/secret/ zakázat. Standardní bezpečnostní opatření, které způsobí, že server ignoruje požadavky na diskový oddíl superuživatele přes síťový systém NFS. Žádný superuživatel z klientských stanic nebude mít do adresáře přes NFS přístup.
34
squash_uids=uid
Jeli vygenerován požadavek na NFS, obsahuje UID uživatele, od kterého požadavek vzešel. Tato informace dovoluje NFS rozlišit práva jednotlivých uživatelů. Tento parametr se používá v případech, kdy chceme omezit přístup některých uživatelů k určitým diskovým oddílům. Proměnná uid obsahuje čárkami oddělený seznam UID, které chceme zakázat. Je možné použít i rozsahy. Funguje stejně jako squash_uids, pracuje však s GID (ID skupin). Obvyklá práva pro čtení a zápis.
squash_gids=gid rw
Tabulka 6.2.1. : Přístupová práva klientů NFS ke sdíleným oddílům
Na serveru
othello
jsou domovské adresáře studentů uloženy na jiném
diskovém oddílu než adresáře zaměstnanců a ostatních uživatelů. Proto v adresáři /home/
je
vytvořen
/mnt/Shomes/S/.
symbolický
odkaz
Zde je připojen oddíl
/home/S,
/dev/sdb2
který
se
odkazuje
na
s domovskými adresáři všech
studentů. Pro lepší představu je zde výpis adresáře /home/ na serveru othello. [root@othello home]# ll celkem 100 -rw------1 root root -rw------1 root root drwxr-xr-x 3 root root drwx-----2 root root drwxr-xr-x 7 root root -rw------1 root root -rw------1 root root lrwxrwxrwx 1 root root drwxr-x--- 34 squid squid drwxr-xr-x 34 root root
8192 15360 4096 16384 4096 16416 43520 14 4096 4096
bře bře pro zář úno lis lis zář bře pro
6 6 9 21 15 20 20 24 5 13
04:06 04:08 12:11 2002 21:10 11:48 11:48 17:22 11:18 22:24
aquota.group aquota.user export lost+found O quota.group quota.user S -> /mnt/Shomes/S/ squid Z
Rozdělení uživatelských adresářů do podadresářů /home/Z/
/home/S/
(studenti),
(zaměstnanci) a /home/O/ (ostatní) je zvýrazněno tučně. Ostatní soubory a
adresáře nejsou pro nás momentálně důležité. Pro sdílení celé struktury domovských adresářů na serveru /mnt/Shomes/.
othello
přes NFS musíme sdílet oba adresáře
Symbolický odkaz
S -> /mnt/Shomes/S/
ze serveru
zachován. Soubor /etc/export pak bude vypadat následovně: [root@othello home]# less /etc/exports # # /etc/exports pro NFS server othello.caglan.cz # /home *.caglan.cz(rw,root_squash) /mnt/Shomes *.caglan.cz(rw,root_squash)
35
/home/
othello
a
bude
K oběma sdíleným diskovým oddílům mohou přistupovat jen počítače z lokální domény
caglan.cz .
Uživatelé mají práva čtení i zápisu a k souborům nesmí přes
NFS přistupovat superuživatel root z klientských stanic. K tomu, aby server NFS načetl data z konfiguračního souboru
/etc/exports
slouží příkaz
Chceme-li exportovat všechny souborové systémy, použijeme příkaz
exportfs.
exportfs –a.
Tím je konfigurace na straně serveru skončena a nyní jen zbývá nakonfigurovat jednotlivé pracovní stanice s operačním systémem Linux.
6.3. Konfigurace klientů systému NFS Klientské stanice lze v prostředí Linux nakonfigurovat velmi lehce, protože není nutné instalovat žádný software. Jedinou podmínkou správné funkce je kompilace jádra s podporou NFS. Ve většině distribucí je standardně povolena. V podkapitole 6.1. bylo ukázáno, jak se síťové souborové systémy připojují pomocí příkazu
mount
strukturu adresáře
z příkazového řádku. Nyní budeme chtít připojit celou
/home/
ze serveru NFS
othello
na klientské stanici
public
a
nastavíme, aby se automaticky připojila po každém spuštění. Použijeme zde konfigurační soubor
/etc/fstab,
který obsahuje seznam všech oddílů, které systém
zná. Seznam se přečte při každém startu systému a všechny vyjmenované oddíly se automaticky připojí. Jednotlivý záznam v tomto konfiguračním souboru má následující formát (pro připojení diskových oddílů přes NFS): host:/NFS_dir
/directory
filesystem
options
fs_freq
fs_passno
Řídící příznak host:/NFS_dir
Funkce Označuje oddíl, který se má připojit (např. othello:/home).
/directory
Určuje, do jakého adresáře se NFS oddíl připojí (např. /mnt/nfs/home). Určuje typ připojovaného souborového systému (např. nfs).
filesystem options
Udává parametry, které se použijí společně s parametrem -o příkazu mount (u síťového souborového systému NFS).
36
fs_freq
Používá se pro potřebu příkazu dump. Udává, jak často je potřeba daný souborový systém zálohovat.
fs_passno
Informuje příkaz fsck o tom, v jakém pořadí se budou jednotlivé souborové systémy při startu kontrolovat. Při startu operačního systému se kontroluje stav všech souborových systémů.
Tabulka 6.3.1. : Tabulka příznaků pro konfigurační soubor /etc/fstab
V předchozí podkapitole jsme vyexportovali pomocí NFS oba adresáře na serveru
othello,
které obsahují uživatelské adresáře. Ty připojíme na klientské
stanici do adresáře /mnt/nfs/. # # /etc/fstab na stanici public.caglan.cz # othello:/home /mnt/nfs/home nfs rsize=8192,wsize=8192 0 0 othello:/mnt/Shomes /mnt/nfs/Shomes nfs rsize=8192,wsize=8192 0 0 # (…)
Parametry
rsize
a
wsize
nastavují velikost bloku dat pro čtení, resp. zápis.
Standardně je nastaveno 1024 bajtů. Často je vhodné nastavení optimalizovat na 8192 bajtů, jako je tomu v našem případě. Před připojením těchto dvou síťových oddílů musíme nejprve oba cílové lokální adresáře vytvořit. Pokud jsou již vytvořeny, tak pro jejich připojení můžeme použít zkrácený zápis příkazu
mount
ve tvaru (tento zápis lze použít jen pro oddíly uvedené v souboru /etc/fstab): [root@public /]# mount /mnt/nfs/home/ && mount /mnt/nfs/Shomes/
Tímto krokem ale ještě celá konfigurace nekončí. Síťové souborové systémy s domovskými adresáři uživatelů se sice podařilo připojit, ale ještě zbývá správně vytvořit symbolické odkazy. První se bude odkazovat na adresář bude vytvořen přímo v kořenovém adresáři jako /mnt/Shomes
a bude ukazovat na adresář
symbolický odkaz zděděný ze serveru
/home.
/mnt/nfs/home/
Druhý bude mít název
/mnt/nfs/Shomes/.
othello (/home/S/)
a
„Originální“
totiž ukazuje na lokálně
neexistující adresář. Jednodušším řešením by možná bylo připojit síťový systém souborů rovnou do adresáře
/mnt/Shomes/.
Oba postupy ale vedou ke stejnému cíli.
Výpisy kořenového adresáře / a adresáře /home/ vypadají následovně:
37
[root@public /]# ll celkem 197 drwxr-xr-x 56 root root 4096 bře 6 15:29 etc lrwxrwxrwx 1 root root 14 zář 3 2003 home -> /mnt/nfs/home/ drwxr-xr-x 2 root root 4096 led 25 2003 initrd # (…) [root@public /]# cd home && ll celkem 100 -rw------1 root root 8192 -rw------1 root root 15360 drwxr-xr-x 3 root root 4096 drwx-----2 root root 16384 drwxr-xr-x 7 root root 4096 -rw------1 root root 16416 -rw------1 root root 43520 lrwxrwxrwx 1 root root 14 drwxr-x--- 34 23 23 4096 drwxr-xr-x 34 root root 4096
bře bře pro zář úno lis lis zář bře pro
6 6 9 21 15 20 20 24 5 13
04:06 04:08 12:11 2002 21:10 11:48 11:48 17:22 11:18 22:24
aquota.group aquota.user export lost+found O quota.group quota.user S -> /mnt/Shomes/S/ squid Z
Z těchto výpisů je zřejmé, že domovské adresáře jsou dostupné pro všechny uživatele bez výjimky. Všechny tři cesty (/home/S/,
/home/Z/
a
/home/O/)
k adresářům jednotlivých uživatelů existují a shodují se přesně s cestou, která je uvedena v jejich záznamech v adresáři LDAP. Nyní už nic nebrání tomu, aby se uživatel k takto nastavené stanici přihlásil, měl k dispozici své osobní nastavení a mohl bez problémů pracovat se svými dokumenty.
6.4. Správa diskových kvót Při správě víceuživatelského systému se nepochybně setkáme s uživateli, kteří dokáží svými soubory zaplnit libovolně velký prostor. Samozřejmě žádný pevný disk nemá nekonečně velkou kapacitu a je potřeba se s těmito uživateli vypořádat. Tato kapitola není hlavním tématem této práce, proto si zde jen v krátkosti popíšeme, jak zapnout podporu diskových kvót a jak nastavit limity pro jednotlivé uživatele. Diskové kvóty se používají velmi často, protože fungují automaticky a o jejich dodržování se stará operační systém sám. Prvním krokem je úprava konfiguračního souboru
/etc/fstab
pro oddíly,
na kterých chceme používat diskové kvóty (změny jsou zvýrazněny tučně). LABEL=/home /dev/sdb2
/home /mnt/Shomes
ext3 ext3
defaults,usrquota,grpquota 1 2 defaults,usrquota,grpquota 1 2
38
Pro diskové kvóty musí být zapnuta podpora v jádře. Poté stačí zapnout kvótu příkazem
quotaon
quota.user
a
-uvga
a příkazem
quota.group
quotacheck
-uvga
se vytvoří soubory
na každém oddílu se zapnutými kvótami. V tomto
okamžiku je možné si prohlédnout obsazení disku jednotlivými uživateli příkazem repquota -uvga.
Dalším krokem je editace velikosti kvót jednotlivých uživatelů. To
lze zajistit buď jednotlivě příkazem edquota -p vzor *.
edquota uzivatel,
nebo hromadně příkazem
A tady s výhodou využijeme naše rozdělení uživatelských
adresářů do podadresářů. Nastavíme kvótu pro jednoho uživatele a pak jedním příkazem pro všechny ostatní. [root@othello /]# edquota hartman Disk quotas for user hartman (uid 1304): Filesystem blocks soft hard /dev/sda2 56584 75000 75000 /dev/sdb2 0 0 0
inodes 603 0
soft 0 0
hard 0 0
V tomto konkrétním případě jsou oba limity nastaveny na stejnou hodnotu 75 MB. Tato hodnota je maximální prostor, který může uživatel na daném oddílu svými soubory zabírat. Tento limit je nepřekročitelný i v systému Windows. Uživatel si může zjistit obsazené místo příkazem
quota uzivatel
nebo v systému
Windows ve vlastnostech svého domovského disku H:\. Pokud tento limit chceme nastavit pro všechny zaměstnance, tak se jednoduše přepneme do adresáře s jejich domovskými adresáři (/home/Z/) a spustíme příkaz kontrolu použijeme příkaz repquota [root@othello /]# mgutvirthova -zhuckova -hkalacova -# (…) svoboda -sedivy --
–uvga.
edquota -p hartman *.
Zde je vidět část výpisu:
repquota -uvga 55600 75000 12084 75000 120 75000
75000 75000 75000
667 585 15
0 0 0
0 0 0
30976 30928
35000 35000
835 1416
0 0
0 0
35000 35000
Pro
Pro studenty nastavíme kvóty stejným způsobem, jen s tím rozdílem, že jejich limit je pouze 35 MB a bude nastaven u jiného diskového oddílu než v případě zaměstnanců. Na serveru NFS ještě spustíme démona
rpc.quotad,
který zajišťuje
rozhraní mezi NFS a správcem kvót. Na uživatele se tak budou vztahovat stejná omezení bez ohledu na to, zda k datům přistupují přes NFS nebo ne.
39
7. Konfigurace Samby Klíčem ke konfiguraci Samby je jediný konfigurační soubor s názvem /etc/samba/smb.conf.
V dalších kapitolách si ukážeme, jak lze pomocí něj Sambu
jednoduše nastavit.
7.1. Použití nástroje SWAT Místo ručního editování parametrů v tomto souboru můžeme použít nástroj SWAT (Samba Web Administration Tool), který je součástí instalace Samby. Jedná se o velmi užitečný nástroj pro konfiguraci Samby. Jednou z jeho slabých stránek je odstranění veškerých komentářů z konfiguračního souboru a tím zhoršení jeho čitelnosti. SWAT je ve své podstatě démon, který je spouštěn pomocí superserveru xinetd.
Nesmíme proto zapomenout tento superserver spustit na počítači, který
funguje jako server Samba. Nejprve povolíme spouštění démona SWAT přes superserver
xinetd
a v jeho konfiguračním souboru určíme, ze kterých stanic
k němu bude povolen přístup (změny jsou zvýrazněny tučně). [root@othello /]# chkconfig swat on && chkconfig --list|grep swat swat: on [root@othello /]# # (…) disable = port = only_from server = # (…)
less /etc/xinetd.d/swat no 901 = 127.0.0.1 192.168.1.0/24 /usr/sbin/swat
Konfigurační soubor služby SWAT nalezneme v adresáři
/etc/xinetd.d/.
Ve výchozím nastavení je tento nástroj zakázán a přístup k němu povolen jen z počítače, kde běží Samba lokálně. Změnou proměnné disable z hodnoty no na yes a připsáním rozsahu IP adres celé lokální sítě bude možné Sambu konfigurovat z jakéhokoli počítače v síti přes webové rozhraní.
40
Spuštění nástroje SWAT není nic složitého. Do oblíbeného prohlížeče stačí napsat adresu
http://othello.caglan.cz:901/
a zadat heslo uživatele root. Číslo
901 v URL (Uniform Resource Locator) adrese znamená port, na kterém jsou očekávány naše požadavky. Na obrázku 7.1.1. je ukázka prostředí nástroje SWAT v prohlížeči Internet Explorer, skládající se z několika hlavních sekcí HOME, GLOBALS, SHARES, PRINTERS, STATUS, VIEW a PASSWORD.
Obrázek 7.1.1. : Prostředí konfiguračního nástroje SWAT
Pomocí tohoto rozhraní je konfigurace Samby velice snadná a přehledná. Celý
postup
nejprve
/etc/samba/smb.conf
vysvětlíme
přímo
na
konfiguračním
souboru
a poté použijeme tento nástroj pro jeho kontrolu. V případě
nejasností můžeme nahlédnout do dokumentace, která je v sekci HOME tohoto rozhraní přístupná ve formátu HTML.
41
7.2. Konfigurace Samby jako PDC Naším cílem je nakonfigurovat server Samba jako Primary Domain Controller (PDC) pro Microsoft Windows NT doménu s názvem CAG a s databází uživatelů uloženou v LDAP serveru. Sambu nastavíme tak, aby uživatele hledala v adresáři LDAP a ne ve svém lokálním souboru s hesly. To je relativně jednoduchá procedura a pokud správně funguje komunikace se serverem LDAP nesetkáme se zde s žádným problémem. V krátkosti si připomene základní fakta. Všechny počítače se nacházejí ve stejné síti 192.168.1.0/24. Doména, pro kterou bude server Samba poskytovat autentizaci a autorizaci uživatelů se jmenuje CAG a NetBIOS jméno serveru je OTHELLO. Server bude sloužit také jako místní hlavní prohlížeč (local master browser) a server WINS. Profil má každý uživatel uložen ve svém domovském adresáři v podadresáři
profile.
Po přihlášení uživatele se spustí přihlašovací skript,
jehož jméno je uvedeno v atributu scriptPath v jeho záznamu na serveru LDAP. Struktura konfiguračního souboru Samby je velmi podobná INI souborům ve Windows. Jména uvnitř hranatých závorek vymezují jednotlivé sekce konfiguračního souboru. [global] (…) [homes] (…) [printers]
Všechny sekce, s výjimkou sekce
[global],
budou klientům dostupné jako
disková sdílení nebo sdílení tiskáren. Zbývající řádky pod názvem každé sekce obsahují jednotlivá nastavení, která jsou platná pro dané sdílení. Tato nastavení pokračují, dokud není v souboru obsažena jiná sekce nebo dokud není dosaženo konce souboru. Každé nastavení má jednoduchý formát
nastavení=hodnota.
Všechny mezery v příslušné hodnotě pro nastavení jsou významné. Mezery nejsou významné v názvech proměnných (guest
ok
je stejné jako
guestok).
Pro oddělení
seznamu hodnot v nastavení je možné použít mezery nebo čárky. Samba nerozlišuje velká a malá písmena, pozor však musíme dát při nastavení cest ke sdílením, kde je
42
velikost písmen pro operační systém Linux podstatná. Do konfiguračního souboru můžeme vkládat také komentáře, za které se považuje každý řádek, který začíná znakem „#“ nebo „;“ (oba znaky jsou rovnocenné). Samba také obsahuje celou řadu proměnných. Jméno každé proměnné začíná znakem „%“ a seznam základních proměnných obsahuje tabulka 7.2.1. . Proměnná %u %v %H %h %L %I %T
Popis Uživatelské jméno. Verze Samby. Domovský adresář uživatele %u. Jméno stroje, na kterém Samba běží. NetBIOS jméno serveru. IP adresa klienta. Aktuální datum a čas.
Tabulka 7.2.1. : Seznam základních proměnných serveru Samba
Sekce [global] se objevuje téměř v každém konfiguračním souboru, i když je její použití nepovinné. Všechna nastavení z této sekce se použijí pro všechna sdílení tak, jako by byla přímo součástí každé sekce s nastaveními jednotlivých sdílení. Následující sekce mohou obsahovat stejná nastavení s jinou hodnotou. V tomto případě má hodnota přímo
v
sekci
přednost
před hodnotou uvedenou
v sekci [global]. # # /etc/samba/smb.conf # [global] # SAMBA-LDAP configuration ldap suffix = dc=CAG,dc=CZ ldap admin dn = cn=Manager,dc=CAG,dc=CZ ldap port = 389 ldap server = 127.0.0.1 ldap ssl = no client code page = 852 character set = ISO8859-2 netbios name = OTHELLO add user script = /usr/local/sbin/smbldap-useradd.pl -w %u # workgroup = NT-Domain-Name or Workgroup-Name workgroup = CAG # server string is the equivalent of the NT Description field
43
server string = Samba-LDAP PDC Server (%v) (…) passwd program =/usr/local/sbin/smbldap-passwd.pl -o %u passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
Celý soubor
smb.conf
naleznete v příloze. V první části je definováno
připojení k serveru LDAP. DN administrátora zde musí být uvedeno stejně jako proměnná
rootdn
v souboru
/etc/openldap/slapd.conf
včetně mezer. Tento účet
použije Samba při zápisu nebo změnách záznamů v adresáři LDAP, tedy například při změně hesla ze systému Windows nebo vytvoření důvěryhodného účtu (tzv. trusted account) stanice při jejím prvním přihlášení do domény. Server LDAP běží na stejném počítači jako Samba, proto můžeme jako jeho adresu použít localhost
nebo
127.0.0.1
. Pokud by server LDAP běžel vzdáleně, je lepší použít
IP adresu než DNS jméno serveru. Ke komunikaci se serverem LDAP nepoužíváme zabezpečení SSL, proto požadavky odesíláme na nezabezpečený port číslo 389. Proměnná „client code page“ určuje kódovou stránku klienta (kódová stránka CP852) a proměnná „character set“ nastavuje převádění z kódové stránky DOSu 850 na ISO8859-2 (střední a východní Evropa). Název domény CAG určuje hodnota proměnné „workgroup“. NetBIOS jméno serveru je OTHELLO a jeho popis Samba-LDAP PDC Server (%v), kde se do závorky automaticky doplní aktuální verze Samby. Nakonec definujeme, jaký program se použije pro změnu hesla a jak se s ním bude komunikovat. Proměnná „add user script“ obsahuje cestu k programu pro přidání důvěryhodného účtu do adresáře LDAP. Po
sekci
[global]
z nejdůležitějších je sekce
následují
[homes],
sekce
jednotlivých
sdílení.
Jednou
která obsahuje nastavení domovských adresářů
uživatelů. Tento adresář bude po přihlášení přimapován jako uživatelský disk H:\. Do tohoto adresáře bude mít přístup pouze uživatel, který je jeho vlastníkem. [homes] comment = Home Directories browseable = no writable = yes valid users = %S create mode = 0700 directory mode = 0700
44
Pokud chceme používat dávkové soubory, které se spustí po každém úspěšném přihlášení uživatele, musíme definovat ještě sdílení
[netlogon].
V sekci
[global]
nalezneme proměnnou „netlogon script“, která obsahuje název souboru, který bude spuštěn po přihlášení. Tento soubor se ovšem použije jen v případě, pokud hodnota atributu scriptPath v záznamu uživatele není definována nebo tento atribut chybí. [netlogon] comment = Network Logon Service path = /etc/samba/netlogon guest ok = yes writable = no
Pro příklad si zde uvedeme ukázku jednoduchého přihlašovacího skriptu s názvem startup.cmd. Tento skript přimapuje domovský adresář uživatele jako disk H:\ a jako disk S:\ se přimapuje sdílení sas na počítači jana. [hartman@othello /]# less /etc/samba/netlogon/startup.cmd echo Mapping Network Drives to Samba Server Othello... net use h: /home net use s: \\jana\sas
Po prvním přihlášení každé stanice do domény se pro ni automaticky vytvoří důvěryhodný účet v serveru LDAP. Aby Samba mohla tyto záznamy automaticky vytvářet, potřebuje znát heslo administrátora pro server LDAP, které se neukládá do konfiguračního souboru Samby, ale rovnou do databázových tdb souborů. Následujícím příkazem se vytvoří soubor s názvem ve standardní instalaci umístěn v adresáři
/etc/samba/.
secrets.tdb,
který je
Heslo se musí shodovat
s heslem administrátora uvedeným v souboru /etc/openldap/slapd.conf. [root@othello /]# smbpasswd -w tajneheslo
Nyní je Samba nakonfigurována a může sloužit jako PDC k ověřování uživatelů v doméně. Ještě před spuštěním Samby raději zkontrolujeme konfigurační soubor příkazem testparm, a pokud je v pořádku Sambu spustíme. [root@othello /]# testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[netlogon]" Loaded services file OK.
45
Press enter to see a dump of your service definitions [root@othello /]# service smb start Starting SMB services:
[
OK
]
7.3. Přihlášení Windows do domény Předtím než začneme přihlašovat stanice s operačním systémem Windows 2000 a XP do domény, musíme ještě vytvořit „falešného“ uživatele root (uid=0 a gid=0). Uživatel je „falešný“ v tom smyslu, že pravý superuživatel není uložen v adresáři LDAP, ale v systémových souborech. Tento superuživatel bude používán pro připojení nových stanic do domény, aby mohl být vytvořen důvěryhodný účet jednotlivých stanic. Uživatele root vytvoříme následujícími příkazy: [root@othello /]# smbldap-useradd.pl -a -d "/root" root \ > smbldap-usermod.pl -u 0 -g 0 root && smbldap-passwd.pl root
Konfigurace
klientských
stanic s operačním systémem Windows je stejně snadná jako konfigurace Samby na straně Linuxu.
Jediným
problémem
může být nutná úprava registrů před prvním přihlášením do domény
na
každé
stanici.
Úpravy jsou nutné ve všech verzích
operačního
systému
Windows. Postup si konkrétně ukážeme
na
Windows XP.
V ostatních verzích je postup stejný, jen se mění jiné hodnoty Obrázek 7.3.1. : WINDOWS – přihlášení do domény
v registrech. Jsou dvě možnosti,
jak změnit registry, aby se dalo do domény přihlásit. První je ruční nastavení proměnné druhou
RequireSignOrSeal
je
použít
v registrech pomocí nástroje
připravený
soubor
46
v
distribuci
regedit
na hodnotu
Samby
s
0
a
názvem
WinXP_SignOrSeal.reg.
V prostředí Windows XP ho stačí jednoduše importovat
do registrů a on provede potřebné změny automaticky. Kliknutím na tlačítko „Změnit…“ ve vlastnostech systému na kartě „Název počítače“ se zobrazí dialogové okno, které je ukázáno na obrázku 7.3.1. . V tomto okně jednoduše vyplníme název domény (pozor na velikost písmen) a potvrdíme tlačítkem OK. Systém nás vyzve k zadání hesla (obrázek 7.3.2.) uživatele root. Jedná se o superuživatele, který je uložen v adresáři LDAP. Po ověření správnosti údajů server Samba vytvoří pro tuto stanici důvěryhodný účet v adresáři a zobrazí uvítací okno, potvrzující správné přihlášení (obrázek 7.3.3). Po restartu systému Windows je stanice v doméně a můžeme zkusit přihlásit uživatele.
Obrázek 7.3.2. : Okno pro zadání hesla uživatele root
47
Obrázek 7.3.3. : Úspěšné přihlášení
8. Správa uživatelů a jejich nastavení K základním operacím s uživatelskými účty použijeme skripty z balíku smbldap-tools, které jsou všechny navrženy pro použití z příkazového řádku. Pokud bychom chtěli ke správě uživatelů využívat příjemnější prostředí, můžeme si ze stránek autorů tohoto balíku stáhnout modul s názvem
idxldapaccounts
[www.idealx.org/prj/webmin/] pro Webmin [www.webmin.com]. Webmin je systém pro správu Linuxu přes webové rozhraní a použitelný je ve všech prohlížečích, které podporují tabulky, rámce a pro některé moduly je nutná i podpora Javy. Tato možnost je výhodná zejména v systémech, kde se již Webmin používá. V našem případě si vystačíme s výše jmenovaným balíkem skriptů a určitým zjednodušením bude vlastní webové rozhraní, které je popsáno v kapitole 9.
8.1. Správa uživatelů pomocí smbldap-tools V serveru LDAP jsou uloženy záznamy pro uživatele systému Windows i Linux. Uživatelé Windows musí být zároveň vedeni jako uživatelé Linuxu, avšak obráceně to neplatí. Uživatel Linuxu nemusí být nutně uživatel systému Windows. Přihlášení takového uživatele na stanici s operačním systémem Windows skončí chybou. Pro lepší představu si zde ukážeme nejprve LDIF výpis uživatele Linuxu a poté Windows: dn: uid=unix,ou=Users,dc=CAG,dc=CZ o: Anglo-Czech High School objectClass: inetOrgPerson objectClass: posixAccount cn: unix sn: unix uid: unix mail:
[email protected] ou: other uidNumber: 1359 gidNumber: 100 homeDirectory: /home/unix loginShell: /bin/bash gecos: Unix Account description: Unix Account userPassword:: e1NTSEF9S2NuYnpHVVViZENUOEt6WjBrcU93U25HTWVqNHUwUVY=
48
V záznamu jsou vidět pouze dvě třídy objektů (inetOrgPerson a PosixAccount).
Tyto třídy bude obsahovat i záznam pro uživatele systému Windows,
ale zároveň k nim ještě přibude třída třetí (sambaAccount), což je patrné z následujícího LDIF výpisu: dn: uid=windows,ou=Users,dc=CAG,dc=CZ o: Anglo-Czech High School cn: windows sn: windows uid: windows mail:
[email protected] ou: other uidNumber: 1361 gidNumber: 100 homeDirectory: /home/windows loginShell: /bin/bash gecos: Samba Account description: Samba Account objectClass: inetOrgPerson objectClass: posixAccount objectClass: sambaAccount pwdLastSet: 0 logonTime: 0 logoffTime: 2147483647 kickoffTime: 2147483647 pwdCanChange: 0 pwdMustChange: 2147483647 displayName: Samba Account acctFlags: [UX] rid: 3722 primaryGroupID: 1201 homeDrive: H: smbHome: \\OTHELLO\homes profilePath: \\OTHELLO\homes\profile scriptPath: windows.cmd lmPassword: 7DABB104AB058D91AAD3B435B51404EE ntPassword: C889C75B7C1AAE1F7150C5681136E70E userPassword:: e1NTSEF9bTNKd1VJVG85cUlURXRkR2RuV0RBcnRsQzhDY3d6dDc=
Nahlédnutím do zdrojového souboru skriptu pro přidání uživatele zjistíme, jak se tento uživatel systému Windows vytváří. Nejprve se vytvoří atributy pro uživatele systému Linux a až poté atributy potřebné pro Windows. V tabulce 8.1.1. je uveden seznam nejdůležitějších atributů uživatelského účtu s jejich stručným popisem. Atribut cn uid description userPassword
Popis a použití Nejčastěji uživatelské jméno nebo celé jméno uživatele. Uživatelské jméno. Popis uživatele (oddělení, funkce, apod.). Heslo pro systém Linux (ověření přes PAM).
49
uidNumber gidNumber loginShell gecos homeDirectory pwdLastSet
Identifikační číslo uživatele (Linux). Identifikační číslo skupiny (Linux). Příkazový řádek v linuxovém systému. Celé jméno uživatele. Domovský adresář uživatele. Počet vteřin od roku 1970, kdy byla naposledy změněna hesla LAN Manager a NT. logonTime Nepoužívá se. logoffTime Nepoužívá se. (tzv. „magic number“ = 2147483647) pwdCanChange Nepoužívá se. pwdMustChange Nepoužívá se. (tzv. „magic number“ = 2147483647) acctFlags Příznaky uživatelského účtu. rid Relativní identifikační číslo uživatele. primaryGroupID Relativní číslo skupiny uživatele. smbHome Specifikuje cestu k domovskému adresáři uživatele. Hodnota musí být uvedena jako síťová UNC cesta. scriptPath Specifikuje cestu k přihlašovacímu skriptu uživatele (*.CMD, *.EXE nebo *.BAT). Cesta je relativní vzhledem ke sdílení [netlogon]. lmPassword Heslo LAN Manager. ntPassword Heslo NT (MD4 hash). homeDrive Písmeno jednotky, která se přimapuje jako domovský adresář uživatele, uvedený v atributu smbHome. profilePath Cesta k profilu s nastavením pro Windows. Hodnota musí být zadána jako UNC nebo absolutní lokální cesta. Tabulka 8.1.1. : Vybrané atributy uživatelského účtu
Hodnota atributu
uidNumber
se použije první volná, tj. o jednotku vyšší než je
u naposledy přidaného uživatele. Atribut gidNumber je číslo skupiny, které je uživatel členem v systému Linux. Hodnoty atributů
rid
a
primaryGroupID
se počítají podle
následujících rovnic: rid = 2 x uidNumber + 1000 primaryGroupID = 2 x gidNumber + 1001 Výpočet se neprování u známých čísel skupin uživatelů jako jsou například DOMAIN_USER_RID_ADMIN, DOMAIN_USER_RID_GUEST a další. Čísla skupin (primaryGroupID) a uživatelů (rid) se uvádí v desítkovém vyjádření, ale ve starších verzích Samby se můžeme ještě setkat s vyjádřením šestnáctkovým. Skripty z balíku smbldap-tools tato čísla ve výchozím nastavení ukládají desítkově a
50
pro starší verze Samby je nutné při vytváření uživatele použít příslušnou volbu pro šestnáctkové vyjádření. Zašifrovaná podoba hesla LAN Manager (lmPassword) je hexadecimální sekvence, která reprezentuje heslo používané u klientů se systémy Windows 95 a 98. Je tvořena zašifrováním řetězce KGS!@#$% pomocí 56 bitového algoritmu DES s využitím uživatelského hesla jako klíče (zarovnaného na délku 14 bajtů a převedeného na velké znaky). Zašifrovaná podoba hesla Windows NT (ntPassword) je také hexadecimální sekvence, ale je používána na klientech se systémy na bázi Windows NT (Windows NT, Windows 2000 a Windows XP). Tato sekvence je tvořena zašifrováním uživatelského hesla algoritmem MD4. Heslo v tomto případě není před šifrováním převáděno na velké znaky. Heslo pro systém Linux (userPassword) může být zašifrováno jedním z šifrovacích algoritmů crypt, md5 nebo sha. Konkrétně použitý algoritmus vždy zašifrované podobě hesla ve složených závorkách předchází (např. userPassword:
{crypt}X5/DBrWPOQQaI).
Příznaky uživatelského účtu jsou uloženy jako atribut acctFlags. Tato položka se sestává z 11 znaků mezi dvěma hranatými závorkami ([]). Mezi závorkami se mohou v libovolném pořadí vyskytovat znaky uvedené v tabulce 8.1.2., které jsou doplněny do délky 11 znaků mezerami (např. acctFlags: Příznak U
])
[U
:
Popis Standardní uživatelský účet.
D
Tento účet je zakázán a Samba nepovolí přihlášení.
N
Tento účet neobsahuje žádné heslo.
W
Toto je důvěryhodný účet pracovní stanice, který se používá pro konfigurování Samby jako PDC.
Tabulka 8.1.2. : Příznaky uživatelského účtu
V konfiguračním souboru Samby smb.conf určuje proměnná „netlogon script“ (viz kapitola 7.2.), jaký bude zpracován přihlašovací skript po přihlášení uživatele. Cestu k tomuto souboru může ovšem obsahovat i atribut
scriptPath
v záznamu
LDAP, který má v tomto případě přednost. Pokud tento atribut v záznamu není nebo
51
obsahuje
prázdný
řetězec,
bude
zpracován
přihlašovací
skript
uvedený
v konfiguračním souboru Samby. Přidání nového uživatele Pro přidání nového uživatele pro systémy Windows nebo Linux slouží skript s názvem
smbldap-useradd.pl.
V tabulce 8.1.3. jsou uvedeny některé z jeho
nejdůležitějších možností. Pokud žádné volby nepoužijeme, automaticky se doplní výchozí hodnoty proměnných z konfiguračního souboru
smbldap_conf.pm
balíku
smbldap-tools. Jaké hodnoty se použijí je uvedeno ve čtvrtém sloupci tabulky 8.1.3. . Volba
Popis
Příklad
-u
Vytvoří uživatele Windows. (jinak uživatele Linuxu) ID uživatele.
-u 1003
-g -d
ID skupiny uživatele. Uživatelský adresář.
-g 100 -d /home/O/user
-s -c -e -m
Příkazový řádek. -s /bin/ksh $_userLoginShell Popis uživatele. -c „David Hartman“ $_userGecos Třída studenta. -e „Prima“ $userDepartment Vytvoří uživatelský adresář a zkopíruje /etc/skel/
-a
Výchozí hodnota
$_defaultUserGid $_userHomePrefix
Tabulka 8.1.3. : Možnosti skriptu smbldap-useradd.pl
Uživatel systému Windows musí být zároveň uživatelem systému Linux. Můžeme mu ovšem zakázat, nastavením neexistujícího příkazového interpretu, se k tomuto systému přihlásit. Příkazový interpret je první program, který je po přihlášení v prostředí Linux spuštěn a ve většině případů to je Bourne Shell (/bin/bash). Seznam příkazových interpretů je uložen v souboru Příkaz pro vytvoření uživatele s uživatelským jménem
winuser
/etc/shells.
systému Windows,
který má svůj domovský adresář uložen v /home/O/winuser, navštěvuje třídu Kvinta a má zakázáno se přihlásit k linuxovým strojům vypadá následovně: [root@othello /]# smbldap-useradd.pl -a -d "/home/O/winuser/" \ > -e "Kvinta" -m -s "/bin/false" -c "User for WIN" winuser
52
Naopak uživatele, který bude moci využívat pouze stanice s operačním systémem Linux, vytoříme takto: [root@othello /]# smbldap-useradd.pl -m \ > -d "/home/O/linuxonly" -c "User for LINUX" linuxonly
Změna hesla uživatele Předchozí příkazy vytvoří pro uživatele
winuser
a
linuxonly
záznamy
v adresáři LDAP a jejich domovské adresáře. Uživatelé se nemohou přihlásit, dokud nebudou definovány v jejich záznamech hodnoty atributů a
userPassword.
Je možné uložit různá hesla pro Linux (atribut
pro Windows (atributy změnu hesla
ntPassword, lmPassword
ntPassword
smbldap-passwd.pl
a
lmPassword).
userPassword)
a
Tuto možnost ovšem skript pro
nepodporuje a museli bychom udělat příslušné
změny v jeho zdrojovém kódu. Při změně hesla předáme skriptu pouze uživatelské jméno uživatele a on nás vyzve k zadání nového hesla. [root@othello /]# smbldap-passwd.pl winuser Changing password for winuser New password : Retype new password : all authentication tokens updated successfully
Každá stanice v doméně s operačním systémem Windows musí mít vytvořen v adresáři LDAP důvěryhodný účet. V kapitole 7.2. jsme do konfiguračního souboru Samby jako hodnotu proměnné „add user script“ nastavili cestu ke skriptu pro přidání uživatele a tyto důvěryhodné účty by se měly vytvářet automaticky vždy při prvním přihlášením pracovní stanice do domény. Tento účet lze vytvořit i ručně z příkazového řádku, ale tuto možnost příliš nevyužijeme. V adresáři LDAP se tyto účty ukládají do
ou=Computers,dc=CAG,dc=CZ.
Důvěryhodný účet v adresáři
poznáme tak, že „uživatelské jméno“ začíná znakem „$“ a jeho příznak začíná písmenem W (např. acctFlags:
]).
[W
Zrušení uživatelského účtu Ke zrušení účtu uživatele slouží skript
smbldap-userdel.pl.
Tento skript má
jen jednu možnou volbu (-r) a tou je zrušení uživatele i s jeho domovským
53
adresářem. Pro ilustraci si ukážeme, jak zrušíme účet uživatele
winuser
včetně jeho
domovského adresáře: [root@othello /]# smbldap-userdel.pl -r winuser
Změna záznamu uživatele Informace uživatele v serveru LDAP můžeme kdykoli změnit pomocí skriptu s názvem
smbldap-usermod.pl.
Tento skript má podobné použití jako skript
pro přidání nového uživatele. V úvodu kapitoly 7.3. jsme přidávali do adresáře uživatele root. Při jeho vytváření jsme nemohli číslo uživatele (UID=0) a skupiny (GID=0) zadat, protože skript pro přidání by zahlásil chybu, že uživatel s tímto UID v systému již existuje. Nechali jsme proto skript zvolit UID a GID automaticky a dalším příkazem jsme v záznamu tohoto uživatele obě čísla změnili na hodnotu „0“. Kromě těchto čtyř základních skriptů obsahuje tento balík i další, jako například skripty pro práci se skupinami, výpis LDIF nebo zálohu všech uložených záznamů.
8.2. Uživatelské profily a jejich nastavení Vytvořit uživatelům příjemné pracovní prostředí v systému Linux je mnohem jednodušší a přehlednější než v systému Windows. Každému novému uživateli se jeho domovský adresář s nastavením jednoduše vytváří zkopírováním obsahu adresáře
/etc/skel/.
Správce systému může vhodnou úpravou konfiguračních
souborů v tomto adresáři vytvořit pracovní prostředí všech uživatelů. Operační systém Windows také umožňuje změny nastavení uživatelského prostředí, ale postup je trochu komplikovanější. Uživatelské prostředí systému Linux se vytváří zároveň s domovským adresářem každého uživatele. V systému Windows až po jeho prvním přihlášení ke stanici. Adresář s výchozím nastavením pro uživatele systému Windows je lokálně uložen v
C:\Documents and Settings\Default User,
což znamená dělat jeho
úpravy na každé stanici zvlášť. Při větším počtu pracovních stanic to je nevýhodné a
54
raději bychom chtěli mít tento adresář uložen přímo na serveru. Systém Windows při hledání adresáře s výchozím nastavením nejprve hledá adresář s názvem „Default User“ ve sdílení [netlogon], a pokud ho nenalezne použije lokálně uložený. Všechny konfigurační soubory uživatele se ukládají do jeho profilu. Při každém přihlášení se tento profil přenese ze serveru na stanici a po odhlášení zase zpět. Windows se dají nakonfigurovat tak, aby se profil ze serveru nestahoval a pracovalo se s ním přímo na serveru. To by ale příliš zatěžovalo síť. Ukládáním všech souborů uživatele (hlavně dokumentů) se velikost adresáře s profilem neúměrně zvětšuje a přihlášení ke stanici trvá déle. Zkrátit dobu přihlašování znamená zmenšit velikost profilu. Přesměrujeme proto adresář s dokumenty z %USERPROFILE%\Dokumenty\
do adresáře
H:\Documents\.
K dokumentům bude moci
uživatel přistupovat přes sdílení svého domovského adresáře a systém Windows mu vždy nabídne pro uložení dokumentu právě tento adresář. Pro přesměrování adresářů můžeme použít konfigurační nástroj
gpedit.msc
(group policy editor), který ovšem
nabízí přesměrování jen některých adresářů. Cesty ke všem adresářům můžeme změnit přímo v registrech pomocí nástroje regedit.
Obrázek 8.2.1. : REGEDIT – úprava registru HKEY_CURRENT_USER \Software\Microsoft\Windows \CurrentVersion\Explorer\User Shell Folders
55
Ve výše uvedeném klíči registru změníme pomocí nástroje u položky „Personal“ na
H:\Documents
regedit
hodnotu
(viz obrátek 8.2.1.). Tento klíč obsahuje
seznam všech adresářů, které lze přesměrovat. Adresář H:\Documents musí existovat, a abychom ho nemuseli pro každého uživatele vytvářet ručně, stačí ho vytvořit v adresáři
/etc/skel/.
Adresář s názvem Dokumenty v profilu uživatele bude sice
pořád cestovat ze serveru na stanici a zpět, ale nebude obsahovat žádné soubory. V profilu zůstanou nastavení pro prostředí Windows a programy, která ovšem nezabírají příliš místa. Adresáře
Local Settings, History, Temp
a další zůstávají
uloženy lokálně na každé stanici, i když se nacházejí v adresáři profile. Seznam adresářů, které se nepřesouvají na server je uložen v následujícím klíči registru: HKEY_CURRENT_USER\ Software\Microsoft\Windows NT\ CurrentVersion\Winlogon “ExcludeProfileDirs“ = “Local Settings;Temporary Internet Files;History;Temp“
Abychom měli výchozí profil uložen v adresáři „Default User“ na serveru ve sdílení
[netlogon],
stačí se na čistě nainstalovaném systému Windows přihlásit
jako doménový administrátor, udělat příslušné změny v registrech a odhlásit se. Po odhlášení se na serveru v domovském adresáři tohoto uživatele vytvoří adresář profile
s jeho nastavením. Soubory z něj stačí jednoduše zkopírovat do adresáře
„Default User“ sdílení
[netlogon] (/etc/samba/netlogon/Default User/).
Pokud
ještě neexistuje výchozí nastavení ve sdílení [netlogon] je lokální nastavení použito pro každého nově přihlášeného uživatele ke stanici a změny každého z nich se ukládají do tohoto lokálního profilu. Na server se uloží až po jeho odhlášení. Pro každého následujícího uživatele se použije nastavení změněné uživatelem, který se přihlásil před ním. Vlastníkem souborů výchozího nastavení v adresáři /etc/samba/netlogon/Default User/
je uživatel root a uživatelé mají práva
pro jejich čtení a spouštění.
56
9. WWW rozhraní pro správu uživatelů V předchozí kapitole jsme popsali práci s uživatelskými účty pomocí skriptů z balíku smbldap-tools. Nyní se v krátkosti seznámíme s API rozhraním pro práci se záznamy LDAP ve skriptovacím jazyce PHP (PHP Hypertext Preprocessor) a jako příklad uvedeme skript pro změnu hesla. Podobným způsobem je naprogramováno i celé webové rozhraní pro správu uživatelů, které kromě nejdůležitějších operací s uživatelskými účty obsahuje i některé další funkce, které skripty z příkazového řádku nepodporují (např. přidání fotografie). Podrobně je zde rozebrán jen skript pro změnu hesla a všechny ostatní zdrojové kódy naleznete na přiloženém CD.
9.1. SUDO (propůjčování identifikace) Některé skripty v našem webovém rozhraní jsou jen formuláře, které zkontrolují zadaná data a spustí příslušný skript podobně jako v případě správy uživatelů z příkazového řádku. Tyto skripty může ale spouštět pouze uživatel root, a proto musíme povolit pomocí nástroje
sudo
uživateli apache, pod kterým běží
stejnojmenný webový server, spouštět skripty z balíku smbldap-tools jako superuživatel. Program /etc/sudoers,
sudo
nejprve porovná uživatele a požadovanou akci se souborem
kde je uložen seznam oprávněných uživatelů a rozsah jejich
pravomocí. V případě, že je žadatel „shledán způsobilým“, je požádán o zadání svého hesla a teprve až poté je jím požadovaná akce skutečně provedena. V případě, že uživatel nebo jeho požadavek neprojdou sítem souboru
/etc/sudoers,
je o všem
informován administrátor prostřednictvím log souborů. Konfigurační soubor může editovat pouze uživatel root a jen pomocí nástroje visudo.
Pro lepší orientaci v tomto souboru je dobré vytvořit aliasy pro jednotlivé
příkazy (je nutné uvádět celou cestu) a ty pak použít v sekci pro určení práv uživatelů, jak je ukázáno na zkráceném výpise (celý soubor je opět v příloze):
57
# Host alias specification Host_Alias OTHELLO = 127.0.0.1, 192.168.1.1 # Cmnd alias specification Cmnd_Alias AU = /usr/local/sbin/smbldap-useradd.pl Cmnd_Alias DU = /usr/local/sbin/smbldap-userdel.pl # User privilege specification apache OTHELLO = AU, DU
Uživatel apache může spouštět skripty pro přidání a mazání uživatele jako superuživatel root. Před každým spuštěním musí zadat své heslo a tyto příkazy mohou být spuštěny jen ze serveru OTHELLO. Jedná se zde o heslo uživatele apache, nikoli superuživatele root. Zadání hesla (před spuštění skriptu) z příkazové řádku je jednoduché, ale problém nastane při jeho zadávání z prostředí PHP, kde příkazový řádek není k dispozici. Tento problém se dá vyřešit jednoduchou fintou pomocí příkazu
echo,
který zřetězíme s příkazem sudo takto: bash-2.05a$ echo tajneheslo | sudo -v –S Password:
Program
sudo
sice vypíše dotaz na heslo, ale automaticky si ho doplní. Tímto
způsobem budeme ověřovat uživatele apache před spuštěním skriptů ze zdrojových kódů PHP. Nyní je uživatel ověřen a může po určitou dobu spouštět vybrané skripty jako superuživatel root. Po uplynutí této doby se musí znovu ověřit heslem. Seznam povolených skriptů pro uživatele apache získáme následujícím příkazem: bash-2.05a$ sudo –l User apache may run the following commands on this host: (root) /usr/local/sbin/smbldap-useradd.pl (root) /usr/local/sbin/smbldap-userdel.pl
9.2. Konfigurace webového serveru Apache Webové rozhraní je přístupné pouze přes zabezpečený protokol https a vždy je požadováno ověření uživatele. K rozhraní se může přihlásit jen uživatel admin, který má své heslo uloženo v
/etc/httpd/conf/passwd .
Jeho heslo je shodné s heslem
administrátora záznamů LDAP a uživatele apache. Po přihlášení k webovému
58
rozhraní je jeho heslo přístupné přes proměnnou $PHP_AUTH_PW a není proto nutné ho nikde ve zdrojových kódech uvádět. Kdykoli budeme potřebovat ověřit uživatele apache programem
sudo
nebo administrátora LDAP pro zápis dat do adresáře
použijeme hodnotu této proměnné jako heslo. Pro větší bezpečnost je přístup k rozhraní povolen jen z některých důvěryhodných počítačů. Ukázka konfigurace adresáře s webovým rozhraním ze souboru /etc/httpd/conf/httpd.conf:
SSLrequireSSL AllowOverride None AuthName "..:: LDAP Admin ::.." AuthType Basic AuthUserFile /etc/httpd/conf/passwd require valid-user order deny,allow deny from all allow from uc-poc.cag.cz uc-poc.caglan.cz
9.3. Práva k záznamům LDAP Nakonfigurovali jsme webový server Apache, povolili uživateli apache spouštět vybrané skripty a ještě zbývá správně určit přístupová práva k jednotlivým atributům v záznamech LDAP. Ve výchozím nastavení mohou záznamy číst všichni uživatelé, ale právo zápisu má jen administrátor a nikdo jiný. Pokud chceme, aby si každý uživatel mohl změnit své heslo přes webové rozhraní, musíme povolit jejich ověření a možnost přepsat hodnot atributů s hesly (userPassword, ntPassword).
lmPassword
a
Následuje výpis řízení přístupu k atributům s hesly ze souboru
/etc/openldap/slapd.conf: access to attr=userPassword by self write by anonymous auth by * none access to attr=lmPassword by self write by anonymous auth by * none access to attr=ntPassword by self write by anonymous auth by * none
59
9.4. API rozhraní jazyka PHP pro práci s LDAP V jazyce PHP musíme při kompilaci zapnout podporu LDAP, jinak nebudou funkce pro práci s adresářem dostupné. Každý klient musí při přístupu k záznamům na serveru LDAP vykonat sekvenci následujících příkazů: •
ldap_connect()
připojí klienta k serveru na adrese a portu předanými
jako argumenty •
ldap_bind()
sváže klienta s přístupovými oprávněními daného spojení
k záznamům v adresáři LDAP •
ldap_search(), ldap_modify(), ldap_delete(), ldap_list()
a další
funkce představují operace s adresářem •
ldap_close()
zavírá spojení k serveru LDAP, které bylo výsledkem
volání funkce pro připojení ldap_connect()
9.5. Změna hesla přes webové rozhraní Uživatel má dvě možnosti, jak změnit své heslo. Může využít nástroje pro změnu hesla v systému Windows (obrázek 9.5.2.) nebo použít jednoduchý PHP skript (obrázek 9.5.1.), který si podrobně popíšeme v následujícím textu. Skript pro změnu hesla, přístupný přes webový prohlížeč, je nezávislý na operačním systému. Na heslo nejsou kladeny žádné speciální požadavky a změnit ho lze z jakéhokoli počítače v lokální síti (přístup povolen jen z domény caglan.cz).
Obrázek 9.5.1. : Změna hesla - webové rozhraní
Obrázek 9.5.2. : Změna hesla - Windows XP
60
Skript je v podstatě jednoduchý formulář, do kterého uživatel zadá své uživatelské jméno, staré a nové heslo. Po kliknutí na tlačítko „změnit heslo“ se zkontroluje zadání všech údajů, správnost původního hesla a zda se shodují nová hesla. Funkce pro tuto kontrolu vypadá v programovacím jazyce PHP takto: function zkontroluj_udaje($username,$pwd_OLD,$pwd_NEW_1,$pwd_NEW_2) if (($username == "") OR ($pwd_OLD == "") OR ($pwd_NEW_1 == "") OR ($pwd_NEW_2 == "")) { $chybova_hlaska = "Zadejte všechny údaje!"; } else { $ldaprdn = "uid=".$username.",ou=Users,dc=CAG,dc=CZ"; $ldapconn = ldap_connect("localhost") or die("Nemohu se připojit k LDAP serveru!") if (!@ldap_bind($ldapconn, $ldaprdn, $pwd_OLD)) { $chybova_hlaska = "Špatné uživatelské jméno nebo heslo!"; } elseif ($pwd_NEW_1 <> $pwd_NEW_2) { $chybova_hlaska = "Nová hesla se neshodují!"; } else $chybova_hlaska = "ok"; ldap_close($ldapconn);
} return $chybova_hlaska; }
Pokud kontrola proběhla úspěšně (funkce vrátila hodnotu „ok“), vytvoříme hesla pro jednotlivé atributy. Hesla LAN Manager a NT pomocí programu /usr/local/sbin/mkntpwd
Program
mkntpwd
dvojtečkou a
a unixové heslo pomocí
/usr/sbin/slappasswd.
vrátí obě hesla jako jeden řetězec, kde jsou obě hesla oddělena
slappasswd
vrátí přímo hodnotu, kterou uložíme do příslušné
proměnné. Jednotlivá hesla jsou zvýrazněna tučně. if ($kontrola == "ok") { $lm_nt = exec("/usr/local/sbin/mkntpwd $form_pwd_NEW_2"); $lm_nt = explode(":",$lm_nt); $lmPassword = $lm_nt[0]; $ntPassword = $lm_nt[1]; $userPassword = exec("/usr/sbin/slappasswd -h {SSHA} -s $form_pwd_NEW_2");
Takto získaná hesla uložíme do proměnných, které mají stejný název jako atributy v záznamu. V dalším kroku přihlásíme uživatele k serveru LDAP pomocí jeho uživatelského jména a původního hesla. Z proměnných obsahujících jednotlivá hesla vytvoříme pole, které dále použijeme ke změně údajů v záznamu uživatele.
61
$ldaprdn = "uid=".$form_username.",ou=Users,dc=CAG,dc=CZ"; $ldapconn = ldap_connect("localhost") or die("Nemohu se připojit k LDAP serveru!"); ldap_bind($ldapconn, $ldaprdn, $form_pwd_OLD); $passwd_modify["lmPassword"] = $lmPassword; $passwd_modify["ntPassword"] = $ntPassword; $passwd_modify["userPassword"] = $userPassword; ldap_modify($ldapconn,"uid=".$form_username.",ou=Users,dc=CAG,dc=CZ", $passwd_modify)) { echo 'Heslo bylo úspěšně změněno.'; }
Posledním příkazem je vlastní změna atributů s hesly v záznamu uživatele pomocí příkazu
ldap_modify().
Celý skript (včetně HTML formuláře) naleznete
v příloze. Ke změně atributů není potřeba znát heslo administrátora, protože každý uživatel může ve svém záznamu měnit atributy s hesly (viz kapitola 9.3.).
9.6. Správa uživatelů přes webové rozhraní Skript pro změnu hesla z předchozí kapitoly je přístupný všem uživatelům, zatímco skripty pro administraci uživatelských účtů jen uživateli admin, který se musí pokaždé přihlásit. Ukázka prostředí je na obrázku 9.6.1. .
Obrázek 9.6.1. : Webové rozhraní pro správu uživatelů
62
Na levé straně jsou odkazy jednotlivých skriptů pro operace s uživatelskými účty a na straně pravé údaje o posledním přihlášením uživatele admin (datum, čas, IP adresa, DNS jméno) a odkaz na historii jeho přihlášení. Vytvoření nového uživatele Nový uživatelský účet se vytvoří vyplněním jednoduchého formuláře na obrázku 9.6.2. . Všechny údaje kromě hesla jsou povinné a v případě jeho nezadání
se
(8 náhodných
automaticky písmen).
vygeneruje Důležité
je
zaškrtnout, zda chceme uživateli vytvořit jeho domovský adresář. Obrázek 9.6.2. : Údaje o novém uživateli
Při zpracování údajů z formuláře skript zkontroluje, zda se v systému uživatelské jméno již nevyskytuje a rovnost obou zadaných hesel (při automatickém generování se hesla nekontrolují). Pokud je vše v pořádku, předají se hodnoty skriptu smbldap-useradd.pl
a po úspěšném vytvoření uživatelského účtu se zobrazí okno
na obrázku 9.6.3. .
Obrázek 9.6.3. : Úspěšné vytvoření uživatele
Heslo se zobrazí jen v případě, není-li zadáno a skript ho musel vygenerovat. Kliknutím na odkaz Print INFO se otevře nové okno, kde jsou uvedeny základní informace o počítačové síti, uživatelském účtu a prvním přihlášení (obrázek 9.6.4.).
63
Obrázek 9.6.4. : Informace o uživateli a prvním přihlášení
64
Zrušení uživatelského účtu Pro zrušení uživatelského účtu stačí do formuláře zadat uživatelské jméno a zaškrtnout, zda chceme smazat i jeho domovský adresář.
Obrázek 9.6.5. : Zrušení uživatele
Změna hesla uživatele Tento skript je modifikací „veřejně“ přístupného skriptu. Ke
změně
hesla
uživatele
ovšem nepotřebujeme znát jeho původní heslo. Obrázek 9.6.6. : Změna hesla
Přidání fotografie k uživateli Uložit fotografii uživatele do
jeho
záznamu
přidat atribut
znamená
jpegPhoto,
který
obsahuje fotografii převedenou metodou base64 do textové
Obrázek 9.6.7. : Cesta k souboru s fotografií
podoby.
V
prvním
musíme
zadat
kroku
uživatelské
jméno a cestu k souboru s fotografií.
Obrázek
se
automaticky zmenší na velikost 112x160 bodů a pokud je náhled Obrázek 9.6.8. : Informace o fotografii a její náhled
65
v
pořádku
můžeme
fotografii uložit do adresáře.
Seznam překročených diskových kvót Kliknutím na předposlední odkaz v menu webového rozhraní se vypíše tabulka (obrázek 9.6.9.) uživatelů s využitím diskových kvót vyšším než 90% a tabulka uživatelů s velikostí mailboxu větší než 9 MB (tj. také 90%, maximum je 10 MB).
Obrázek 9.6.9. : Seznam uživatelů s překročenými diskovými kvótami
66
Hromadné vytvoření uživatelských účtů Před začátkem každého školního roku musíme vytvořit novým studentům uživatelské účty. Všichni studenti jsou evidováni v systému SAS (Systém Agend pro Školy), který umožňuje exportovat jejich seznamy do textového souboru, kde jsou jednotlivé údaje odděleny středníkem. Příklad exportovaného souboru: Tučňák;David;Tučňák David;Oktáva;8 Velbloud;Jan;Velbloud Jan;Kvinta;5
Hromadné vytvoření uživatelů z textového souboru probíhá ve třech krocích. Nejprve zadáme cestu k souboru (obrázek 9.6.10.). Skript poté zkontroluje jeho formát, ověří zda se uživatelská jména v systému již nevyskytují a po této kontrole vypíše tabulku se seznamem uživatelů v souboru (obrázek 9.6.11.).
Obrázek 9.6.10. : Umístění textového souboru Obrázek 9.6.11. : Tabulka uživatelů ze souboru
Posledním krokem je samotné vytvoření uživatelských účtů podle zadaného textové souboru a vypsání tabulky s jejich seznamem (obrázek 9.6.12.). Kliknutím na odkaz info se pro každého nově vytvořeného uživatele otevře okno s informacemi o prvním přihlášení, podobně jako na začátku této podkapitoly (obrázek 9.6.4.).
Obrázek 9.6.12. : Seznam nově vytvořených uživatelů
67
Vyhledávání uživatelů V případě potřeby můžeme uživatele vyhledat podle jeho uživatelského jména nebo příjmení (popř. křestního jména). Nad odkazy pro správu uživatelů napíšeme hledaný řetězec (obrázek 9.6.13.) a klikneme na tlačítko pro vyhledávání. Výsledek se zobrazí v pravém rámci (obrázek 9.6.14.). Výsledek hledání je v tabulce setříděn podle příjmení. Seřadit záznamy podle jiného klíče můžeme kliknutím na název příslušného sloupce. Každé z písmen v posledním sloupci představuje konkrétní operaci s uživatelem ve stejném řádku. Zkratky s jejich popisem jsou v tabulce 9.6.1. V posledním řádku tabulky je uveden vyhledávací filtr, počet nalezených záznamů a podle jakého sloupce jsou údaje seřazeny. Obrázek 9.6.13. : Vyhledávání
Obrázek 9.6.14. : Výsledek hledání
Zkratka I L D P CH S X/E
Popis Vypíše informace o uživateli. Zobrazí celý LDIF uživatele (všechny atributy). Vymaže uživatele. Uloží fotografii do záznamu uživatele. Umožní změnit jakýkoli atribut v záznamu uživatele. Změní heslo uživatele. Zakáže/povolí uživatelský účet (pouze pro Windows).
Tabulka 9.6.1. : Zkratky pro operace s uživatelským účtem
Kliknutím na zkratku příkazu nemusíme dále ve formuláři vyplňovat uživatelské jméno a další údaje, protože se automaticky doplní ze záznamu LDAP
68
konkrétního uživatele. Kromě základních operací popsaných na začátku této podkapitoly jsou zde i čtyři nové: výpis informací o uživateli, zobrazení celého LDIF, změna atributů a zákaz nebo povolení uživatelského účtu pro stanice s operačním systémem Windows. Funkce jednotlivých příkazů jsou vcelku zřejmé a za zmínku stojí jen příkaz pro výpis informací o daném uživateli, který zobrazí tabulku se základními údaji o uživatelském účtu včetně využití diskových kvót, fotografií a dalšími údaji (obrázek 9.6.15.).
Obrázek 9.6.15. : Informace o uživateli
Červené údaje ve výpise hodnot znamenají, že není něco v pořádku. V našem případě je využití mailboxu uživatele vyšší než 90% (maximum je 10 MB) a ve sdílení [netlogon] neexistuje přihlašovací skript s názvem jesterka.cmd.
69
10. Další využití adresáře LDAP Informace o uživatelích uložené v adresáři LDAP se dají využít i jinými způsoby než jen k ověřování uživatelů a vyhledávání emailových adres. Použít ho můžeme například také ke generování seznamů studentů jednotlivých tříd na stránkách školy.
Obrázek 10.1. : Seznam studentů na WWW stránkách školy
Nalezne-li skript při výpisu seznamu studentů dané třídy u uživatele atribut jpegPhoto,
zobrazí se ve výpise vedle jeho jména ikonka fotografie a po kliknutí se
otevře okno s fotografií uživatele (obrázek 10.1.). Využití adresáře LDAP je opravdu široké a určitě by se našly i jiné aplikace, kde ho s výhodou využijeme.
70
11. Závěr Použít na serveru pro centrální autentizaci a autorizaci uživatelů operační systém Linux je výhodné díky nulovým nákladům na jeho pořízení a jeho variabilitu. Centrální seznam uživatelů přináší zjednodušení práce pro administrátora i pro uživatele samotné. Uživatelé mají na všechny stanice s různými operačními systémy a ke všem službám v síti stejné přihlašovací údaje a administrátor spravuje jen jednu databázi uživatelů a navíc má otevřenu cestu k použití údajů z této databáze v nejrůznějších aplikacích. Správa záznamů jednotlivých uživatelů v adresáři LDAP pomocí skriptů z balíku smbldap-tools je velice snadná a přehledná. Určitým zjednodušením a rozšířením funkcí těchto skriptů může být webové rozhraní naprogramované v programovacím jazyce PHP. Popsaný
server
pro
ověřování
uživatelů
již
skoro
rok
využívá
na Česko-anglickém gymnasiu [www.cag.cz] celkem 350 uživatelů s nejrůznějšími nastaveními a přístupovými právy. Za tuto dobu se nevyskytly žádné problémy, které by byly způsobeny tímto serverem.
71
Seznam použité literatury [1]
Castagnetto, J., Rawat, H., Schumann, S., Scollo, Ch., Veliath, D.: Programujeme PHP profesionálně (2. vydání). Praha, Computer Press, 2002.
[2]
Eckstein, R., Coillier-Brown, D., Kelly, P.: Samba - Linux jako server v síti Windows. Praha, Computer Press, 2001.
[3]
Kosek, J.: PHP - Tvorba interaktivních internetových aplikací. Praha, Grada Publishing, 1999.
[4]
Lung,
M.,
Swanson,
C.:
OpenLDAP
Everywhere.
LINUX
Journal,
December 2002, strany 48-57. [5]
Provazník, J.: Autentizace (bakalářská práce). Masarykova Univerzita, Fakulta Informatiky, 2003.
[6]
Shah, S.: Administrace systému Linux (průvodce pro začínající správce). Praha, Grada Publishing, 2002.
72
Zdroje dostupné on-line [1]
http://www.idealx.org/prj/samba/samba-ldap-howto.pdf
The Samba LDAP PDC Howto [2]
http://www.idealx.org/prj/samba/dist/smbldap-tools.pdf
Smbldap-tools User Manual [3]
http://othello.caglan.cz:901/swat/help/Samba-LDAP-HOWTO.html
Storing Samba's User/Machine Account information in an LDAP Directory [4]
http://othello.caglan.cz:901/swat/help/Samba-PDC-HOWTO.html
How to Configure Samba 2.2 as a Primary Domain Controller [5]
http://www-106.ibm.com/developerworks/eserver/tutorials/smb_ldap.html
Using an LDAP directory for Samba authentication [6]
http://www.fi.muni.cz/~kas/p090/referaty/skupina10/ldap.html
LDAP (referát z předmětu UNIX – seminář ze správy systému) [7]
http://isg.ee.ethz.ch/tools/realmen/det/skel.en.html
User Profile Management [8]
http://ldap.akbkhome.com/
LDAP Schema Viewer [9]
http://www.root.cz/clanek/478
PAM -- správa autentizačních mechanismů
73
Přílohy A. Konfigurační a zdrojové soubory A.1. /etc/openldap/slapd.conf # $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. include include include include include
/etc/openldap/schema/core.schema /etc/openldap/schema/cosine.schema /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/nis.schema /etc/openldap/schema/samba.schema
# Define global ACs to disable default read access. access to attr=userPassword by self write by anonymous auth by * none access to attr=lmPassword by self write by anonymous auth by * none access to attr=ntPassword by self write by anonymous auth by * none access to * by self write by dn="cn=Manager,dc=CAG,dc=CZ" write by * read # # # # # # # #
The next three lines allow use of TLS for connections using a dummy test certificate, but you should generate a proper certificate by changing to /usr/share/ssl/certs, running "make slapd.pem", and fixing permissions on slapd.pem so that the ldap user or group can read it. TLSCertificateFile /usr/share/ssl/certs/slapd.pem TLSCertificateKeyFile /usr/share/ssl/certs/slapd.pem TLSCACertificateFile /usr/share/ssl/certs/ca-bundle.crt
################################################################### ldbm database definitions ##################################################################dat abase ldbm suffix "dc=CAG,dc=CZ" rootdn "cn=Manager,dc=CAG,dc=CZ" # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details.
74
# Use of strong authentication encouraged. rootpw {CRYPT}CYnMMQ2uOCk32 # The database directory MUST exist prior to running slapd # AND should only be accessible by the slapd/tools. Mode 700 # recommended. directory
/var/lib/ldap
# Indices to maintain index index
objectClass,rid,uid,uidNumber,gidNumber,memberUid cn,mail,surname,givenname eq,subinitial
A.2. /etc/openldap/ldap.conf # $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. HOST 127.0.0.1 BASE dc=CAG,dc=CZ BINDDN cn=Manager,dc=CAG,dc=CZ nss_base_passwd nss_base_shadow nss_base_group
dc=CAG,dc=CZ?sub dc=CAG,dc=CZ?sub ou=Groups,dc=CAG,dc=CZ?one
ssl no pam_passwords md5
A.3. base.ldif dn: dc=CAG,dc=CZ objectClass: domain dc: CAG dn: ou=Groups,dc=CAG,dc=CZ objectClass: top objectClass: organizationalUnit ou: Groups description: System Groups dn: ou=Users,dc=CAG,dc=CZ objectClass: top objectClass: organizationalUnit ou: Users description: Users of the Organization dn: ou=Computers,dc=CAG,dc=CZ objectClass: top objectClass: organizationalUnit ou: Computers description: Windows Domain Computers dn: cn=Domain Admins,ou=Groups,dc=CAG,dc=CZ
75
eq
objectClass: posixGroup gidNumber: 200 cn: Domain Admins memberUid: administrator description: Windows Domain Users dn: cn=Domain Users,ou=Groups,dc=CAG,dc=CZ objectClass: posixGroup gidNumber: 201 cn: Domain Users description: Windows Domain Users dn: cn=Domain Guests,ou=Groups,dc=CAG,dc=CZ objectClass: posixGroup gidNumber: 202 cn: Domain Guests description: Windows Domain Guests Users dn: cn=Administrators,ou=Groups,dc=CAG,dc=CZ description: Members can fully administer the computer/domain objectClass: posixGroup gidNumber: 220 cn: Administrators description: Windows Domain Members can fully administer the computer/domain dn: cn=Users,ou=Groups,dc=CAG,dc=CZ description: Ordinary users objectClass: posixGroup gidNumber: 221 cn: Users description: Windows Domain Ordinary users dn: cn=Guests,ou=Groups,dc=CAG,dc=CZ description: Users granted guest access to the computer/domain objectClass: posixGroup gidNumber: 222 cn: Guests memberUid: nobody description: Windows Domain Users granted guest access to the computer/domain dn: cn=Power Users,ou=Groups,dc=CAG,dc=CZ description: Members can share directories and printers objectClass: posixGroup gidNumber: 223 cn: Power Users| description: Windows Domain Members can share directories and printers dn: cn=Account Operators,ou=Groups,dc=CAG,dc=CZ objectClass: posixGroup gidNumber: 224 cn: Account Operators description: Windows Domain Users to manipulate users accounts dn: cn=Server Operators,ou=Groups,dc=CAG,dc=CZ objectClass: posixGroup gidNumber: 225 cn: Server Operators description: Windows Domain Server Operators dn: cn=Print Operators,ou=Groups,dc=CAG,dc=CZ objectClass: posixGroup gidNumber: 226 cn: Print Operators description: Windows Domain Print Operators dn: cn=Backup Operators,ou=Groups,dc=CAG,dc=CZ objectClass: posixGroup gidNumber: 227 cn: Backup Operators description: Windows Domain Members can bypass file security to back up files
76
dn: cn=Replicator,ou=Groups,dc=CAG,dc=CZ description: Supports file replication in a domain objectClass: posixGroup gidNumber: 228 cn: Replicator description: Windows Domain Supports file replication in a domain
A.4. /usr/local/sbin/smbldap_conf.pm #!/usr/bin/perl use strict; package smbldap_conf; # $Id: smbldap_conf.pm,v 1.14 2002/06/01 04:30:48 olem Exp $ # # smbldap-tools.conf : Q & D configuration file for smbldap-tools # # This code was developped by IDEALX (http://IDEALX.org/) and # contributors (their names can be found in the CONTRIBUTORS file). # # Copyright (C) 2001-2002 IDEALX # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, USA # Purpose : # . be the configuration file for all smbldap-tools scripts use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $UID_START $GID_START $smbpasswd $slaveLDAP $masterLDAP $with_smbpasswd $mk_ntpasswd $ldap_path $ldap_opts $ldapsearch $ldapsearchnobind $ldapmodify $ldappasswd $ldapadd $ldapdelete $ldapmodrdn $suffix $usersdn $computersdn $groupsdn $scope $binddn $bindpasswd $slaveDN $slavePw $masterDN $masterPw $_userLoginShell $_userHomePrefix $_userGecos $_defaultUserGid $_defaultComputerGid $_skeletonDir $_userSmbHome $_userProfile $_userHomeDrive $_userScript $usersou $computersou $groupsou ); use Exporter; $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw( $UID_START $GID_START $smbpasswd $slaveLDAP $masterLDAP $with_smbpasswd $mk_ntpasswd $ldap_path $ldap_opts $ldapsearch $ldapsearchnobind $ldapmodify
77
$ldappasswd $ldapadd $ldapdelete $ldapmodrdn $suffix $usersdn $computersdn $groupsdn $scope $binddn $bindpasswd $slaveDN $slavePw $masterDN $masterPw $_userLoginShell $_userHomePrefix $_userGecos $_defaultUserGid $_defaultComputerGid $_skeletonDir $_userSmbHome $_userProfile $_userHomeDrive $_userScript $usersou $computersou $groupsou ); #################################################################### # # General Configuration # #################################################################### # # UID and GID starting at... # $UID_START = 1000; $GID_START = 1000; #################################################################### # # LDAP Configuration # #################################################################### # Notes: to use to dual ldap servers backend for Samba, you must # patch# Samba with the dual-head patch from IDEALX. If not using # this patch just use the same server for slaveLDAP and masterLDAP. # # Slave LDAP : needed for read operations # # Ex: $slaveLDAP = "127.0.0.1"; $slaveLDAP = "localhost"; # # Master LDAP : needed for write operations # # Ex: $masterLDAP = "127.0.0.1"; $masterLDAP = "localhost"; # # LDAP Suffix # # Ex: $suffix = "dc=IDEALX,dc=ORG"; $suffix = "dc=CAG,dc=CZ"; # # Where are stored Users # # Ex: $usersdn = "ou=Users,$suffix"; for ou=Users,dc=IDEALX,dc=ORG $usersou = q(Users); $usersdn = "ou=$usersou,$suffix"; # # Where are stored Computers # # Ex: $computersdn = "ou=Computers,$suffix"; # for ou=Computers,dc=IDEALX,dc=ORG $computersou = q(Computers); $computersdn = "ou=$computersou,$suffix";
78
# # Where are stored Groups # # Ex $groupsdn = "ou=Groups,$suffix"; for ou=Groups,dc=IDEALX,dc=ORG $groupsou = q(Groups); $groupsdn = "ou=$groupsou,$suffix"; # # Default scope Used # $scope = "sub"; # # Credential Configuration # # Bind DN used # Ex: $binddn = "cn=Manager,$suffix"; for cn=Manager,dc=IDEALX,dc=org $binddn = "cn=Manager,$suffix" # # Bind DN passwd used # Ex: $bindpasswd = 'secret'; for 'secret' $bindpasswd = "tajneheslo"; # # Notes: if using dual ldap patch, you can specify to different # configuration. By default, we will use the same DN (so it will work # for standard Samba release) $slaveDN = $binddn; $slavePw = $bindpasswd; $masterDN = $binddn; $masterPw = $bindpasswd; #################################################################### # # Unix Accounts Configuration # #################################################################### # Login defs # Default Login Shell # # Ex: $_userLoginShell = q(/bin/bash); $_userLoginShell = q(/bin/bash); # # Home directory prefix (without username) # #Ex: $_userHomePrefix = q(/home/); $_userHomePrefix = q(/home/); # # Gecos # $_userGecos = q(System User); # # Default User (POSIX and Samba) GID # $_defaultUserGid = 100; #
79
# Default Computer (Samba) GID # $_defaultComputerGid = 553; # # Skel dir # $_skeletonDir = q(/etc/skel); #################################################################### # # SAMBA Configuration # #################################################################### # # The UNC path to home drives location without the username last # extension(will be dynamically prepended) # # Ex: q(\\\\PDC-netbios-name\\homes) for \\PDC-netbios-name\homes $_userSmbHome = q(\\\\OTHELLO\\homes); # # The UNC path to profiles locations without the username last # extension (will be dynamically prepended) # Ex: q(\\\\PDC-netbios-name\\profiles) for \\PDC-netbios-name\profiles $_userProfile = q(\\\\OTHELLO\\homes\\profile); # # The default Home Drive Letter mapping # (will be automatically mapped at logon time if home directory # exist) # Ex: q(U:) for U: $_userHomeDrive = q(H:); # # The default user netlogon script name # if not used, will be automatically username.cmd # #$_userScript = q(startup.cmd); # make sure script file is edited under dos! #################################################################### # # SMBLDAP-TOOLS Configuration (default are ok for a RedHat) # #################################################################### # Allows not to use smbpasswd (if $with_smbpasswd == 0 in # smbldap_conf.pm) but prefer mkntpwd... most of the time, it's a # wise choice :-) $with_smbpasswd = 0; $smbpasswd = "/usr/bin/smbpasswd"; $mk_ntpasswd = "/usr/local/sbin/mkntpwd"; $ldap_path = "/usr/bin"; $ldap_opts = "-x"; $ldapsearch = "$ldap_path/ldapsearch $ldap_opts -h $slaveLDAP -D '$slaveDN' -w '$slavePw'"; $ldapsearchnobind = "$ldap_path/ldapsearch $ldap_opts -h $slaveLDAP"; $ldapmodify = "$ldap_path/ldapmodify $ldap_opts -h $masterLDAP -D '$masterDN' -w '$masterPw'"; $ldappasswd = "$ldap_path/ldappasswd $ldap_opts -h $masterLDAP -D
80
'$masterDN' -w '$masterPw'"; $ldapadd = "$ldap_path/ldapadd $ldap_opts -h $masterLDAP -D '$masterDN' -w '$masterPw'"; $ldapdelete = "$ldap_path/ldapdelete $ldap_opts -h $masterLDAP -D '$masterDN' -w '$masterPw'"; $ldapmodrdn = "$ldap_path/ldapmodrdn $ldap_opts -h $masterLDAP -D '$masterDN' -w '$masterPw'"; 1; # - The End
A.5. /etc/exports (othello.caglan.cz) /home /mnt/Shomes
*.caglan.cz(rw,root_squash) *.caglan.cz(rw,root_squash)
A.6. /etc/fstab (othello.caglan.cz) LABEL=/ none LABEL=/home none none LABEL=/usr LABEL=/var /dev/sda5 /dev/cdrom /dev/fd0 /dev/sdb1 /dev/sdb2
/ /dev/pts /home /proc /dev/shm /usr /var swap /mnt/cdrom /mnt/floppy /mnt/mailboxes /mnt/Shomes
ext3 devpts ext3 proc tmpfs ext3 ext3 swap iso9660 auto ext3 ext3
defaults 1 1 gid=5,mode=620 0 0 defaults,usrquota,grpquota 1 2 defaults 0 0 defaults 0 0 defaults 1 2 defaults 1 2 defaults 0 0 noauto,owner,kudzu,ro 0 0 noauto,owner,kudzu 0 0 defaults 1 1 defaults,usrquota,grpquota 1 2
A.7. /etc/fstab (public.caglan.cz) LABEL=/ / ext3 othello:/home /mnt/nfs/home nfs othello:/mnt/Shomes /mnt/nfs/Shomes nfs LABEL=/boot /boot ext3 none /dev/pts devpts none /proc proc none /dev/shm tmpfs /dev/hda3 swap swap /dev/fd0 /mnt/floppy auto /dev/sda1 /mnt/usb auto
defaults 1 1 rsize=8192,wsize=8192 0 0 rsize=8192,wsize=8192 0 0 defaults 1 2 gid=5,mode=620 0 0 defaults 0 0 defaults 0 0 defaults 0 0 noauto,owner,kudzu 0 0 noauto,user 0 0
A.7. /etc/xinetd.d/swat # default: off # description: SWAT is the Samba Web Admin Tool. Use swat \ # to configure your Samba server. To use SWAT, \ # connect to port 901 with your favorite web browser. service swat
81
{
disable = no port = 901 socket_type = stream wait = no only_from = 127.0.0.1 192.168.1.0/24 user = root server = /usr/sbin/swat log_on_failure += USERID
}
A.8. /etc/samba/smb.conf # This is the main Samba configuration file. You should read the # smb.conf(5) manual page in order to understand the options listed # here. Samba has a huge number of configurable options (perhaps too # many!) most of which are not shown in this example # # Any line which starts with a ; (semi-colon) or a # (hash) # is a comment and is ignored. In this example we will use a # for commentry and a ; for parts of the config file that you # may wish to enable # # NOTE: Whenever you modify this file you should run the # command "testparm" # to check that you have not made any basic syntactic errors. # #======================= Global Settings ============================ [global] # SAMBA-LDAP configuration ldap suffix = dc=CAG,dc=CZ ldap admin dn = cn=Manager,dc=CAG,dc=CZ ldap port = 389 ldap server = 127.0.0.1 ldap ssl = no client code page = 852 character set = ISO8859-2 domain admin group = " @"Domain Admins" @"Administrators" hartman" netbios name = OTHELLO add user script = /usr/local/sbin/smbldap-useradd.pl -w %u # workgroup = NT-Domain-Name or Workgroup-Name workgroup = CAG # server string is the equivalent of the NT Description field server string = Samba-LDAP PDC Server (%v) # # # # # ;
This option is important for security. It allows you to restrict connections to machines which are on your local network. The following example restricts access to two C class networks and the "loopback" interface. For more examples of the syntax see the smb.conf man page hosts allow = 192.168.1. 192.168.2. 127.
# if you want to automatically load your printer list rather # than setting them up individually then you'll need this # printcap name = /etc/printcap printcap name = cups
82
load printers = yes # # # # #
It should not be necessary to spell out the print system type unless yours is non-standard. Currently supported print systems include: bsd, sysv, plp, lprng, aix, hpux, qnx, cups printing = BSD printing = cups print command = lpr.cups -P%p -r %s lpq command = lpq.cups -P%p lprm command = lprm.cups -P%p %j min print space = 2000
# Uncomment this if you want a guest account # otherwise the user "nobody" is used guest account = ftp # this tells Samba to use a separate log file for each machine # that connects log file = /var/log/samba/%m.log log level = 0 # Put a capping on the size of the log files (in Kb). max log size = 2000 # Security mode. Most people will want user level security. See # security_level.txt for details. security = user # Use password server option only with security = server # The argument list may include: # password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name] # or to auto-locate the domain controller/s # password server = * ; password server =
# Password Level allows matching of _n_ characters of the password # for all combinations of upper and lower case. ; password level = 8 ; username level = 8 # You may wish to use password encryption. Please read # ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation. # Do not enable this option unless you have read those documents encrypt passwords = yes # smb passwd file = /etc/samba/smbpasswd # The following is needed to keep smbclient from spouting spurious # errors when Samba is built with support for SSL. ; ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt # # # # # # #
The following are needed to allow password changing from Windows to update the Linux system password also. NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above. NOTE2: You do NOT need these to allow workstations to change only the encrypted SMB passwords. They allow the Unix password to be kept in sync with the SMB password. unix password sync = Yes
passwd program =/usr/local/sbin/smbldap-passwd.pl -o %u passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
83
# # # # #
You can use PAM's password change control flag for Samba. If enabled, then PAM will be used for password changes when requested by an SMB client instead of the program listed in passwd program. It should be possible to enable this without changing your passwd chat parameter for most setups. pam password change = yes
# Unix users can map to different SMB User names ; username map = /etc/samba/smbusers # Using the following line enables you to customise your configuration # on a per machine basis. The %m gets replaced with the netbios name # of the machine that is connecting ; include = /etc/samba/smb.conf.%m # # # # #
This parameter will control whether or not Samba should obey PAM's account and session management directives. The default behavior is to use PAM for clear text authentication only and to ignore any account or session management. Note that Samba always ignores PAM for authentication in the case of encrypt passwords = yes obey pam restrictions = yes
# Most people will find that this option gives better performance. # See speed.txt and the manual pages for details socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 # Configure Samba to use multiple interfaces # If you have multiple network interfaces then you must list them # here. See the man page for details. ; interfaces = 192.168.12.2/24 192.168.13.2/24 # Configure remote browse list synchronisation here # request announcement to, or browse list sync from: # a specific host or from / to a whole subnet (see below) ; remote browse sync = 192.168.3.25 192.168.5.255 # Cause this host to announce itself to local subnets here ; remote announce = 192.168.1.255 192.168.2.44 # Browser Control Options: # set local master to no if you don't want Samba to become a master # browser on your network. Otherwise the normal election rules apply local master = yes # OS Level determines the precedence of this server in master browser # elections. The default value should be reasonable os level = 34 # # # #
Domain Master specifies Samba to be the Domain Master Browser. This allows Samba to collate browse lists between subnets. Don't use this if you already have a Windows NT domain controller doing this job domain master = yes
# Preferred Master causes Samba to force a local browser election on startup # and gives it a slightly higher chance of winning the election preferred master = yes # Enable this if you want Samba to be a domain logon server for
84
# Windows95 workstations. domain logons = yes # # # ; # ;
if you enable domain logons then you may want a per-machine or per user logon script run a specific logon batch file per workstation (machine) logon script = %m.cmd run a specific logon batch file per username logon script = %U.cmd logon script = mount.cmd logon script = %m.cmd
# Where to store roving profiles (only for Win95 and WinNT) # %L substitutes for this servers netbios name, %U is username # You must uncomment the [Profiles] share below ; logon path = \\%L\Profiles\%U # Windows Internet Name Serving Support Section: WINS Support - Tells # the NMBD component of Samba to enable it's WINS Server ; wins support = yes # WINS Server - Tells the NMBD components of Samba to be a WINS # Client Note: Samba can be either a WINS Server, or a WINS Client, # but NOT both ; wins server = w.x.y.z # WINS Proxy - Tells Samba to answer name resolution queries on # behalf of a non WINS capable client, for this to work there must be # at least one WINS Server on the network. The default is NO. ; wins proxy = yes # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names # via DNS nslookups. The built-in default for versions 1.9.17 is yes, # this has been changed in version 1.9.18 to no. dns proxy = no # # ; ; # ; # ;
Case Preservation can be handy - system default is _no_ NOTE: These can be set on a per share basis preserve case = no short preserve case = no Default case is normally upper case for all DOS files default case = lower Be very careful with case sensitivity - it can break things! case sensitive = no
#============================ Share Definitions ===================== [homes] comment = Home Directories browseable = no writable = yes valid users = %S create mode = 0700 directory mode = 0700 # Un-comment the following Domain Logons [netlogon] comment = Network Logon Service path = /etc/samba/netlogon guest ok = yes writable = no share modes = no
85
browseable = no # Un-comment the following to provide a specific roving profile share # the default is to use the user's home directory ;[Profiles] ; path = /usr/local/samba/profiles ; browseable = no ; guest ok = yes # NOTE: If you have a BSD-style print system there is no need to # specifically define each indivBidual printer [xerox] comment = Xerox P8ex browseable = yes writable = no printable = yes print command = /usr/bin/lpr -P %p -r %s printer = xerox path = /var/spool/samba public = no printer admin = root hartman invalid users = bauer kutheil [print$] comment = Printer Drivers path = /etc/samba/drivers browseable = yes guest ok = no read only = yes write list = root hartman # This one is useful for people to share files #[tmp] # comment = Temporary file space # path = /tmp # read only = no # public = yes # A publicly accessible directory, but read only, except for people # in the "staff" group [public] comment = Public ditectory path = /home/export/public public = yes writable = yes guest ok = yes create mode = 755 directory mode = 755 [readonly] comment = Readonly directory path = /mnt/Shomes/export/readonly public = no writable = no create mode = 755 directory mode = 755 write list = jbockova ydolezalova lerhart mgutvirthova hartman zhuckova hkalacova vkleteckova ekordova dlhotkova imarusincova pmasek jmuzik fnechvatal zondrichova hpilbauerova dpolakova lpustinova crabel sriley rrycova jsamohyl lstarcevska astetkova kstruncova ktumova mvejsada vvotava rwaterfield jzahradnikova kab-ze
86
# Other examples. # # A private printer, usable only by fred. Spool data will be placed # in fred's home directory. Note that fred must have write access to # the spool directory, wherever it is. ;[fredsprn] ; comment = Fred's Printer ; valid users = fred ; path = /home/fred ; printer = freds_printer ; public = no ; writable = no ; printable = yes # A private directory, usable only by fred. Note that fred requires # write access to the directory. ;[fredsdir] ; comment = Fred's Service ; path = /usr/somewhere/private ; valid users = fred ; public = no ; writable = yes ; printable = no # a service which has a different directory for each machine that # connects this allows you to tailor configurations to incoming # machines. You could also use the %U option to tailor it by user # name. The %m gets replaced with the machine name that is # connecting. ;[pchome] ; comment = PC Directories ; path = /usr/local/pc/%m ; public = no ; writable = yes # A publicly accessible directory, read/write to all users. Note that # all files created in the directory by users will be owned by the # default user, so any user with access can delete any other user's # files. Obviously this directory must be writable by the default # user. Another user could of course be specified, in which case all # files would be owned by that user instead. ;[public] ; path = /usr/somewhere/else/public ; public = yes ; only guest = yes ; writable = yes ; printable = no # The following two entries demonstrate how to share a directory so # that two users can place files there that will be owned by the # specific users. In this setup, the directory should be writable by # both users and should have the sticky bit set on it to prevent # abuse. Obviously this could be extended to as many users as # required. ;[myshare] ; comment = Mary's and Fred's stuff ; path = /usr/somewhere/shared ; valid users = mary fred ; public = no ; writable = yes ; printable = no ; create mask = 0765
87
[kancelar] comment = Kancelar - private share path = /mnt/Shomes/export/kancelar valid users = jbockova dlhotkova jzahradnikova kancelar hartman public = no writable = yes printable = no
create mask = 0766
A.9. /etc/sudoers # # # # # # #
sudoers file. This file MUST be edited with the 'visudo' command as root. See the sudoers man page for the details on how to write a sudoers file.
# Host alias specification Host_Alias OTHELLO = 127.0.0.1, 192.168.1.1 # User alias specification # Cmnd alias specification Cmnd_Alias AU = /usr/local/sbin/smbldap-useradd.pl Cmnd_Alias DU = /usr/local/sbin/smbldap-userdel.pl Cmnd_Alias SU = /usr/local/sbin/smbldap-usershow.pl Cmnd_Alias SIZE = /usr/bin/du Cmnd_Alias QUOTA = /usr/bin/quota # Defaults specification # User privilege specification root ALL=(ALL) ALL apache OTHELLO = AU, DU, SU, SIZE, QUOTA # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now
A.10. Skript pro změnu hesla uživatele /** * * =============================================== * Skript pro změnu hesla uživatele v LDAP serveru * =============================================== * *** David Hartman (c)2004 *** *
88
* https://mail.cag.cz/passwd/script/index.php * **/ ?> <meta http-equiv="Content-Type" content="text/html;"> LDAP (passwd) ..:: V2.5 ::.. function zkontroluj_udaje($username,$pwd_OLD,$pwd_NEW_1,$pwd_NEW_2) if (($username == "") OR ($pwd_OLD == "") OR ($pwd_NEW_1 == "") OR ($pwd_NEW_2 == "")) { $chybova_hlaska = "Zadejte všechny údaje!"; } else { $ldaprdn = "uid=".$username.",ou=Users,dc=CAG,dc=CZ"; $ldapconn = ldap_connect("localhost") or die("Nemohu se připojit k LDAP serveru!"); if (!@ldap_bind($ldapconn, $ldaprdn, $pwd_OLD)) { $chybova_hlaska = "Špatné uživatelské jméno nebo heslo!"; } elseif ($pwd_NEW_1 <> $pwd_NEW_2) { $chybova_hlaska = "Nová hesla se neshodují!"; } else $chybova_hlaska = "ok"; ldap_close($ldapconn); } return $chybova_hlaska; } if ($change_pwd == "yes") { $kontrola = zkontroluj_udaje($form_username,$form_pwd_OLD, $form_pwd_NEW_1,$form_wd_NEW_2); if ($kontrola == "ok") { $lm_nt = exec("/usr/local/sbin/mkntpwd $form_pwd_NEW_2"); $lm_nt = explode(":",$lm_nt); $lmPassword = $lm_nt[0]; $ntPassword = $lm_nt[1]; $userPassword = exec("/usr/sbin/slappasswd -h {SSHA} –s $form_pwd_NEW_2"); $ldaprdn = "uid=".$form_username.",ou=Users,dc=CAG,dc=CZ"; $ldapconn = ldap_connect("localhost") or die("Nemohu se připojit k LDAP serveru!"); ldap_bind($ldapconn, $ldaprdn, $form_pwd_OLD); $passwd_modify["lmPassword"] = $lmPassword; $passwd_modify["ntPassword"]= $ntPassword; $passwd_modify["userPassword"] = $userPassword; if ($ldap_modify = @ldap_modify($ldapconn,"uid=".$form_username.",ou=Users,dc=CAG,dc=CZ, $passwd_modify)) { echo 'Heslo bylo úspěšně změněno.'; } else { echo 'Heslo se nepodařilo změnit!'; }
89
ldap_close($ldapconn); } else include ("form.inc"); } else include ("form.inc"); ?>
A.11. Formulář pro změnu hesla
Zadejte své uživatetelské jméno a heslo! if (isset($kontrola) AND ($kontrola <> "ok")) { echo(' '.$kontrola.' '); } else echo ("
"); ?>
90
B. Obsah CD Přiložené CD je součástí diplomové práce. Obsahuje elektronickou podobu této práce ve formátu PDF a zdrojové kódy webového rozhraní pro správu uživatelů v programovacím jazyce PHP. Informace o jednotlivých adresářích a souborech jsou uloženy přímo na CD v kořenovém adresáři v souboru info.txt. Všechny zdrojové soubory jsou volně k dispozici a mohou být použity k jakýmkoli nekomerčním účelům.
91