Balík programů Samba (aktuálně jsou verze řady 3) slouží ke sdílení souborů a tiskáren pomocí protokolů SMB a CIFS. Díky Sambě je možné zpřístupnit data v Unixu i pro uživatele v systému MS Windows.
SMB (Server Messaging Block) je starší protokol navržený pro sdílení souborů a tiskáren. Původně byl vytvořen firmou IBM. Microsoft ho převzal, mírně vylepšíl a přejmenoval na CIFS (Common Internet File System). Protokol CIFS oproti SMB podporuje tzv. Unixové rozšíření (práva, uid, symbolické odkazy apod). Budeme se zabývat implementací těchto protokolů nad TCP/IP. Starší verze SMB a CIFS neumí běžet přímo nad TCP/IP, ale potřebují ještě jako mezivrstvu protokol NETBIOS (NETBIOS over TCP/IP). Microsoft uvolnil s Windows 2000 implementaci, která běží nad TCP/IP přímo bez protokolu NETBIOS. Samba toto pochopitelně také podporuje. Pro služby jsou standardně využívány následující porty:
| port/protokol | popis |
|---|---|
| 137/udp | NETBIOS name service ("obdoba DNS" pro protokol NETBIOS) |
| 138/udp | NETBIOS datagram service (prohlížení počítačů v síti - browsing) |
| 139/tcp | NETBIOS session service (vlastní sdílení souborů s pomocí NETBIOS) |
| 445/tcp | SMB Direct (sdílení souborů, SMB/CIFS přímo přes tcp bez NETBIOSu) |
Samba může pracovat jako standartní server, či jako primární/záložní řadič domény Windows NT (PDC/BDC).
Samba je součástí většiny běžných serverových Linuxových distribucí a proto doporučiji využít balík, který je ve vaší distribuci. V případě, že by si chtěl někdo kompilovat Sambu sám, stačí stáhnout zdrojové kódy na adrese http://www.samba.org/ a použít obvyklé instalační postupy (configure a make).
Samba obsahuje několik desítek různých nástrojů, z nichž nejzajímavější jsou:
Pro podrobnější přehled doporučuji prostudovat dokumentaci.
Konfigurační soubor se jmenuje /etc/samba/smb.conf. Má následující strukturu:
[sekce1]
volba a = neco
volba b = neco
; zakomentovana volba = neco
volba = dlouha \
hodnota
[sekce2]
volba se substituci = a b %u
# každý řádek, který začíná ; nebo # se považuje za komentář
Sekce reprezentuje název sdíleného prostředku (služby) s několika výjimkami:
[global]obsahuje volby, které se týkají celého serveru, a výchozí hodnoty pro volby jednotlivých služeb. Základní globální volby jsou:
[homes]řídí sdílení domovských adresářů uživatelů
[printers]to stejné pro tiskárny
Nejdůležitější volby sdílených prostředků:
Ve vetšině voleb je možno používat řetězcové substituce pomocí znaku % (např. %u je jméno uživatele). Více informací o konfiguračním souboru lze nalézt v manuálové stránce (man smb.conf). Na konci referátu je umístěna okomentovaná ukázka. Vlastní server nejlépe spustíme startovacím skriptem (v Gentoo /etc/init.d/samba start). Poté si například vypíšeme sdílené zdroje pomocí smbclient -L server.
Samba standartně používá vlastní formát hesel (pro popis formátu se doporučuji prostudovat příslušnou literaturu). Je ji možné nastavit tak, že se hesla budou synchronizovat s Unixovými. Buďto pomocí modulů pam (pam_smbpass.so) nebo pomocí volání nějakého externího programu (viz ukázka). S vlastní databází se pracuje pomocí příkazu smbpasswd.
[global]
dos charset = 852
# kódová stránka pro klienty W98 -- W2000 a výše umí Utf-8,
# nesmí zde být 1250, jinak nebude čeština ve Win pracovat!!!
unix charset = ISO8859-21,270
# kódová stránka systému
workgroup = HLOHSOFT
# Netbios název pracovní skupiny/ jméno domény
netbios name = Gandalf
# jméno stroje v protokolu Netbios
map to guest = Bad user
guest account = guest
# namapuj neznámého uživatele na guest ..
passwd program = /usr/bin/passwd %u
# unixový uživatelé používají jiný formát hesel než samba --
# při změně hesla do samby zmnění i Unixové
passwd chat = *New*UNIX*password* %n\n *new*UNIX*password* %n\n *passwd:*updated*
unix password sync = yes
username map = /etc/samba/user.map
# přemapování jinak pojmenovaných uživatelů Windows na Unixové
log file = /var/log/samba3/log.%m
max log size = 150
load printers = yes
# nastavení tiskárenhttp://www.tldp.org/HOWTO/SMB-HOWTO.html
printcap cache time = 1200
# každých 1200 sekund obnov seznam tiskáren
printcap name = cups
# využij tiskový systém CUPS
browseable = yes
# povol prohlížení (tj. sdílený zdroj se zobrazí v seznamu sdílených zdrojů
# daného počítače, opakem je hodnota browseable = no, která daný sdílený
# zdroj "skryje")
security = user
# typ zabezpečení
# user = uživatelské jméno + heslo
guest ok = no
# ve výchozím nastavení nechci nechat anonymní uživatele přistupovat ke zdrojům
# sdílení domovských adresářů
[homes]
comment = Domovské adresáře
read only = No
# povol zápis
map archive = No
map hidden = No
# Zakázat mapování dosových atributů na executable bit --
# pozn: nevím o někom, kdo je poutřebuje :-)
map system = No
browseable = No
# zde je vyjimka z pravidla, ikdyž je zde no,
# tak uživatel uvidí svůj domovský adresář,
# jestliže globální hodnota je yes
# nějaká sdílená položka
[data]
comment = Oddíl data
path = /media/data
# cesta k položce
read only = No
browseable = No
# chci ji skrýt
# tiskárny
[printers]
comment = Tiskárny
path = /var/spool/samba
printable = Yes
# tiskárna musí být printable = yes
browseable = No
guest ok = no
# chci sk
# veřejně zapisovatelná položka
[tmp]
comment = TEMP
path = /tmp
browseable = yes
writable = yes
public = yes
## == guest ok = yes jedna se o veřejné sdílení
hosts allow = 10.10.10.
#povolit pouze z těchto klientů