Samba
Peter Veselý, xvesely4@fi.muni.cz
Obsah
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.
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.
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.
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 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.
- workgroup - meno
pracovnej skupiny, v prípade, že
používame Samba server ako prímárny radič
domény, tak tento parameter označuje meno domény
- netbios name -
NetBIOS-ové meno počítača, môže byť
dlhé maximálne 15 znakov
- security - typ
autentizácie, viac v kapitole Úrovne
bezpečnosti
- guest account - meno
užívateľa (Unixového
účtu), pod ktorého právami sa prihlasuje
anonymný užívateľ (užívateľ Guest vo Windows)
- hosts allow - zoznam
doménových mien, IP
adries sietí a počítačov, odkiaľ je možné
pristupovať k serveru
- hosts deny -
opačný význam ako hosts allow
Ostatné sekcie popisujú zdielané adresáre
alebo zdielané tlačiarne.
- path - cesta k
zdielanému adresáru, v
prípade tlačiarne udáva spool
- writeable, read only - prístup pre
zápis
- create mode, directory mode - maska
prístupových práv pre súbory,
adresáre
- guest ok - povolenie
anonymného prístupu k
prostriedku (bez hesla), prístupové práva sa
použijú z premennej guest account
- guest only -
účet sprístupní len pod
právami užívateľa guest account
- printable - ak je
nastavené na yes, zdielaný
prostriedok je tlačiareň a dáva povolenie na zápis do
tlačovej fronty
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.
Ú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 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:
- umožňuje doveru voči doméne Windows NT4
- pridávnie užívateľov nástrojom User
Management for Domains a pomocou MMC konzoly
- plná podpora Unicode
Samba 3 naďalej neumožňuje
- replikáciu SAM s radičom domény Windows NT
- vystupvať ako plnohodnotný radič domény Windows
2000 s kerberom a Activ Directory
- používanie MMC konzoly pre kompletný menežment
servera
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.
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á.
Pre Sambu bolo vytvorených mnoho
administrátorských nástrojov a grafických
užívateľských rozhraní
- net - administrátorský nástroj
(riadkový), ktorý pribudol do Samby 3. Jeho funkcia je
rovnaká ako rovnomenného príkazu v
systémoch Windows.
- SWAT - nástroj umožňujúci konfigurovať Sambu cez
webové rozhranie. Obsahuje vlastný webserver a
spústíme ho tak, že do svojho oblúbeného
webového prehliadača napíšeme http://localhost:901/
- webmin + modul webmin-samba - ďaľší nástroj na
pohodlnú administráciu Samby cez web
- xSMBrowser - grafické rozhranie na strane klienta,
používa príkazy smbclient
a nmblookup.
- konqueror - webový a súborový prehliadač,
taktiež umožňuje pohodlný prístup k serveru pomocou smbclienta
- mnoho ďaľších GUI nájdete na oficiálnych
stránkach Samby v časti gui intefaces
Oficiálna stránka Samby, časť Dokumentácia
SAMBA
Project Documentation
Benoit Gerrienne-ove
stránky o konfigurácii Samby
The Unofficial Samba
HOWTO