Samba

Vladimír Hloušek, xhlouse1 (at) mail.muni.cz


Obsah


Co je to Samba

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 a CIFS

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/udpNETBIOS name service ("obdoba DNS" pro protokol NETBIOS)
138/udpNETBIOS datagram service (prohlížení počítačů v síti - browsing)
139/tcpNETBIOS session service (vlastní sdílení souborů s pomocí NETBIOS)
445/tcpSMB 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).

Instalace

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).

Součásti Samby

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.

Konfigurace

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:

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.

Synchronizace hesel

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.

Ukázka konfiguračního souboru

[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ů

Literatura

  1. Samba docs http://www..org/samba/docs/
  2. Samba howto http://www.tldp.org/HOWTO/SMB-HOWTO.html