Samba

Peter Veselý, xvesely4@fi.muni.cz


Obsah


Úvod

Samba je nástroj, ktorý umožňuje spoluprácu Unixových a Windowsových systémov. Je to balík programov, ktoré na Unixových systémoch implementujú protokol SMB/CIFS (Server Message Block/Common Internet File System) a štandard NetBIOS. Znamená to, že ak máme Unixový server so Sambou, klienti so systémom Windows možu priamo komunikovať s týmto serverom vo svojom natívnom jazyku.


Protokoly

Protokol SMB je klient-server protokol určený na zdielanie súborov, tlačianí, komunikačných abstrakcí akými sú pomenované rúry a mailových slotov medzi počítačmi. Existuje viacero variant tohoto protokolu, ktoré vznikali s rastúcimi požiadavkami na jeho funkcionalitu. Je kompatibilný s protokolom Lan Manager. Umožňuje sa pripájať k zdielaným súborom a tlačiarnam, pracovať so súbormi (otvárať, zatvárať, čítať, zapisovať, vytvárať, mazať, zisťovať a nastavovať atribúty). Samba obsahuje nástroje implementujúce SMB jak pre serverovú, tak pre klientskú stranu.

CIFS rozširuje možnosti protokolu SMB, používa DNS mená počítačov namiesto NetBIOS-ových mien, Unicode, atď.

NetBIOS je štandard, ktorý prožívajú systémy od Microsoftu na pomenovanie strojov. Tvorí vrstvou nad protokolmi IPX, DECnet a TCP/IP a pod protokolom SMB. Samba implementuje NetBIOS len nad TCP/IP.

Server

Samba server sa skladá z dvoch démonov: smbd a nmbd. Spoločným konfiguračným súborom oboch démonov je smb.conf.

Démon smbd zabezpečuje autentizáciu klientov a prístup k zdielaným prostriedkom - diskom a tlačiarnam. Démon beží pod oprávnením roota. Keď sa k nemu pripojí klient, vytvorí sa jeho kópia na inom porte a identifikátor užívateľa sa zmení na autentizovaného užívateľa. smbd načítava svoj konfiguračný súbor každú minútu (v prípade jeho zmeny), alebo je možné vynútiti znovunačítanie konfigurácie zaslaním signálu SIGHUP. Znovunačítanie konfiurácie nemá vpliv na ustavené spojenia.

Démon nmbd sa stará o preklad mien a o browsing. Tieto dve služby zahŕňajú management a distribúciu NetBIOS-ových mien.

Preklad mien môže prebiehať dvoma spôsobmi a to broadcast a point-to-point.
Pri broadcaste stroj pošle do siete meno počítača, s ktorým chce komunikovať a čaká, že mu dotyčný počítač odpovie svojou IP adresov. Tento spôsob prekladu je obmedzený na lokálnu sieť.
Prístup point-to-point si vyžaduje prítomnost NBNS servera (NetBIOS Name Service). Microsoft nazýva svoju implenetáciu toho servera WINS (Windows Internet Name Service). Funguje to tak, že klient pošle NBNS serveru svoje NetBIOS-ové meno a IP adresu. Server si tieto údaje uloží do svojej databázy. Ak chce potom jeden klient naviazať spojenie s iným, spýta sa NBNS servera na jeho IP adresu. Výhoda toho prístupu oproti brodacastu je v tom, že klienti môžu pristupovať k svojim zdielaným prostriedkom aj keď sú v rôznych lokálnych sieťach. Jeden NBNS server môže byť zdielaný viacerými lokálnymi sieťami.

Browsing je služba, ktorá má na starosti udržiavať zoznam zdielaných prostriedkov v lokálnej sieti alebo v doméne NT. V lokálnej sieti sa o tento zoznam stará lokálny master browser, ktorého si počítače v sieti medzi sebou zvolia. V rámci domény zoznam prostriedkov udržuje doménový master browser. Ak používame NBNS server, lokálne master browsery vedia pomocou neho nájsť doménový master browser a poslať mu svoj zoznam zdielaných prostriedkov. Zoznam je tak dostupný všetkým klientom v doméne NT.

