V rytmu Samby

Jiří Bracek, xbracek@fi.muni.cz


Obsah


Úvod

Samba je SMB souborový a tiskový server pro UNIXové systémy. SMB (Server Message Block) je protokol pro sdílení souborů, tiskáren, sériových portů a komunikačních abstrakcí (např. pojmenované roury) mezi počítači vyvinutý firmami Microsoft, IBM, Intel a 3COM. Poměrně nedávno byl protokol SMB přejmenován na CIFS (Common Internet File System) v rámci snahy Microsoftu učinit Windows "Internet friendly"... Samba vznikla, protože se jeví výhodnější a jednodušší naučit UNIX komunikovat s Windows pomocí jejich nativního protokolu, než by tomu bylo naopak. Samba je vyvíjena skupinou programátorů známou jako Samba Team, která pracuje podobně jako tým vyvíjející jádro Linuxu. Samba je dostupná pod GNU GPL licencí.

SMB protokol

SMB je velmi komplexní protokol a neustále se mění tak, aby vyhověl aktuálním potřebám Microsoftu. Většina protokolu je Microsoftem zdokumentována na Internetu, bohužel s výjimkou některých kritických komponent Windows NT. Samba implementuje SMB nad TCP pro sdílení souborů a nad UDP pro prohlížení (browsing). SMB může běžet i nad jinými transportními protokoly (IPX, NetBEUI), ale i sám Microsoft se v současnosti zaměřuje pouze na TCP/IP. Používají se následující porty:
Protokol na portu 137/UDP je často označován jako WINS (Windows Internet Name Server). Toto označení je ale značně zavádějící, protože WINS vůbec nefunguje na sítích typu WAN jako je Internet. Na portu 138/UDP probíhá prohlížecí (browsing) provoz. Jedná se většinou o všesměrové (broadcast) vysílání, kterým servery inzerují svou přítomnost, spolu s občasným přenosem zpráv mezi podsítěmi, které zajišťují prohlížení i v rámci těchto podsítí. Hlavní provoz SMB protokolu probíhá na portu 139/TCP. Všechny sdílené soubory a tiskárny sdílejí tento port.
SMB implementuje řadu sofistikovaných mechanismů (např. řetězení příkazů, Oplocks - oportunistické zámky), které ho činí rychlejším (ale ne bezpečnějším pro sdílení dat) než např. NFS. Oplocky nejsou zámky v pravém slova smyslu, jedná se o bezpečný (z hlediska integrity dat) mechanismus pro "kešování" dat klientem. Klient, který získá oplock na určitý soubor, si může tento soubor uložit do lokální vyrovnávací paměti a zde jej modifikovat. Pokud jiný klient požádá server o přístup k tomuto souboru, server oznámí klientovi zrušení oplocku a klient změněná data sesynchronizuje. Tento mechanismus je často využíván klienty od Microsoftu. Nabízí se srovnat další odlišnosti mezi SMB a NFS:

Bezpečnost

SMB definuje dvě úrovně bezpečnosti: Dále je dle mého účelné vysvětlit rozdíl mezi pojmy "workgroup" a "domain": Samba může pracovat jako Od Windows NT 4.0 SP3 a Windows 95 SP1 používají Windows pouze šifrovaná hesla. Jsou dvě možnosti šifrování: Od verze 2.0 podporuje Samba SSL. Veškeré SMB relace jsou vytvářeny nad bezpečným transportním kanálem, takže vzniká plně šifrovaný síťový souborový systém. Další informace týkající se bezpečnosti budou poskytnuty v sekci
Konfigurace.

Součásti balíku Samba

smbd

Tento démon poskytuje ke sdílení soubory a tiskárny SMB klientům, jako jsou např. Windows 95/98, Windows NT, Windows for Workgroups or LanManager. Poslouchá na portu TCP/139 a pro každé spojení vytvoří nový proces. Konfigurace tohoto démona je zapsána v souboru smb.conf.

nmbd

Tento démon poskytuje podporu pro rozlišování NetBIOS jmen (name resolving), prohlížení (browsing) a registraci na portech UDP/137 a UDP/138. Konfigurace tohoto démona je zapsána v souboru smb.conf.

smbclient

Tento program implementuje jednoduchého SMB klienta ve stylu ftp. Lze pomocí něj přistupovat k sdíleným prostředkům na jiných serverech užívajících SMB protokol (jako např. Windows NT) a umožňuje také tisknout UNIXovým počítačům na tiskárně připojené k SMB serveru (jako např. PC s Windows NT).

testparm

Tato utilita provádí jednoduchou kontrolu syntaxe konfiguračního souboru smb.conf.

testprns

Tato utilita testuje jména tiskáren definovaných v souboru printcap.

smbstatus

Tento nástroj poskytuje přístup k informacím o aktivních spojeních se smbd.

nmblookup

