Samba

Kamil Malinka, malinka@ics.muni.cz


Obsah


Samba

Samba je software, který umožňuje unixovému systému sdílet v síti soubory a tiskárny s windowsovskými počítači. Tato služba se ve Windows nazývá Sdílení souborů a tiskáren. Nosným protokolem pro komunikaci mezi počítači je používán nejčastěji protokol TCP/IP. Linuxový počítač je z pohledu sítě Windows viděn jako jedna z windowsovských stanic, rovněž tak jeho disky a tiskárny lze sdílet stejným způsobem jako disky a tiskárny windowsovského počítače. Omezeně je možno spouštět některé DOS/Win aplikace, uložené na jednom disku. Podporovná je samozřejmě diakritika, pevné mezery v názvech, ....

Protokoly

Windowsovské stanice spolu komunikují pomocí protokolu CIFS (Common Internet File System), jehož jádrem je protokol SMB (Server Message Block). Samba je open-source implementace CIFS-protokolu běžící pod všemi typy Unixu vč. Linuxu, AmigaOS, VMS. Vlastní CIFS implementace mají samozřejmě i ostatní OS (OS/2, ...). Protokol SMB ke klient-server protokol určený pro sdílení souborů, tiskáren. Obsahuje nástroje implementující SMB jak pro serverovou, tak pro klientskou stranu.

Pro komunikaci mezi softwarem a síťovým hardwaru v malých LAN (Local Area Network) byl vyvinut za spolupráce firem IBM a Sytec protokol NetBIOS (Network Basic Input Output System). Později přibyla do NetBIOSu možnost přesměrovat I/O operace, čímž bylo možno sdílet disky. Protokol pro sdílení disků byl nazván SMB, nyní CIFS.

NetBIOS byl primitivní protokol, ale poskytoval API (Application Programming Interface), ze kterého schopné hlavy vymyslely protokoly vyšší úrovně s širšími možnostmi. První byl NetBEUI (NetBIOS Enhanced User Interface) od IBM, další pak IPX/SPX a hlavně TCP/IP. Samba implementuje NetBIOS len nad TCP/IP.

Později byl SMB protokol zdokonalen o možnost koexistence TCP/IP a NetBIOSu v mezi sebou propojených lokálních sítích, protože NetBIOS byl navržen pro izolované LAN. NetBIOS identifikoval stanici 16bitovým jménem, ale TCP/IP unikátní IP adresou. Propojení těchto dvou označení dalo tedy vzniknout oněm zdokonalením SMB, tak jak je známe dnes. CIFS rozšiřuje možnosti protokolu SMB, používá DNS jména počítačů místo NetBIOS-ových jmen, Unicode, atd.


Součásti balíku Samba


Server

Na linuxovém serveru, který bude poskytovat prostředky ke sdílení, musí být nainstalována Samba a musí být zavedeni dva její daemoni -- smbd a nmbd. Hlavní konfigurační soubor Samby společný pro oba démony je smb.conf.
Po každé změně je třeba restartovat daemony Samby, aby se projevily změny v konfiguračních souborech, které jste provedli. Pro otestování syntaktické správnosti souboru smb.conf lze použít příkaz testparm.

Démon smbd obsluhuje vlastní sdílení souborových systémů a tiskových služeb pro klienty. Nejprve se spojí s portem 139 a naslouchá požadavkům. Při každé autentizaci klienta sesmbd zkopíruje; originál se vrátí na port 139 pro nové požadavky a kopie obsluhuje připojení klienta. Tato nová kopie také změní svůj aktuální identifikátor uživatele z uživatele root na autentizovaného uživatele. Kopie zůstává v paměti tak dlouho, dokud trvá připojení klienta.
Smbd načítává svůj konfigurační soubor každou minutu (v případě jeho změny), nebo je možno vynutit znovunačtení konfigurace zaslaním signálu SIGHUP. Znovunačtení konfigurace nemá vliv na již ustanovené spojení.

Démon nmbd je odpovědný za obsluhu požadavků jmenného serveru NETBioes. Nejprve se spojí s portem 137; na rozdíl od smbd však nevztvoří pro každý dotay instanci sebe sama. Kromě požadavků jmenného serveru zpracovává také požadavky od prohlížečů, prohlížečů domén a serverů WINS.