Na spustenie smbd a nmbd ako démonov požijeme prepínač -D (odpoja sa od terminálu a bežia na pozadí). Ďaľšia možnosť je spúšťať ich prostredníctvom inetd alebo xinetd.

Samba obsahuje ešte jednu menej používanú službu winbind (démon winbindd), pomocou ktorej vieme získať informácie o užívateloch a skupinách z Windows NT servera a autentizovať užívatelov voči tomuto serveru.


Klient

Základným nástrojom Samby na strane klienta je smbclient. Pomocou neho sa môžeme pripájať k Samba serverom alebo k serverom so systémom Windows. Môžeme ho použiť na zisťovanie informácii o zdielaných prostriedkoch, sťahovať a odosielať súbory a tlačiť na týchto serveroch. Je tiež dobrým a rýchlym nástrojom na testovanie správnej funkčnosti Samby.

Následujúcim príkazom si môžeme pozrieť, čo nám ponúka nejaký server
smbclient -L meno_servera
Na jednoduchý prístup k zdielanému diskovému prostriedku požijeme príkaz
smbclient //server/prostriedok
smbclient nám v tomto prípade poskytne podobné rozhranie ako pri ftp. Pri prístupe k tlačiarni zdielanej cez SMB, spustíme smbclient s prepínačom -P a následne príkazom print odošleme súbor tlačiarni
smbclient //server/tlačiareň -P
smb:> print súbor
K serveru sa smbclientom implicitne prihlasujeme pod tým menom, pod ktorým sme prihlásený v systéme. Ak sa chceme prihlásiť ako iný užívateľ, použijeme prepínač -U
smbclient //server/prostriedok -U užívateľ
Zdielané súborové prostriedky poskytované serverom môžeme pripojiť k Linuxovému stroju ako súborový systém. Aby to bolo možné, musíme mať jadro skompilované s podporou súborvého systému smbfs, prípadne cifs vfs (Linux podporuje protokol CIFS od verzie 2.5, pre verziu 2.4 existuje patch). Ak si inštalujeme Sambu zo zdrojových súborov, musíme ju skonfigurovať s parametrom --with-smbmount. Bez neho by príkaz mount nevedel pripojiť tento súborvý systém a tiež sa vytvoria súbory smbmount a smbumount.
Ak chceme pripojiť zdielaný súborový prostriedok, zadáme:
mount -t smbfs -o username=užívateľ //server/prostriedok /prípojný_bod
Príkaz mount spustí mount.smbfs. Príkazy smbmount a smbumount sú tiež len odkazy na mount.smbfs.

Ďaľšími užitočnými nástrojmi na klientskej strane sú:
nmblookup - požíva sa na vyhľadanie NetBIOS-ových mien strojov v sieti, na zistenie ich IP adries atď.
smbtree - vypíše zoznam serverov v sieti a prostriedkov, ktoré zdielajú

Konfigurácia

Konfigurácia Samby sa nachádza v súbore /etc/samba/smb.conf. Tento súbor sa skladá zo sekcií. Sekcia začína menom sekcie uzavretom v hranatých zátvorkách a končí následujúcou sekciou. Meno sekcie je totožné s názvom zdielaného prostriedku. Sekcie [global], [homes] a [printers] sú špeciálne. Ostatné sekcie definujú bežné zdielané prostriedky.

Sekcia [global] obsahuje parametre, ktoré definujú vlastnosti servera (démonov) ako celku a implicitné parametre pre všetky sekcie. Pozrieme sa bližšie na niektoré parametre tejto sekcie.
Ostatné sekcie popisujú zdielané adresáre alebo zdielané tlačiarne.
Sekcia [homes] reprezentuje domovské adresáre užívateľov. Server nazdiela automaticky domovský adresár pri prihlásení užívateľa a názov prostriedku homes premenuje na meno užívateľa. Použititím tejto sekcie vytvoríme jednoducho a rýchlo domovské adresáre všetkých užívateľov.

Ak máme definovanú sekciu [printers], klienti sa môžu pripojiť k akejkoľvek tlačiarni definovanej v súbore /etc/princap. Sekcia [printers] musí obsahovať riadok
printable = yes
inak server odmietne načítať konfiguračný súbor. Správnosť konfigurácie overíme príkazom testparm.

Úrovne bezpečnosti

