Samba (1) - ako klient

11.08.2008 01:30 | Články | Erik Mocný

Téma Windows klient/server - Linux server je veľmi populárna a preto by som vám rád ozrejmil túto problematiku, kedy mnohí užívatelia a administrátori potrebujú zdieľať svoje súbory, tlačiarne a pod., medzi Linuxom a Windowsom. Týmto vás chcem tiež privítať pri úvodnej časti seriálu o sambe.

V dnešnej časti si načrtneme použitie samby ,,len" ako klienta, kde si pripojíme naše zdielané adresáre vo Windowse s Linuxom. Dúfam, že sa vám tento seriál bude páčiť a zúžitkujete všetky poznatky, o ktoré sa s vami veľmi rád podelím :). Myslím teda, že môžeme ísť na to a na ,,zahriatie" začneme stručným prehľadom, čo je to samba a aké sú jej možnosti. Prajem príjemné čítanie...

Čo je Samba?

Samba je softvér, resp. softvérovy balík, pomocou ktorého možete zdieľať súbory a tlačiarne s Windows klientom alebo serverom v sieti. Od verzie 3 však neposkytuje len tieto 2 služby, samba totiž môže byť integrovaná s doménou Windows Server, môže slúžiť ako PDC (Primary Domain Controller) alebo tiež ako Backup Domain Controller. Tieto serverové služby samby si priblížime v ďalších dieloch tohto seriálu, taktiež bude osobitná pozornosť venovaná dielu, kde si ukážeme ako pridať náš samba server k existujúcej doméne ADS (Active Directory Service, uvádza sa tiež len ako AD) s pomocou OpenLDAP.

Samba server pozostáva z 2 resp. 3 démonov, ktorými sú:

  • nmbd - spracúva všetky name registration a resolution requesty ako aj všetky UDP spojenia. Tento démon by mal byť spustený ako prvý.
  • smbd - spracúva všetky služby TCP/IP spojenia pre súborove a tlačové operácie. Tiež spravuje lokálnu autentifikáciu. Tento démon by mal byť spustený ako druhý v poradí, hneď po nmbd.
  • winbindd - tento démon by mal bežať v prípade, že je samba začlenená do Windows NT alebo ADS domény.

Pre vzájomnú komunikáciu v sieti, využíva samba TCP/IP protokol inštalovaný na hosťovskom servri, konkrétne to je protokol zvaný SMB (Server Message Block), ktorý má veľmi dlhý vývoj. Na ňom je postavený protokol CIFS (Common Internet File System), ktorý bol zavedený Microsoftom a s ktorým samba spolupracuje. Na konci článku nájdete odkazy na zaujímavé stránky o protokole CIFS/SMB. Len stručne popíšem, čo protokol SMB zabezpečuje.

SMB pracuje na aplikačnej vrstve sieťového protokolu a poskytuje už spomínaný zdieľaný prístup k súborom, tlačiarňam a sériovým portom medzi jednotlivými uzlami v sieti. Protokol CIFS sa stará o zdieľanie súborov. Vo Windowse beží SMB ako vrchná vrstva protokolu NetBIOS. SMB takisto poskytuje autentifikačný mechanizmus, o ktorom bude reč v ďalších častiach seriálu.

Myslím, že na úvod by to stačilo a pustíme sa do samotnej inštalácie samby.

Inštalácia

Keďže na svojom desktope používam Gentoo už pár rokov, všetky uvedené inštalačné postupy budú uvádzané práve pre túto distribúciu. Pre ostatné package-like distribúcie ako je Debian, *buntu a pod. si balíčky určite vyhľadáte na internete ;)

Pri inštalácii samby máme v Gentoo k dispozícii viacero USE flagov, ktoré bude dobré, ak si povolíme už hneď na začiatku, aby sme sa nabudúce vyhli rekompilovaniu samby.

Nasledujúce USE flagy si teda pridajte do súboru /etc/portage/package.use, prípadne globálne do súboru /etc/make.conf, do ktorého by ste si mali pridať aj USE flag samba:

  • acl - zahŕňa podporu pre Kerberos a povoľuje nám Access Control Lists (ACL)
  • ads - podpora pre AD
  • automount - povoľuje nám použiť auto-moutnutie shares cez /etc/fstab použitím filesystému smbfs (stará metoda) alebo cifs (nová)
  • cups - podpora pre Common Unix Printing System, teda tlačové služby
  • kerberos - pridáva podporu Kerberos pre AD
  • ldap - podpora pre Lightweight Directory Access Protocol (LDAP), ktorý nám bude treba neskôr pri použití s AD
  • pam - zahŕňa podporu pre autentifikačné moduly - pluggable authentication modules (PAM)
  • swat - podpora pre Samba Web Administration Tool (SWAT), čo je GUI pre administráciu a konfiguráciu samby
  • winbind - podpora pre windbind démon

Ak už máme naše USE flagy nastavené, možeme pustiť emerge samba. Tým sa nám samba skompiluje a nainštaluje pre použitie ako aj klient, tak aj server. My v dnešnej časti využijeme len klientskú stránku samby.

