Samba

Roman Stanec, xstanec@fi.muni.cz, 2005-04-13


Obsah





Co je to Samba
Samba je souborový a tiskový server pro Unixové systémy. Implementuje protokol SMB(Server Message Block) dnes také nazývaný jako CIFS(Common Internet File System), používaný operačními systémy Microsoft. To znamená, že použitím samby dosáhneme sdílení prostředků mezi počítači s OS Windows a Unix.

Samotný protokol SMB(CIFS) se tedy často mění aby vyhovoval aktuálním verzím MS Windows. Používají se následující porty:
137/UDP pro name resolving - emulace WINS(Windows Internet Name Server)
138/UDP pro browsing sítě - probíhá zde broadcast vysílání, kterým dávají servery vědět o své přítomnosti
139/TCP pro file&printer sharing


Instalace
Instalace probíha standardním způsobem. Buďto z balíků Vaší distribuce, nebo použitím zdrojových kódů (configure, make, make install).
Zdůraznil bych, že v případě instalace ze zdrojových kódů se nevytvoří potřebný konfigurační soubor smb.conf. Musíte jej vytvořit sami ve složce určené v Makefile. Jak má takový smb.conf vypadat bude popsáno v sekci konfigurace .


Konfigurace
Konfigurace samby se provádí editací souboru /etc/samba/smb.conf (jeho přesné umístění záleží na distribuci, Fedora Core, Debian jej mají v /etc/samba/smb.conf):

Globální konfigurace samby může vypadat například:

[global]
guest account = nobody
invalid users = root
character set=iso8859-2
(samba 3.x: unix charset = ISO8859-2)
client code page=852
(samba 3.x: dos charset = 852)
security = share
workgroup = k4
wins support = no
wins server = wins.trdlo.cz
os level = 30
domain master = no
local master = no
preferred master = no

U parametru guest account není nutno použít zrovna usera nobody.

Nasdílení adresáře tak, aby byl přístupný všem, bez nutnosti zadávání usera a hesla:

[mp3]
comment=hudba
browseable=yes
path=/opt/hudba
guest ok=yes
writable=no

Nyní budeme chtít sdílet adresář pod heslem. Pro tento ůčel je třeba definovat v sekci global "guest account" (viz výše). Doporučuji usera nobody, anonymous apod. User ale MUSÍ existovat reálně v systému! Dále jsou pro nás důležité tyto parametry:

encrypt passwords =yes
smb passwd file = /etc/samba/smbpasswd

Opět se může cesta k souboru smbpasswd v různých distribucích lišit, pro Fedora Core a Debian je však výše uvedená. Nyní si vytvoříme heslo pro sambu pro usera nobody.

smbpasswd -a nobody
New SMB password:NOBODYPW
Retype new SMB password:NOBODYPW
Added user nobody.

Teď tedy máme uživatele nobody s heslem do samby "NOBODYPW". Už jen zbývá nadefinovat zdroj tak, aby k němu měl přístup jakýkoliv uživatel, pouze se znalostí správného hesla:

[data]
comment=videodata
browseable=yes
path=/opt/data
user only=no
writable=no 
username=nobody

Pokud chceme nasdílet adresář pro zápis, zvolíme parametr writable=yes. Server i klienta spouštíme jako daemon, tedy příkazy smbd -d, nmbd -d. Jestli služba beží můžeme ověřit příkazem ps:

ps ax
.
.
6397 ?        S      0:00 nmbd -D
7002 ?        S      0:11 smbd -D
.
.

Dále si ověříme, že to co jsme nasdíleli opravdu nasdílené je.

smbclient -L localhost
added interface ip=........... bcast=............ nmask=255.255.255.0
Password:
Domain=[XX] OS=[Unix] Server=[Samba 2.2.2]

        Sharename      Type      Comment
        ---------      ----      -------
        mp3            Disk      hudba
        data           Disk      videodata

        Server               Comment
        ---------            -------
        TRDLO                Samba server [trdlo] 2.0.9
        MYSRV                roman (Samba 2.2.2)

        Workgroup            Master
        ---------            -------
        TRDLOGRP             TRDLO

Nasdílené položky jsou vylistované pod sharename.

Celý konfigurační soubor bude tedy vypadat nějak takto (řádky začínající znaky ";" nebo "#" jsou ignorovány a slouží jako komentáře).
Příklad je konfigurační soubor samby verze 2.2.2-2:

# Global parameters
[global]
client code page = 852
(samba 3.x: dos charset = 852)
workgroup = K4
server string = john (Samba %v)
security = SHARE
encrypt passwords = Yes
obey pam restrictions = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n .
syslog = 0
max log size = 1000
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=4096 SO_RCVBUF=4096
character set = ISO8859-2
(samba 3.x: unix charset = ISO8859-2)
os level = 30
preferred master = False
local master = No
domain master = False
dns proxy = No
wins server = wins.trdlo.cz
invalid users = root
create mask = 0700
directory mask = 0700

[mp3]
comment = hudba
path = /opt/mp3
guest ok = Yes

[data]
comment = videodata
path = /opt/data
username=nobody

Váš konfigurační soubor si můžete zkontrolovat příkazem testpart například následovně:
testparm /etc/samba/smb.conf

K celé konfiguraci samby je možné použít web-based interface, jedním z nich (a nejznámějším) je SWAT (lze jej nalézt přímo na oficiálních stránkách samby).


Rozdělení samby

smbd - samba server poskytující CIFS služby klientům - hlavní část samby. Funguje tak, že pro každou session se vytvoří nový proces, který bude klienta obsluhovat a zkončí, až se klient odpojí. Konfigurační soubor je reloadován periodicky, nebo zasláním HUP signálu (neovlivní žádnou již otevřenou session). smbd dále reaguje na signál USR1(zvýší loglevel o jedničku) a na signál USR2(sníží loglevel o jedničku). Ukončení je doporučováno signálem TERM, ne signálem KILL, aby se nepoškodili data.

nmbd - NetBIOS name server, který poskytuje NetBIOS jména klientům. Může fungovat i jako WINS.

smbpasswd - sloužící ke změně hesel na kterémkoliv serveru
například: smbpasswd -U user -r svrb1000.trdlo.cz - změna hesla (svrb1000.trdlo.cz je jméno stroje, kde se má heslo změnit)

smbclient - klient pro přístup k SMB/CIFS serveru. Většinou používán z Unixu na spojení s Windows počítači.
například: smbclient -L pc1010.trdlo.cz -U user -W DOMAIN - vypíše všechny sdílené prostředky

smbmount - namountuje přímo sdílenou složku.
například: smbmount //svrb1000.trdlo.cz/install /mnt/svrb1000/install -o username=user/DOMAIN%password


Zdroje
domovská stránka samby: www.samba.org