Name resolution
Může se uskutečňovat dvěma způsoby: Broadcast -- klient hledající server určitého jména vyšle broadcast signál ke všem strojům v síti a čeká na odpověď ve formě IP adresy Point-to-point -- zapojuje se do hry tzv. NBNS (NetBIOS Name Serviceserver -- Microsoft nazval svoji implementaci NBNS WINS (Windows Internet Name Service) -- dnes používáno častěji -- každý stroj při vstupu do sítě zanechá na NBNS serveru svoje jméno a IP adresu (a příp. popis) a když je pak kýžený stroj v síti nějakým jiným hledán, dotazuje přímo NBNS server, který shromažďuje informace o připojených serverech a jejich IP adresách

Browsing
V LAN zůčastněné počítače dělají volby počítače, který bude LMB (Local Master Browser). LMB může být též určen správcem externě (tj. socialismus v sítích, jinak panuje všpočítačová demokracie). Vítěz voleb pak pojme speciální NetBIOSové jméno (kromě ostatních, které by měl), které ho odlišuje od ostatních.
LMB udržuje aktuální seznam dostupných služeb; tuto nabídku vidíte při otevření Okolních počítačů ve Windows. Navrch k LMB existují ještě DMB(Domain Master Browser), které se používají v situaci, kdy je třeba udržovat aktuální seznam dostupných služeb pro více propojených (routovaných) LAN sítí. Každý LMB pak pomocí NBNS spolupracuje se svým DMB, aby na DMB byly stále aktuální informace (ve Windows NT), kde na systému DMB stojí celý networking, ale může promítnutí se změn na jednotlivých LMB v DMB trvat i hodinu. :--))

Pro spuštění smbd a nmbd jako démonů použijeme přepínač -D (odpojí se od terminálu a běží na pozadí). Další možnost je spouštět je prostřednictvím inetd nebo xinetd. Samba obsahuje ještě jednu méně používanou službu winbind (démon winbindd), pomocí které umíme získat informace o uživatelích a skupinách z Windows NT serveru a autentizovat uživatele oproti tomuto serveru.


Klient

Program smbclient je flexibilní nástroj pro příkazový řádek, který umožňuje linuxovému klientu, aby se choval jak klient se systémem Windows. Můžeme ho použít pro připojování k ostatním Samba serverům resp. serverům se systémem Windows. Dále ho můžeme užít na zjišťování informací o sdílených prostředcích, odesílání a stahování souborů nebo k tisku do těchto serverů. Slouží také jako skvělý nástroj pro odstraňování chyb. Snadno totiž zkontroluje funkčnost Samby.

Chceme-li zobrazit nabídku serveru, použijeme parametr -L

smbclient -L jméno_serveru

Pro přístup ke sdílenému diskovému prostředku použijeme příkaz

smbclient //server/share

Dostane se nám prostředí podobného ftp. Po připojení můžeme procházet adresáře příkazy cd, dir, ls. Pro přenos, příkazy get, put, mget, mput. Vzdálený přístup k tiskárnám
spustíme smbclient s prepínačem -P a následně príkazem print odešleme soubor na tiskárnu

smbclient //server/printer -P
smb:> print soubor

K serveru se smbclientem implicitně přihlašujeme pod jménem, pod kterým jsme prihlášeni v systému. Pokud se chceme přihlásit jako jiný uživatel, použijeme přepínač -U

smbclient //server/share -U user

Je-li jádro nakonfigurováno tak, aby podporovalo souborový systém SMB (při kompilaci parametr --with-smbmount, bez něj by příkaz mount neuměl připojit tento souborový systém a navíc se vytvoří soubory smbmount a smbumount), můžete do systému připojit disk se systémem Samba stejně jako diskový oddíl NFS.

Pro připojení sdíleného souborového prostředku zadejte

mount -t smbfs -o username=user //server/share /přípojný_bod

Příkaz mount spustí mount.smbfs. Příkazy smbmount a smbumount jsou jen odkazy na mount.smbfs.

Dalšími užitečnými nástroji na straně klienta jsou:
nmblookup - požívá sa na vyhledávání NetBIOS-ových jmen strojů v síti, na zjištění jejich IP adres atd.
smbtree - vypíše seznam serverů v síti a prostředků, které sdílejí


Konfigurace

