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:
137/UDP - name resolving;
138/UDP - browsing (prohlížení sítí);
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:
- smbd (SMB server) - démon odpovědný za správu sdílených zdrojů mezi klienty a Samba serverem.
Naslouchá na portu 139/TCP, pro každé spojení vytvoří nový proces, který bude klienta obsluhovat a ukončí
se až poté, co se klient odpojí. Démon obsluhuje SMB požadavky, stará se o autentizaci klientů a zamykání souborů.
Po zaslání signálu HUP se reloaduje konfigurační soubor, což neovlivní již započaté session. Signály
USR1 a USR2 snižují resp. zvyšují log level o 1. Abychom se vyhnuli poškození dat, neměli bychom
démona ukončovat signálem KILL.
- nmbd (Nameserver) - démon, který plní funkci jednoduchého WINS (Windows Internet Name Service) a
NetBIOS (Network Basic Input/Output System, viz RFC 1002 a RFC 1001 ) nameserveru -
čeká na dotazy stanic a příslušně na ně odpovídá. Defaultně je NetBIOS jméno počítače jeho hostname.
Mimojiné umožňuje zjištění (browsing) sdílených prostředků. Může sloužit jako local master browser
nebo domain master browser.
- winbindd - tento démon může vykonávat funci mapování uživatelských účtů. Ve většině případů se nepoužívá.
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:
# ./configure [options]
# make
# make install
Položku options můžeme zjistit pomocí parametru --help nebo z dokumentace.
Spuštění
- ručně:
# /usr/sbin/smbd -D
# /usr/sbin/nmbd -D
- stand-alone démon (nejčastější): zajišťuje startovací skript /etc/init.d/smb.
- (x)inet: /etc/services musí obsahovat:
netbios-ssn 139/tcp
netbios-ns 137/udp
Při použití inetd musí soubor /etc/inetd.conf obsahovat:
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
V případě použití xinetd musí existovat v /etc/xinetd.d/ soubory
SMB xinetd:
service netbios-ssn
{
socket_type = stream
protocol = tcp
wait = no
user = root
group = root
server = /usr/sbin/smbd
}
NMB xinetd:
service netbios-ns
{
socket_type = dgram
protocol = udp
wait = yes
user = root
group = root
server = /usr/sbin/nmbd
}
Posledním krokem je načtení konfiguračních souborů:
# kill -HUP (x)inet_process_PID
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).
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