Nastavenie jadra

Ak chceme pripájať zdieľané adresáre, musíme si do jadra zakompilovať podporu pre SMB a príp. aj CIFS (odporúčam). Vojdeme teda do konfigurácie jadra, prejdeme na položku File systems, ďalej Network File Systems a tu si zakompilujeme, buď priamo do jadra, alebo ako modul položky SMB file system support a CIFS support. SMB je už v najnovšom jadre označená ako OBSOLETE, teda ako ZASTARANÁ, preto - ako môžete vidieť na screene - som si zakompiloval iba podporu pre CIFS. Mimochodom, použité jadro je 2.6.26-rc8.

Skompilujeme jadro, reštartujeme počítač a nabootujeme náš nový kernel, príp. si musíme ešte dodatočne načítať skompilované moduly. Žiadna ďalšia konfigurácia samby pre účely dnešného dielu nie je potrebná ;)

Pripojenie zdieľaných adresárov (shares)

Poznámka: všetky príkazy pre pripájanie shares vykonávame ako root.

Vytvorenie nového samba užívateľa

Pre pridanie samba usera nám poslúži príkaz smbpasswd, príklad:

smbpasswd -a <user>

namiesto "user" si samozrejme zvolíte nejakého existujúceho užívateľa (na linuxovom stroji) a následne po odklepnutí príkazu zadáte heslo :). Je to v podstate obdoba unixového príkazu passwd.

Pripojenie share pomocou CIFS (nová metóda)

Poznámka: ak máte verziu samby >= 3.0.25 musíte emergnut ďalší balík mount-cifs. Pripojenie sharu následne vykonáme príkazom:

mount -t cifs //<domain name alebo IP adresa>/<zdieľaný adresár> /<mountpoint> -o "username=<uživateľ>,uid=<uid>,iocharset=<kódovanie>,dir_mode=0770,file_mode=0660"

Položky uzavreté v <> si už každý upraví podľa potrieb.

Pripojenie share pomocou SMB (stará metóda)

Pripojenie sharu sa v tomto prípade realizuje príkazom:

smbmount //<domain name alebo IP adresa>/<zdieľaný adresár> /<mountpoint> -o username=<užívateľ>,password=<heslo>,uid=1000,umask=000

Položky uzavreté v <> si každý upraví podľa potrieb.

Následné odpojenie share sa vykonáva klasicky, príkazom umount <mountpoint>.

Môžete síce použiť obe možnosti pripojenia shares, smbmount však už naďaľej nie je ofic. podporovaná metóda a nahrádza ju mount.cifs.

/etc/fstab

Ak máte nejaký stroj, ktorý je stále online a nechce sa vám zakaždým písať tento zdĺhavý príkaz, možete si share nechať pripájať automaticky pri štarte systému a teda pridať si ďalší riadok do /etc/fstab, ktorý môže vyzerať nasledovne:

//<domain name alebo IP adresa>/<zdieľaný adresár> /<mountpoint> cifs auto,credentials=/home/user/smbcredentials,iocharset=utf8,uid=1000,umask=000,user 0 0

Keďže /etc/fstab môže čítať hocijaký užívateľ, nielen root, z bezpečnostných dôvodov nie je vhodné mať zapísané heslo priamo v tomto súbore, preto máme vytvorený súbor, tzv. credentials file (doslovný preklad je "osobné doklady", čo je vcelku výstižné :) ), v našom prípade to je /home/user/smbcredentials, ktorý má nasledovný obsah:

username=uzivatel
password=heslo

a keďže nechceme aby nám tento súbor čítal hocikto, nastavíme mu atribúty, aby ho mohol čítat a zapisovať doň jedine root:

chmod 600 /home/user/smbcredentials

Ak nám ani takéto zabezpečenie nestačí, pretože sme paranoidný :), môžeme tento súbor urobiť skrytým (ako na to, dúfam nie je potrebné vysvetľovať). Následne vyskúšame, či nám všetko funguje tak, ako má príkazom:

mount -a

po jeho vykonaní by sme mali mať pripojený náš Windows share. Ako zdielať nejaký linuxový share adresár sa dozviete v niektorom budúcom dieli, kde si predstavíme serverové možnosti samby.

Na záver ešte ozrejmenie pojmov:

  • username, password - meno,heslo windows/samba share užívateľa, ktorého sme si vytvorili
  • iocharset - nastavuje aké kódovanie sa má použiť (u mňa voľba utf8 zatiaľ vždy fungovala korektne)
  • uid - používa sa na nastavenie vlastníctva nášho mountu
  • umask - nastavuje základné oprávnenia pre všetky súbory, ktoré máme mountnuté. Umask je v podstate opozitum pre chmod a jeho hodnotu zistíme tak, že odpočítame hodnotu chmod od 777, teda napr. v našom prípade je umask = 000 teda chmod = 777.

