Samba

David Kutálek <xkutale1@fi.muni.cz>


Obsah


1. Co je to Samba

Samba je Unixový nástroj pro sdílení prostředků (souborů, tiskáren, seznamy takto dostupných souborů a tiskáren...) po síti. Pracuje se sadou protokolů (NetBIOS, SMB aka CIFS) vyvinutých IBM a Micro$oftem, které jsou tudíž používány na všech operačních systémech Windows. V reálu se tak tento programový balík používá především pro propojení těchto dvou světů: pomocí Samby můžeme poskytovat soubory a tiskárny pro stovky stanic s Windows a/nebo naopak k prostředkům nasdílených na Windows přistupovat jako klient. Samozřejmě můžeme Sambu použít i pro čistě Linuxovo/Unixovou síť, pokud nám například nevyhovuje NFS.

Programový balík Samba obsahuje především:

Další balíky týkající se Samby:

2. Jak to funguje

2.1. Používané síťové protokoly

Co se týče síťových protokolů používaných Sambou, je situace drobátko komplikovaná. Následující ascii malůvka znazorňuje vztahy mezi jednotlivýma vrstvama protokolů:

IBM PC-Network	--------------------->---O
					 |
					 |
					 |
Token Ring  -----O---->  NetBeui  ---- 	NetBios  ------>  SMB/CIFS
		 |			 ^  ^			^
		 |		 	 |  | (NBT)		|
		 |		 	 |  |			|  Direct Service
Ethernet  -------O			 | Tcp/Ip  -------------O
				 (NBIPX) |
			IPX/SPX -------->O
Vývoj protokolu SMB (Server Message Block) byl započat někdy začátkem osmdesátých let u firem Intel a Micro$oft. Hned od začátku byl navržen tak, aby používal aplikační rozhraní NetBios. NetBios byl zase vyvinut u IBM pro jejich hardware PC-Network. Tento HW již hodně dlouho neexistuje, nahradil jej Token Ring a hlavně Ethernet, nicméně NetBios přežil a pro přenos SMB protokolu se používá dodnes.

Teprve u Windows 2000 přišel Micro$oft s tzv. Direct Service, což není nic jiného než SMB přímo přez Tcp/Ip (resp. Tcp/Udp/Ip). Samba umí komunikovat jak pomocí vrstvy NetBios tak i přímo. Jen je třeba si uvědomit, že klienti na Win9x to napřímo neumí.

Někdy kolem roku 1996 Micro$oft přejmenoval SMB na CIFS (Common Internet Filesystem). Jde vlastně o sadu protokolů, které zajišťují ohlašování služeb, autentifikaci, autorizaci atd. V současné době je pod zkratkou SMB většinou označován samotný protokol pro sdílení souborů, zatímco CIFS značí kompletní sadu protokolů.

2.2. NetBios nad TCP/IP (NBT)

NetBios zajišťuje v podstatě jakousi virtualni LAN (emulovanou PC-Network LAN). Jak ma vypadat NetBios nad Tcp/Ip rika RFC1001 (obecne koncepty) s RFC1002 (detailni specifikace). Každý počítač má v rámci NetBiosu vlastní jméno, jehož zápis se liší od jmen systému DNS (např. \\timothy\). NetBios zajišťuje tři klíčové služby:

2.3. SMB

Zatímco některé CIFS protokoly jsou proprietární, pro ten hlavní je k dispozici specifikace. Komunikace probíhá po blocích, které mají tuto strukturu: Zřejmě z historických důvodů je většina odvozena od DOSového I/O rozhraní (OPEN, CLOSE, ...). Dále obsahuje SMB příkazy pro obsluhu tiskáren a pár dalších drobností. S tím jak se se protokol vyvíjel, měnil se a proto probíhá na začátku spojení vyjednávání o verzi protokolu.

2.4. Přehled portů jednotlivých služeb

netbios-ns      137/udp     #NETBIOS Name Service
netbios-dgm     138/udp     #NETBIOS Datagram Service
netbios-ssn     139/tcp     #NETBIOS Session Service
microsoft-ds    445/udp     #Direct-Hosted Service
microsoft-ds    445/tcp     #Direct-Hosted Service

3. Instalace

Nejprve Sambu stáhneme z oficiálních stránek projektu (
www.samba.org) - aktuální verze je 2.2.6. Poté následuje rozbalení a klasicky configure, make a make install:
wget http://samba.kn.vutbr.cz/samba/ftp/samba-2.2.6.tar.gz
tar xzf ./samba-2.2.6.tar.gz
cd ./samba-2.2.6/source

