Samba

Marek Kluz <xkluz@fi.muni.cz>


Obsah


Co je to Samba (SMB/CIFS)

Samba je softwarový nástroj, který umožňuje linuxovému/unixovému systému sdílení prostředků (soubory, tiskárny, ACL,...) a dalších služeb (autentizace při logování do domény, překlad jmen,...) prostřednictvím sítě. Používá SMB (Server Message Block) protocol, který je de facto identický Microsoftimu protokolu CIFS (Commont Internet File System). SMB/CIFS je obdoba NFS ve windowsovském prostředí, který používá následující porty: Samba je nástroj, díky němuž může linuxovský/unixovský server komunikovat stejným protokolem jako win. klient. Linuxový/unixový server se tímto může jevit win. klientům jako Microsoft network server a poskytovat stejné služby. Nebo linuxovské/unixovské stanice mohou použít Sambu k přistupu jako win. klienti. Samozřejmě nic nebrání tomu, aby byla Samba použita pro vytvoření sítě klient-server pouze v čistě linuxovém/unixovém prostředí (napr.: kdyz nám z nějakého důvodu NFS nevyhovuje).

V současné době jsou nejrozšířenější verze 2.2.x a 3.0.x.

Součástí balíku Samba

V případě, že chceme provozovat Samba server jsou stěžejní dva démoni:
Další programy obsažené v distribuci:

Instalace

Sambu můžeme nainstalovat ze zdrojových kódů, které lze stáhnout z oficiálních stránek Samby (
www.samba.org). Druhou, pohodlnější a v dnešní době více používanou možností je instalace z předkompilovaných balíků (rpm), které jsou dostupné pro většinu linuxových distribucí. V případě instalace ze zdrojových kódů postupujeme obvyklou cestou: Položku options můžeme zjistit pomocí parametru --help nebo z dokumentace.

Spuštění


Konfigurace serveru

Konfigurace Samby je uložena v souboru smb.conf, který se obvykle nachází v /etc/samba. Konfigurace se provádí nejčastěji přímo editací smb.conf, někteří uživatelé však dávají přednost grafickým rozhraním (např. swat - musí však být dobře
nakonfigurován). Soubor smb.conf se skládá ze sekcí, jejichž název je uzavřen v hranatých závorkách. Jméno sekce je totožné se jménem sdíleného prostředku. Existují tři speciální sekce: [global], [homes] a [printers], ostatní námi nadefinované sekce představují konkrétní sdílený prostředek.

Globální nastavení

Obsahuje parametry, které definují vlastnosti celého serveru (jméno, skupina, ...) a parametry, které implicitně platí pro všechny ostatní sekce (v připadě, že v daných sekcích nejsou definovány).

[global] ## základní nastavení serveru workgroup = p090 # NT-Domain-Name nebo Workgroup-Name netbios name = agaue # NetBIOS jméno serveru (max. 15 zn.) server string = Samba %v pro lab.fi.muni.cz # komentář hosts allow = 10.0. 127.0.0.1 # omezení přístupu ;host deny = w.x.y.z # omezení přístupu log file = /var/log/samba/log.%m # log zvlášť pro každý stroj log level = 2 # úroveň logování max log size = 50 # v kB security = user # defaultní nastavení (login se ověřuje vůči # passwd a heslo vůči smbpasswd) guest account = smbuser # jméno uživatele pro anonym. přístup map to guest = bad password # při špatném hesle přepnout na guesta (smbuser) socket options = TCP_NODELAY # optimalizace výkonu (možnost udání vel. buff.) ;interfaces = # rozhraní na kterých bude samba poskytovat své # služby (default. všechny s broadcastem bez # 127.0.0.1) ## Procházení sítě (Browsing) # Local Master Browser (LMB)je stroj, který poskytuje browse-list lokální subsítě. # Defaultní hodnota je yes. Každých 15 min probíhá volba LMB podle různých kritérií # (uptime, ...). ;local master = yes # Domain Master Browser (DMB) je stroj, který sbírá browse-listy z jednotlivých # podsítí a umožňuje tak procházení více podsítí. Defaultě DMB-rem se stává WinNT PDC ; 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 Autentizace encrypt passwords = yes # v případě komunikace s win98 a výš., musíme povolit, protože # win98 a vyšší mají default šifrování hesel zapnuté ## 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 pro sdílení max print jobs = 100 # max. počet tiskových úloh printcap name = /etc/printcap # seznam dostupných tiskáren ; print command = /usr/bin/lpr -P%p -r %s # příkaz použitý k tisku ; printing = bsd # tiskový subsystém: bsd, sysv, plp, lprng, aix, hpux, qnx ; printer admin = root, +ntadmin # uživatelé a skupiny administrující tiskárny

Nastavení sdílených prostředků

Pro každý sdílený prostředek uvedeme do smb.conf vlastní sekci. Vyjímkou jsou sekce [homes] a [printers], které zastupují celé skupiny prostředků. Jelikož možnosti konfigurace Samby jsou opravdu široké, uvedeme zde pouze základní nastavení (více informací naleznete v man smb.conf nebo v dokumentaci).

Sekce [homes] - sdílení domovských adresářů

