Pro komunikaci mezi softwarem a síťovým hardwaru v malých LAN (Local Area Network) byl vyvinut za spolupráce firem IBM a Sytec protokol NetBIOS (Network Basic Input Output System). Později přibyla do NetBIOSu možnost přesměrovat I/O operace, čímž bylo možno sdílet disky. Protokol pro sdílení disků byl nazván SMB, nyní CIFS.
NetBIOS byl primitivní protokol, ale poskytoval API (Application Programming Interface), ze kterého schopné hlavy vymyslely protokoly vyšší úrovně s širšími možnostmi. První byl NetBEUI (NetBIOS Enhanced User Interface) od IBM, další pak IPX/SPX a hlavně TCP/IP. Samba implementuje NetBIOS len nad TCP/IP.
Později byl SMB protokol zdokonalen o možnost koexistence TCP/IP a NetBIOSu v mezi sebou propojených lokálních sítích, protože NetBIOS byl navržen pro izolované LAN. NetBIOS identifikoval stanici 16bitovým jménem, ale TCP/IP unikátní IP adresou. Propojení těchto dvou označení dalo tedy vzniknout oněm zdokonalením SMB, tak jak je známe dnes. CIFS rozšiřuje možnosti protokolu SMB, používá DNS jména počítačů místo NetBIOS-ových jmen, Unicode, atd.
Démon smbd obsluhuje vlastní sdílení souborových systémů a tiskových služeb pro klienty. Nejprve se spojí s portem
139 a naslouchá požadavkům. Při každé autentizaci klienta sesmbd zkopíruje; originál se vrátí na port 139 pro nové požadavky
a kopie obsluhuje připojení klienta. Tato nová kopie také změní svůj aktuální identifikátor uživatele z uživatele root
na autentizovaného uživatele. Kopie zůstává v paměti tak dlouho, dokud trvá připojení klienta.
Smbd načítává svůj
konfigurační soubor každou minutu (v případě jeho změny), nebo je možno vynutit znovunačtení konfigurace zaslaním signálu SIGHUP.
Znovunačtení konfigurace nemá vliv na již ustanovené spojení.
Démon nmbd je odpovědný za obsluhu požadavků jmenného serveru NETBioes. Nejprve se spojí s portem 137; na rozdíl od smbd však nevztvoří pro každý dotay instanci sebe sama. Kromě požadavků jmenného serveru zpracovává také požadavky od prohlížečů, prohlížečů domén a serverů WINS.
Name resolution
Může se uskutečňovat dvěma způsoby:
Broadcast -- klient hledající server určitého jména vyšle broadcast signál ke všem strojům v síti a čeká na odpověď ve formě IP adresy
Point-to-point -- zapojuje se do hry tzv. NBNS (NetBIOS Name Serviceserver -- Microsoft nazval svoji implementaci NBNS WINS
(Windows Internet Name Service) -- dnes používáno častěji -- každý stroj při vstupu do sítě zanechá na NBNS serveru svoje
jméno a IP adresu (a příp. popis) a když je pak kýžený stroj v síti nějakým jiným hledán,
dotazuje přímo NBNS server, který shromažďuje informace o připojených serverech a jejich IP adresách
Browsing
V LAN zůčastněné počítače dělají volby počítače, který bude LMB (Local Master Browser). LMB může být též určen správcem externě
(tj. socialismus v sítích, jinak panuje všpočítačová demokracie). Vítěz voleb pak pojme speciální NetBIOSové jméno
(kromě ostatních, které by měl), které ho odlišuje od ostatních.
LMB udržuje aktuální seznam dostupných služeb; tuto nabídku vidíte při otevření Okolních počítačů ve Windows.
Navrch k LMB existují ještě DMB(Domain Master Browser), které se používají v situaci, kdy je třeba udržovat
aktuální seznam dostupných služeb pro více propojených (routovaných) LAN sítí. Každý LMB pak pomocí NBNS spolupracuje se
svým DMB, aby na DMB byly stále aktuální informace (ve Windows NT), kde na systému DMB stojí celý networking, ale může
promítnutí se změn na jednotlivých LMB v DMB trvat i hodinu. :--))
Pro spuštění smbd a nmbd jako démonů použijeme přepínač -D (odpojí se od terminálu a běží na pozadí). Další možnost je spouštět je prostřednictvím inetd nebo xinetd. Samba obsahuje ještě jednu méně používanou službu winbind (démon winbindd), pomocí které umíme získat informace o uživatelích a skupinách z Windows NT serveru a autentizovat uživatele oproti tomuto serveru.
Chceme-li zobrazit nabídku serveru, použijeme parametr -L
smbclient -L jméno_serveru
Pro přístup ke sdílenému diskovému prostředku použijeme příkaz
smbclient //server/share
Dostane se nám prostředí podobného ftp. Po připojení můžeme procházet adresáře příkazy cd, dir, ls. Pro přenos, příkazy get, put, mget, mput.
Vzdálený přístup k tiskárnám
spustíme smbclient s prepínačem -P a následně príkazem print odešleme soubor na tiskárnu
smbclient //server/printer -P
smb:> print soubor
K serveru se smbclientem implicitně přihlašujeme pod jménem, pod kterým jsme prihlášeni v systému. Pokud se chceme přihlásit jako jiný uživatel, použijeme přepínač -U
smbclient //server/share -U user
Je-li jádro nakonfigurováno tak, aby podporovalo souborový systém SMB (při kompilaci parametr --with-smbmount, bez něj by příkaz mount neuměl připojit tento souborový systém a navíc se vytvoří soubory smbmount a smbumount), můžete do systému připojit disk se systémem Samba stejně jako diskový oddíl NFS.
Pro připojení sdíleného souborového prostředku zadejte
mount -t smbfs -o username=user //server/share /přípojný_bod
Příkaz mount spustí mount.smbfs. Příkazy smbmount a smbumount jsou jen odkazy na mount.smbfs.
Dalšími užitečnými nástroji na straně klienta jsou:
nmblookup - požívá sa na vyhledávání NetBIOS-ových jmen strojů v síti, na zjištění jejich IP adres atd.
smbtree - vypíše seznam serverů v síti a prostředků, které sdílejí
Sekce [global] obsahuje parametry, které definují vlastnosti serveru jako celku a implicitní parametry pro všechny ostatní sekce. Některé z parametrů:
Sekce [share] popisuje sdílené adresáře resp. tiskárny
Tip: Pokud má váš Samba server více než jedno ethernetové rozhraní, smbd se může navázat na to špatné. Proto můžete vynutit
jeho navázání ke konkrétnímu rozhraní přidáním řádku do global sekce.
interfaces = 192.168.1.1/24
encrypt passwords = yes
Protože systém Windows používá jiný algoritmus transformace kličů pro hesla, musí si Samba zachovat vlastní soubor s hesly pro podporu
zašifrovaných hesel. (např v soubore /etc/samba/smbpasswd) Pro každého uživatele, který přistupuje k Samba serveru a má unixový účet na serveru, musíme vytovřit
v této databazi příslušný záznam s heslem.
Seznam existujících uživatelů, z něhož můžete implementovat podporu zašifrovaných hesel, získáte rychle pomocí skriptu mksmbpasswd.sh
Vygeneruje smbpasswd ze systémové tabulky passwd, neobsahuje samozřejmě validní hesla.
Pro vytváření a změnu hesel slouží příkaz smbpasswd. Protože smbpasswd používá standardní protokol pro komunikace se serverem, můžete jej použít i ke změně hesla na vzdáleném počítači.
Synchronizice unixových a Sambových hesel:
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n
První řádek povoluje synchronizaci hesel. Další nastavuje příkaz pro změnu unixového hesla a parametr chat definuje, jak se zobrazí výstup příkazu na změnu hesla. Synchronizace funguje pouze pro běžné uživatele. Root musí měnit hesla zvlášť.
Povolení přístupu bez hesel
Potřebujete-li z nějakého důvodu umožnit uživatelům přístup bez hesel (což není dobrý nápad), můžete to provést příkazem smbpasswd s
parametrem -n
smbpasswd -n username
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = tiskarny
path = /var/spool/lpd/samba
browseable = yes
printable = yes
public = yes
guest ok = yes
writable = no
[vyvoj]
comment = Vyvoj software
path = /home/vyvoj
public = no
create mask = 0770
directory mask = 0770
writable = yes
browseable = no
printable = no
writelist = @vyvojari
[private]
path = /home/user/janda_private
valid users = janda
public = no
writable = yes
browseable = no
printable = no
create mask = 0700
[public]
path = /home/public
public = True
only guest = False
writable = True
printable = no
directory mask = 0777
create mask = 0777
[muzikanti]
path = /home/muzikanti
public = no
only guest = False
valid users = janda, broum, mozart, bach
writable = True
printable = no
directory mask = 0755
create mask = 0755