./configure --with-logfilebase=/var/log/samba --with-smbmount --mandir=/usr/man
make
make install
Zmíním ještě některé zajímavé přepínače:
--with-configdir=/etc/samba adresář pro konfiguráky
--enable-cups zapne podporu tisku pomocí Common Unix Printing System
--with-automount
--with-smbmount
Podpora pro Automount a Smbmount
--with-krb4=base_dir
--with-krb5=base-dir
Podpora Kerberos autentifikace
--with-acl-support podpora Access Control Lists pro podrobnější nastavování přístupových práv. Je třeba použít souborový systém s podporou ACL (např. XFS)

4. Konfigurace

Veškerá nastavení Samba serveru se provádí v souboru smb.conf. Samba má opravdu velmi mnoho různých voleb a přepínačů, já se zmíním jen o těch důležitějších. Nejprve tedy globální nastavení.

4.1. Globální nastavení

[global]

## základní nastavení serveru 

	workgroup = TUPESYFREENET               # NT-Domain-Name nebo Workgroup-Name
	server string = Samba pro Tupesy        # komentář
	hosts allow = 192.168.0. 127.0.0.1      # omezení přístupu
	log file = /usr/local/samba/var/log.%m  # log zvlášť pro každý stroj
	log level = 2			        # úroveň logování
	max log size = 50 			# in kB

	security = user 			# pro jednoduché sdílení použít 'share'
	socket options = TCP_NODELAY		# optimalizace výkonu

	interfaces = 192.168.0.3/24		# omezení Samby dle rozhraní

## Procházení sítě

	# Local Master je stroj, který poskytuje procházení lokální subsítí
	# pokud zde nenastavíme yes, proběhnou na tento post volby  
	local master = yes

	# Domain Master je stroj, který slučuje seznamy z jednotlivých
	# podsítí a umožňuje tak procházení více podsítí
	; domain master = yes

## Wins

	# Samba může jednat jako NetBios Name Service server nebo klient
	; wins support = yes     		# Samba jako server
	; wins server = w.x.y.z  		# Samba jako klient

## Hesla a Authentizace

	encrypt passwords = yes 		# kryptování hesel pro Win98 a výš
	unix password sync = yes		# synchronizovat unixová hesla s hesly Samby
	; pam password change = yes		# unixová hesla měnit pomocí PAM

## Domain Control

	; domain logons = yes 			# Samba jako Primary Domain Controller
	; logon script = %m.bat 		# logovací skripty zvlášť pro jednotlivé stroje...
	; logon script = %U.bat 		# ...nebo pro jednotlivé uživatele

## tisk

	load printers = yes			# automaticky načte při startu tiskárny
	; printing = bsd			# tiskový subsystém: bsd, sysv, plp, lprng, aix, hpux, qnx
	; printer admin = root, +ntadmin 	# uživatelé a skupiny administrující tiskárny

## Winbind

	# Winbind umožňuje uživatelům Windows NT Domain logování na unixový stroj

	; winbind uid = 10000-65000			# uid rezervovaná pro WinNT uživatele
	; winbind gid = 10000-65000			# gid rezervovaná pro WinNT uživatele
	; winbind template homedir = /home/%D/%U 	# homy WinNT uživatelů
	; winbind template shell = /bin/sh		# a jejich shell

4.2. Nastavení sdílených prostředků

Prokaždý sdílený prostředek uvedeme do smb.conf vlastní sekci. Vyjímkou jsou sekce homes a printers, které zastupují celé skupiny prostředků. Možnosti konfigurace jsou velmi bohaté, podrobné informace viz man smb.conf. Zde uvedu jen některé příklady možného nastavení.

# pomocí sekce homes můžeme nastavit sdílení domovských adresářů
# pro mnoho uživatelů bez nutnosti uvádět zde každého z nich

[homes]
     comment = Home Directories
     browseable = no
     writable = yes
     valid users = %S

# pomocí sekce printers můžeme nastavit sdílení všech tiskáren
# bez nutnosti uvádět zde každou z nich

[printers]
   comment = All Printers
   path = /usr/spool/samba
   browseable = no
   # Set public = yes to allow user 'guest account' to print
   guest ok = no
   writable = no
   printable = yes

# příklad adresáře pro dočasné soubory

[tmp]
   comment = Temporary file space
   path = /tmp
   read only = no
   public = yes

# neveřejná tiskárna přístupná jen některým uživatelům

[laser]
   comment = Laserovka u Kutyho
   valid users = kuty, kutas
   path = /homes/laser
   printer = laser
   public = no
   writable = no
   printable = yes

# kutyho soukromý adresář

[fredsdir]
   comment = Fred's Service
   path = /share/kuty
   valid users = kuty
   public = no
   writable = yes
   printable = no


5. Spouštění Samba serveru

Poté, co jsme Sambu přeložili, nainstalovali a patřičně nakonfigurovali, můžeme ji konečně spustit. Spustit Sambu je velmi jednoduché, postačí posloupnost příkazů (jako root):
/usr/local/samba/bin/smbd -D
/usr/local/samba/bin/nmbd -D