V případě, že se klient pokusí přistoupit ke sdílení které neexistuje v smb.conf, se Samba podívá na nastavení sekce [homes]. Jesliže sekce existuje, předpokládá, že požadované sdílení je domovský adresář uživatele a zkontroluje zda-li je toto jméno v databází hesel (/etc/passwd). V případě úspěchu autentizuje uživatele oproti smbpasswd (v připadě, že je šifrování hesel vypnuté použije /etc/passwd). Po úspěšné autentizaci poskytne uživateli jeho domovský adresář.
# sekce homes nastavujem sdílení domovských adresářů uživatelů
[homes]
     comment = Home Directories				# komentář, popis položky
     browseable = no					# položka nebude viditelná při prohlížení dostupných
							# sdílení (browsing a browse-list)
     writable = yes					# možnost zápisu
     valid users = %S					#
     create mode = 0664					# = create mask
     							# ekvivalenty umask
     directory mode = 0775				# = directory mask

Sekce [printers] - sdílení tiskáren

U sekce [printers] se Samba chová podobně jako u sekce [homes], v případě, že chce klient přistoupit ke sdílení, které není v smb.conf a položka není nalezena ani v databázi hesel (/etc/passwd), Samba se pokusí ověřit tiskové sdílení. Bude číst soubor "printer capabilities" (obvykle /etc/printcap viz. testparm) a hledat požadované sdílení. V případě úspěchu vytvoří sdílení tiskárny (viz testprns).
# sekce printers nastavuje sdílení tiskáren
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = yes
   guest ok = yes					# nebude vyžadováno heslo pro přístup pod
							# oprávněním guesta (smbuser)
   read only = yes
   printable = yes					# možnost tisku (práva k spool files)

Uživatelem definované sekce

# příklad adresáře pro dočasné soubory
[tmp]
   comment = Temporary
   path = /tmp
   guest ok = yes
   ;public = yes					# synonymum pro guest ok
   ;valid users = xkluz, xcaha, xmaly			# koho chceme povolit
   browsable = no
   writable = yes

Nyní si můžeme pomocí nástroje testparm ověřit syntaxi smb.conf.
Pozor poznámky musí být na samostatném řádku, proto nelze použít výše uvedené příklady (použito jen s estetického důvodu).

SMB účty

Dále musíme založit systémový účet uživateli smbuser, stačí do /etc/passwd přidat řádek:
   smbuser:x:503:503:ucet pro sambu:/dev/null/:/sbin/nologin
a do /etc/group řádek:
   smbuser:x:503
Jelikož máme zapnutou položku šifrování hesel (encryp password), jsou hesla oveřována vůči /etc/samba/smbpasswd. To znamená, že pro každého uživatele, který bude používat Sambu, musíme vytvořit heslo (vyjimkou je u nás smbuser, který je mapován na učet guesta, čili nepotřebuje žádné heslo pouze platný systémový účet). Heslo pro uživatele vytvoříme příkazem:
   smbpasswd -a user
Existuje také nástroj mksmbpasswd.sh pro export uživatelských účtů (s neplatnými hesly) ze systémové tabulky passwd. Samba poskytuje možnost synchronizace hesel s unixovými hesly, když máme v globální sekci parametr:
   unix password sync = yes
V takovém případě dojde při změně Sambovského hesla k změně unixovského hesla pomocí volání:
   passwd program = /usr/bin/passwd
   passwd chat = *new*password* %n\n *new*password* %n\n *changed*

Spolupráce s doménami NT

Samba verze 3.0.x a vyšší může být nakonfigurována jako PDC (Primary Domain Controller). V takovém případě musí její konfigurační soubor obsahovat:
[global]
   netbios name = AGAUE
   workgroup = P090
   passdb backend = ldapsam  		# může být jedno z: smbpasswd, tdbsam, ldapsam
   os level = 33			# musí být nastaven na 32 a výš
   preferred master = yes
   domain master = yes
   local master = yes
   security = user
   domain logons = yes
   logon path = \\%N\profiles\%U logon
   drive = H:
   logon home = \\homeserver\%U\winprofile
   logon script = logon.cmd

[netlogon]				# každý PDC poskytuje tuto sekci, ve které se nachází logovací skripty
					# a jiné nástroje potřebné pro příhlášení do domény
   path = /var/lib/samba/netlogon
   read only = yes
   write list = ntadmin

[profiles]				# toto sdílení slouží pro uchovávání uživatelských profilů
   path = /var/lib/samba/profiles
   read only = no
   create mask = 0600
   directory mask = 0700
Samba poskytuje klientským stanicím možnost přihlášení se do domény pomocí důvěryhodných účtů (Domain machine member trust accounts). Tato možnost poskytuje uživatelům i administrátorům řadu výhod, zejména jednodušší a flexibilnější obslužné a přihlašovací rutiny. Pro každou klientskou stanici musíme vytvořit "Machine Trust Account", kterým se stanice vůči sambě autentizují. Existují tři cesty jak tokový účet vytvořit, my zde uvedeme pouze jednu, používající příkazovou řádku unixu. Název důvěryhodného účtu klientské stanice bude končit znakem $. Do /etc/passwd doplníme:
   sirene15$:x:505:100:stroj v ucebne B311:/dev/null:/sbin/nologin
Nyní přidáme samba heslo pro stroj sirene15:
   # smbpasswd -a -m sirene15