Úroveň bezpečnosti určuje spôsob, akým Samba autentizuje klientov. Samba umožňuje štyri úrovne bezpečnosti: share, user, server a domain. Tieto úrovne sa nastavujú v smb.conf parametrom security v sekcii [global].
security = share
V tejto úrovni bezpečnosti nemusíme vytvárať unixový účet pre každý účet vo Windows. Klient sa autentizuje voči každému zdielanému prostriedku zvlášť. Tento spôsob je typický pre Windows 95 a 98, kde autentizácia prebieha na základe mena prostriedku a hesla. Samba však používa Unixovú autentizáciu pomocou mena užívateľa a hesla a s týmto sa musí vysporiadať niektorým z nasledujúcich spôsobov.

Ak klient pošle serveru dvojicu užívateľské meno a heslo, potom server hľadá zodpovedajúce meno v Unixovej systémovej tabuľke (napr. /etc/passwd) a na overenie šifrovaného hesla sa použije súbor smbpasswd (pozn. Samba okrem súboru smbpasswd umožňuje ukladať heslá aj v iných typoch databáz napr. LDAP, MySQL). Podobne sa postupuje, ak klient poslal užívateľské meno skôr a teraz posiela už len heslo.

Ak konfigurácia zdielaného prostriedku obsahuje parameter user, potom sa klient autentizuje len heslom. user obsahuje zoznam (unixových) užívateľov, ktorý majú prístup k tomuto prostriedku a heslo sa porovnáva voči heslám každého z týchto užívatelov. Na prístup sa použijú práva toho užívateľa, pri ktorom sa našla zhoda.

V prípade, že je prostriedok prístupný anonymne (jeho sekcia obsahuje parameter guest ok = yes alebo guest only = yes), potom sa použije užívateľské meno nastavené parametrom guest account.
security = user
Táto úroveň je implicitná od Samby 2.0.0.
Klient sa autentizuje užíveteľským menom a heslom. Meno sa overí voči systémovej tabulke passwd a heslo voči smbpasswd. V čase autentizácie server nevie, ku ktorému prostriedku bude klient pristupovať. Klient môže pristupovať k rôznym prostriedkom a nemusí pri tom zakaždým posielať meno a heslo.
security = server
Server s touto úrovňou bezpečnosti sa voči klientovi javí, akoby by bežal na úrovni user. Rozdiel je však v tom, že Samba vezme od klienta užívateľské meno a heslo a pokúsi sa nimi prihlásiť na iný server tzv. password server. Ak sa Sambe podarí k tomuto serveru prihlásiť, potom povolí prihlásenie klienta. Password server musí byť SMB server (Samba, Windows NT, LanManager, atď), ktorý beží na úrovni user. Globálny parameter password server udáva NetBIOS-ové meno tohoto serevera.
security = domain
Server sa voči klientovi javí akoby bežal na úrovni user podobne ako pri úrovni server. Password server všat v tomto prípade musí byť radič domény a Samba server vystupuje ako člen domény. Spojenie s password serverom trvá len v dobe autentizácie na rozdiel od úrovne server, kde bolo toto spojenie otvorené, kým sa klient neodpojil od Samba servera. Keď password server neodpovie alebo zamietne autentizáciu, Samba server sa prepne do úrovne user a pokúsi autentizovať klienta na tejto úrovni.

Samba v doméne NT

Samba môže v doméne NT vystupovať ako skutočný člen domény. Požiadavky klientov na autentizáciu potom preposiela primárnemu radiču domény (primary domain controller, PDC). Základná konfigurácia Samby ako člena domény má následovný tvar
[global]
netbios name = SAMBA
workgroup = NT_DOMAIN
password server = NT_PDC, NT_BDC_1, NT_BDC_2
security = domain
Parameter workgroup udáva meno domény, do ktorej server patrí, password server je zoznam serverov voči ktorým autentizuje klientov, bezpečnostná úroveň je nastavená na domain.

Klienti z domény pristupujúci k Samba serveru musia mať vytvorené unixové účty na tomto serveri, inak sa k nemu pripájajú ako anonymný užívatelia. Rovnako môžu k serveru pristupovať aj klienti z inej domény (aj títo klienti by mali mať unixový učet na serveri) a globálny parameter allow trusted domains nesmie byť nastavený na hodnotu no (implicitne je yes).