Tento nástroj umožňuje provádět dotazy na NetBIOS jména z UNIXového počítače.

make_smbcodepage

Tato utilita umožňuje vytvářet definiční soubory SMB kódových stránek pro smbd server.

smbpasswd

Pomocí tohoto nástroje lze měnit LanMan a NT hashe hesel na serverech Samba i Windows NT.

swat

(Samba Web Administration Tool) Tento nástroj umožňuje konfigurovat Sambu resp. soubor smb.conf pomocí webového prohlížeče.


Instalace

Doporučený postup:
  1. Přečtěte si manuálové stránky.
  2. Překlad probíhá víceméně standardním způsobem:
    # ./configure
    # make
    # make install
  3. Uvařte si kafe :-)
  4. Vytvořte konfigurační soubor smb.conf. Jeho struktura bude popsána dále v sekci Konfigurace. Nutno poznamenat, že make install soubor smb.conf nenainstaluje, musíte jej vytvořit sami! Správné umístění konfiguračního souboru je uvedeno v Makefile, např. v Red Hatu je to adresář /etc/samba/.
  5. Otestujte svůj konfigurační soubor pomocí programu testparm.
  6. Nastartujte smbd a nmdb. Můžete je spustit jako démony, nebo nechat spouštět pomocí inted.
  7. Zkuste vypsat sdílení dostupná na vašem serveru:
    $ smbclient -L yourhostname
  8. Zkuste se připojit pomocí UNIXového klienta:
    $ smbclient //yourhostname/aservice
    Např. pokud je na počítači pc5 vaše uživatelské jméno jura a máte nastavené domovské adresáře ke sdílení (viz dále):
    $ smbclient //pc5/jura
  9. Zkuste se připojit pomocí DOS, Windows, OS/2 atd. klienta:
    C:\WINDOWS\> net use d: \\servername\service
  10. Pokud něco nefunguje, tak chvíli opakujte krok 3 a pak si přečtěte Samba-HOWTO-Collection, kde naleznete více rad a informací.

Konfigurace

Hlavní konfigurační soubor balíku Samba je soubor smb.conf. Tento soubor má stejnou strukturu jako konfigurační .INI soubory systému Windows. Zde je komentovaný příklad:
#======================= Globální nastavení =====================================
[global]

# jméno pracovní skupiny nebo domény
workgroup = MYGROUP

# přístup pouze z těchto podsítí
hosts allow = 10.0.0. 127.

# info o tiskárnách
printcap name = /etc/printcap
load printers = yes

# přístupová práva tohoto uživatele budou použity ve sdílení s 'public = yes'
guest account = ftp

# podrobnosti viz man smb.conf
security = user

# zvláštní log pro každý přistupující počítač, %m se expanduje do jména počítače
log file = /var/log/samba/%m.log

# certifikát, pokud je Samba zkompilovaná s podporou SSL
ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt

# lze vytvořit samostatnou konfiguraci pro každý přistupující stroj
include = /etc/samba/smb.conf.%m

#============================ Definice sdílení ==============================

# zpřístupní domovské adresáře jako //computername/username
[homes]
comment = Home Directories

# sdílení nebude viditelné při prohlížení
browseable = no

# uživatelé mohou zapisovat
# stejné jako 'read only = no'
writable = yes

# zpřístupní tiskárny
[printers]
comment = All Printers

# tisková fronta
path = /var/spool/samba

browseable = no

# umožní uživatelům zapisovat požadavky do tiskové fronty
printable = yes

# zpřístupní /tmp všem bez hesla
[tmp]
comment = Temporary file space
path = /tmp
read only = no

# bez hesla, přístupová práva uživatele z volby 'guest account'
public = yes
Více informací naleznete v manuálové stránce smb.conf(5).

Samba jako člen NT domény

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:

Samba jako autentizační server

Tento způsob autentizace vyžaduje na UNIXovém stroji jak existenci normálního účtu uživatele, tak i záznam v databázi smbpasswd. Do smb.conf je třeba přidat následující parametry:
[global]
	encrypt passwords = Yes
	security = user
	domain logons = Yes
	; an OS level of 33 or more is recommended
	os level = 33

[NETLOGON]
	path = /somewhare/in/file/system
	read only = yes
Vytvoření účtu pro uživatele:
# useradd -s /bin/bash -d /home/"userid" -m
# passwd "userid"
  Enter Password: *****
# smbpasswd -a "userid"
  Enter Password: *****
Vytvoření účtu pro počítač s Windows NT/2000:
# useradd -a /bin/false -d /dev/null "machine_name"\$
# passwd -l "machine_name"\$
# smbpasswd -a -m "machine_name"
Podrobnosti naleznete v Samba-PDC-HOWTO.

Zdroje

Čerpal jsem z dokumentů dostupných na
www.samba.org. Zdrojové texty celého balíku lze nalézt tamtéž.