Možno sa pýtate, ako zistiť, aké shares si vlastne môžem pripojiť? Na to slúžia buď nižšie spomínané GUI nástroje alebo príkaz smbclient. Príklad použitia:

smbclient -L <hostname/IP adresa>

Po zadaní uvidíme výpis podobný tomuto:

GUI nástroje

Prácu s konfiguráciou a administráciou samby nám môžu výrazne uľahčiť rôzne GUI nadstavby, ktoré tu ale nebudem popisovať, pretože ich je podstatne veľa. Z tých známejších len spomeniem smb4k alebo SWAT (nie, nemám na mysli protiteroristickú jednotku :) ) - jeho nastavenie si trochu opíšeme v niektorej ďalšej časti seriálu. Prehľadávať sieť cez smb:// protokol môžete aj cez Konqueror, v prípade KDE, resp. u Gnome rovnako dobre poslúži Nautilus. Kompletný prehľad GUIs pre sambu nájdete tu.

Záver

Myslím, že na úvod a zoznámenie sa so sambou tento diel splnil svoj účel, teda aspoň dúfam :). Do ďalšej časti chystám začleniť tlačové služby a zrejme aj niečo navyše, hlavne sa pokúsim pridať viac obrázkov, ak to samozrejme bude možné, nechajte sa preto prekvapiť :). Možno, že viacerím z vás nepriniesol tento úvodný diel nič nové, no kto má záujem bližšie sa zoznámiť s ďalšími možnosťami samby, resp. ho zaujímajú podrobnosti o protokole SMB, veľmi dobre poslúžia manuálové stránky príkazov a tiež aj oficiálne stránky projektu, na (nielen) ktoré odkazujú odkazy nižšie. Ďakujem vám teda, ak ste článok dočítali až sem a páčil sa. Ďalší diel je už v príprave, takže jasajte a tlieskajte :).

Akékoľvek pripomienky adresujte na môj mail, prípadne do komentárov. Ak sa vám niečo nepáčilo, chcete viac podrobností o niečom a pod. stačí, keď sa vyjadríte a ja to rád zahrniem do pokračovania.

Odkazy

SMB protokol
The Official Samba 3.2.x HOWTO and Reference Guide
Samba: An Introduction
CIFS Technical Reference

    • pekne 11.08.2008 | 02:43
      lo   Návštevník
      pekny clanok, tesim sa na pokracovanie
    • len tak dalej 11.08.2008 | 14:40
      3ko   Návštevník
      dufam, ze preberies aj napojenie na openldap, kerberos a na vrch pridas cestovne profily (:þ)
      • Re: len tak dalej 11.08.2008 | 14:45
        Avatar Erik Mocný arch  Používateľ
        Zatial, co som si pripravil taku ,,surovu" osnovu, tak mi vysla na nejakych cca 11-12 clankov :), OpenLDAP nevynimajuc ;), no ale uvidime este ako a co vsetko stihnem do serialu zaclenit...
    • chown 12.08.2008 | 01:15
      Avatar m4jkl   Používateľ
      pekny clanok. jedna pripomienka: "a keďže nechceme aby nám tento súbor čítal hocikto, nastavíme mu atribúty, aby ho mohol čítat a zapisovať doň jedine root:
      chmod 600 /home/user/smbcredentials"

      to by ale musel byt root vlastnikom toho suboru, cize najskor
      chown root /home/user/smbcredentials
      • Re: chown 12.08.2008 | 02:33
        lo   Návštevník
        nemusel, root je vsemocny, v konecnom dosledku dosiahneme ze prava ma jedine vlastnik suboru a root :), osobne si myslim ze to bolo takto myslene ako zakazat pristup aj vlastnikovi daneho /home diru
    • medzeri v nazve zdielaneho zdroja a fstab 21.09.2008 | 03:30
      N/A   Návštevník
      Zdravim vsetkych! Chcel by som sa opytat, ci a ako riesite problem s medzerou v nazve zdielaneho zdroja vo fstab. Priklad: mame na sieti windowsacky stroj, ktory ma zdielany prostriedok s nazvom Share (D). Nie je problem ho mountnut cez shell napr. mount -t cifs //192.168.1.4/Share\ \(D\) ... . Co ale je problem, je takyto zdroj vo fstab-e. Zatial som nezistil ako to zapisat do fstab-u. Uvodzovky, apostrofy ani \ nefunguje. K tomu nazvu, NEMOZEM zmenit nazov zdielania, nie je to moj stroj, a kvoli takej prkotine ako fstab, daneho cloveka nemienim otravovat (aby zmenil nazov zdielania bez medzier). Prajem prijemny den/noc :-)
    • Problem s medzerami vo fstab-e vyrieseny 21.09.2008 | 03:40
      N/A   Návštevník
      Zdravim, tak stacilo pozriet man, pre medzeri funguje zapis pre medzeru v osmickovej sustave 040, a staci do fstabu napisat //192.168.1.4/Share\040(D). S tymto mi to funguje. Prajem prijemny den/noc.