Jak již bylo řečeno, hlavním konfiguračním souborem je soubor /etc/samba/smb.conf
Smb.conf má dvě hlavní sekce - global a share. V první definujeme společné vlastnosti všech sdílených položek, nastavení sítě, security, apod; ve druhé pak zvlášť definujeme všechny sdílené složky a tiskárny.

Sekce [global] obsahuje parametry, které definují vlastnosti serveru jako celku a implicitní parametry pro všechny ostatní sekce. Některé z parametrů:

Sekce [share] popisuje sdílené adresáře resp. tiskárny

Příklad sekce [share]
Sekce [homes] reprezentuje domovské adresáře uživatelů. Server automaticky nasdílí domovský adresář při přihlášení uživatele a název prostředku homes přeměňuje na jméno uživatele. Použitím této sekce vytvoříme jednoduše a rychle domovské adresáře všech uživatelů.

Tip: Pokud má váš Samba server více než jedno ethernetové rozhraní, smbd se může navázat na to špatné. Proto můžete vynutit jeho navázání ke konkrétnímu rozhraní přidáním řádku do global sekce.
interfaces = 192.168.1.1/24


Spolupráce s doménamy NT

Pro začlenění Samby do NT domény je třeba přidat do smb.conf následující parametry:

encrypt passwords = Yes
security = domain
workgroup = "name of NT domain"
password server = * Aby tato metoda pracovala, je třeba nejdříve přidat Samba server do NT domény: Do správce příslušné MS Windows NT domény je třeba pomocí Server Manageru přidat účet pro Sambu. V UNIXu je třeba provést: smbpasswd -r PDC_NAME -j DOMAIN_NAME
Samba server může zastupovat další role:
Domain Controler, ...

Sdílení hesel mezi NT a UNIXem

Samba má podporu pro autentizaci klientů heslem jak v otevřené tak zašifrovaná podobě. Pokud je Samba server členem domény nebo PDC, pak musí mít zapnutou volbu šifrovaných hesel.
v sekci [global]

encrypt passwords = yes

Protože systém Windows používá jiný algoritmus transformace kličů pro hesla, musí si Samba zachovat vlastní soubor s hesly pro podporu zašifrovaných hesel. (např v soubore /etc/samba/smbpasswd) Pro každého uživatele, který přistupuje k Samba serveru a má unixový účet na serveru, musíme vytovřit v této databazi příslušný záznam s heslem.
Seznam existujících uživatelů, z něhož můžete implementovat podporu zašifrovaných hesel, získáte rychle pomocí skriptu mksmbpasswd.sh
Vygeneruje smbpasswd ze systémové tabulky passwd, neobsahuje samozřejmě validní hesla.

Pro vytváření a změnu hesel slouží příkaz smbpasswd. Protože smbpasswd používá standardní protokol pro komunikace se serverem, můžete jej použít i ke změně hesla na vzdáleném počítači.

Synchronizice unixových a Sambových hesel:

unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n

První řádek povoluje synchronizaci hesel. Další nastavuje příkaz pro změnu unixového hesla a parametr chat definuje, jak se zobrazí výstup příkazu na změnu hesla. Synchronizace funguje pouze pro běžné uživatele. Root musí měnit hesla zvlášť.

Povolení přístupu bez hesel
Potřebujete-li z nějakého důvodu umožnit uživatelům přístup bez hesel (což není dobrý nápad), můžete to provést příkazem smbpasswd s parametrem -n
smbpasswd -n username


Odkazy


Příklad sekce [share]

[homes]
       comment = Home Directories
       browseable = no
       writable = yes 
[printers]
       comment = tiskarny
       path = /var/spool/lpd/samba
       browseable = yes
       printable = yes
       public = yes
       guest ok = yes
       writable = no
[vyvoj]
       comment = Vyvoj software
       path = /home/vyvoj
       public = no
       create mask = 0770
       directory mask = 0770
       writable = yes
       browseable = no
       printable = no
       writelist = @vyvojari
[private]
       path = /home/user/janda_private
       valid users = janda 
       public = no
       writable = yes
       browseable = no
       printable = no
       create mask = 0700
[public]
       path = /home/public
       public = True
       only guest = False
       writable = True
       printable = no
       directory mask = 0777
       create mask = 0777
[muzikanti]
       path = /home/muzikanti
       public = no
       only guest = False
       valid users = janda, broum, mozart, bach
       writable = True
       printable = no
       directory mask = 0755
       create mask = 0755