Keďže každý prihlasujúci sa užívateľ musí mať unixový učet, bolo by vo veľkých organizáciach veľmi pracné ho zakaždým ručne vytvárať. Existuje preto v Sambe spôsob ako to zautomatizovať. Slúžia na to globálne parametre add user script a delete user script. Ich nastavenie môže mať následujúci tvar
add user script = /usr/sbin/useradd %u -g smbusers 
delete user script = /usr/sbin/userdel %u
Samba server spustí príkaz v 'add user script' vtedy, keď užívateľ, ktorý k nemu pristupuje je úspešne autentizovaný voči PDC, ale neexistuje jeho korešpondujúci unixový účet. Príkaz v 'delete user script' sa vykoná, keď sa k Sambe prihlási užívateľ, ktorého účet na PDC bol odstránený a jeho unixový účet stále existuje.

Samba server môže byť nakonfigurovaný aj ako PDC a od verzie 3.0.0 aj ako záložný radič domény (Backup Domain Controller, BDC) s obmedzenou funkcionalitou. V Sambe 3 pribudli oproti Sambe 2 nové možnosti v oblasti riadenia domény:
Samba 3 naďalej neumožňuje
Konfigurácia Samby ako PDC je trošku obšírnejšia. Musíme mať zapnutú podporu pre prihlasovacie skripty, zdielať prostriedok s názvom netlogon, ktorý obsahuje tieto spripty a ďalej by mal zdieľať prostriedok profiles s nastavením užívateľských profilov. Detaily najdete napríklad v dokumente Building a PDC.

Heslá

Samba má podporu pre autentizáciu klientov heslami jak v otvorenej podobe, tak v zašifrovanej podobe. Systémy Windows od verzie 95 OSR2 podporujú implicitne šifrované heslá (túto podporu je možné vypnúť v registroch vo Windows, Samba potom môže autentizovať klienta pomocou unixového hesla, no z bezpečnostného hľadiska to nie je dobrý nápad). Ak je náš Samba server členom domény alebo PDC, potom musí mať zapnuté šifrované heslá. Dosiahneme to nasledujúcim riadkom v globálnej sekcii
encrypt passwords = yes
Unix používa iný typ šifrovania hesiel ako protokol SMB, preto si Samba musí udžiavať oddelenú databázu hesiel (napr. v súbore /etc/samba/smbpasswd). Pre každého užívateľa, ktorý pristupuje k Samba serveru a má unixový účet na serveri, musíme vytvoriť v tejto databáze príslušný záznam s heslom.

Na vytváranie a zmenu hesiel v Sambe slúži príkaz smbpasswd. Po prvý krát musí pre každého užívateľa vytvoriť heslo root a potom si toto heslo môžu zmeniť aj užívatelia sami. V prípade, že smbpasswd spustíme pod oprávnením roota, pristupujeme k databáze hesiel priamo. Užívatelia pri zmene hesla pristupujú k databázi po sieti cez server a musia sa voči nemu autentizovať. Užívatelia si tak môžu meniť heslá sami priamo zo svojich klientských staníc.

Samba dokáže synchronizovať heslá s unixovými v tom zmysle, že ak meníme heslo v Sambe, zmení sa aj to unixové. Dosiahneme to týmito riadkami v globálnej sekcii.
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n
V prvom riadku hovoríme serveru, aby používal synchronizáciu hesiel, v ďaľšom riadku nastavíme príkaz na zmenu unixového hesla a parameter passwd chat hovorí, ako sa zobrazí výstup príkazu na zmenu hesla. Synchronizácia funguje len ak si heslo mení bežný užívateľ, root musí meniť heslá zvlášť.

V prípade, že nemáme vytvorený súbor smbpasswd, môžeme ho vygenerovať zo systémovej tabuľky passwd skriptom mksmbpasswd.sh, samozrejme nebude obsahovať validné heslá.

Užitočné utility

Pre Sambu bolo vytvorených mnoho administrátorských nástrojov a grafických užívateľských rozhraní

Odkazy

Oficiálna stránka Samby, časť Dokumentácia
SAMBA Project Documentation
Benoit Gerrienne-ove stránky o konfigurácii Samby
The Unofficial Samba HOWTO