SaMBa - kapocs a rendszerek között

Lajber Zoltán lajbi@jht.gau.hu

Abstract:

Bemutatok egy megoldást arra, hogy hogyan lehet egy Linuxos gépet egy munkacsoport számára file, nyomtató és fax szerverré tenni.

Ismertetek egy tipikus szerver oldali beállítást, néhány megfontolást a felhasználók jogairól, és persze néhány kliens programról is lesz szó.

Ennyi információ csak az elinduláshoz elég, de a SaMBa nagyon jó dokumentációval rendelkezik, persze angolul.

Mi is az a SaMBa?

Szabadon fordítva a SaMBa FAQ-ból:

SaMBa olyan programcsomag, amely elérhetővé teszi a kliensek számára a kiszolgáló file- és nyomtatóterületeit az SMB (Session Message Block) protokollon keresztül.

Eredetileg Unixra irták, de ma már futatható VAX VMS, Novell Netware, OS/2 és AmigaDOS operációs rendszereken is.

Néhány fogalom

share
megosztott erőforrás. Ez lehet file vagy nyomtató szolgáltatás. A megnevezése \\server\share módon történhet.
browsing
A gépek és gépeken lévő share-ek listájának összeszedése, megfelelő hirdetése, keresés a gépek vagy share-ek között.
workgroup
Egy munkacsoportba tartozó gépek. Minden workgroupnak van egy master browsere. A gépek szavazással döntik el, hogy ki legyen a master browser.
domain
tartomány. Ez nagyon hasonlít a workgroupra, de annál legalább egy dologban többet tud: tartalmaz egy kitüntetett számítógépet, a tartományvezélőt (domain controler)
domain controller
tartomány vezérlő gép, tulajdonképpen a szervernek megfelelő. Ha a kliensek számára előírjuk egy tartományba belepést, akkor nem a kliens, hanem a tartomány vezérlő végzi el a felhaszálóinév/jelszó ellenőrzést, sikeres belepés esetén pedig lefuttathattat egy logon script-et a kliensel.

A SaMBa fő részei

smbd
Az SMB szerver. Ez kezeli a kapcsolatokat, ellenőrzi a jogokat és végzi az aktuális adatátvitelt.
nmb
Netbios Name Server. Segit a klienseknek megtalálni a szervereket, ö intézi a böngészést (browse) és a maga módján a tartományvezérlő (domain controller) szerepet is betöltheti.
smbclient
Unix-os kliens program, ftp szerű felhasználói illesztővel.
smbrun
Egy kis "glue" (ragasztó) program, hogy az smbd biztonságosan tudjon külső programokat hívni.
testprns
program a szerver nyomtatóeléréseinek tesztelésére.
testparms
program a konfigurációs file szintaktikus ellenörzésére szolgál.
smb.conf
a SaMBa konfigurációs file. Általaban a /usr/local/samba/lib/smb.conf helyen található, de ha Linux diszrtibució (mint példaul a Debián) tartalmazza, akkor az /etc/smb.conf helyre kerül.
dokumentáció
Nagyon hasznos. Nem csak a SaMBA-hoz, de nagyon érdekes dolgokat tudhatunk meg a kereskedelemben kapható egyéb SMB-s rendszerek belső lelkivilágáról is :-). Ha mi telepítjük a SaMBa-t, akkor a /usr/local/src/samba-1.9.16p11/docs/ könyvtárban található, a disztribució részeként pedig a verb+/usr/doc/samba+ helyen keresendő. Továbbá vannak szabvanyos UNIX kézikönyv lapok, nagyon tanulságos a man smb.conf.

Elterjedtebb kliensek

LAN manager client for DOS
Ez egy szabadon letölthető Microsoft kliens.
Windows for Workgroups 3.11
Nem ingyenes, de a TCP/IP stack szabadon letölthető hozzá. A trumpet winsock nem elég, mert nem csak az alkalmazásoknak, de a rendszerrnek is kell a TCP/IP. Nem csak kliens, de szerver is lehet. Angol verzió 8. lemezén található az admincfg.exe, Ezzel le lehet tiltani a password cache-t, ami elég nagy biztonsági rést üthet az egyébként jól védett UNIX-os rendszerünkön is. ( A password cache fájlok felhasználónév.pwl nevüek, és többek között tartalmazzák azt, hogy az adott felhasználó melyik share-re, milyen jelszóval csatlakozott. Elvileg biztonságos a kódolása, de tudott, hogy melyik pozición tartalmazza a felhasználó nevet (ami a file neve is!), ezt kihasználva egy jó gépen néhány óra alatt feltörhető). Az Microsoft TCP/IP stack nehezen él együtt az IPX/SPX-el, ha ilyenre van szükség, akkor inkább használjunk win95-öt.
Windows 95
Egyes verzióknál, ha megosztott nyomtató van, akkor a \windows\system\ könyvtár mindenki által olvasható. A rendszer itt tárolja a usernev.pwl fájlokat. Lehetséges következményei már ismertek fentebbről.
Windows NT 3.x WorkStation
Megbizható kliens, de sajnos a SaMBa még nem tud domain controller lenni NT-knek. Bövebb információt erről a /usr/doc/samba/DOMAIN_CONTROL.txt fájlban olvashatunk.
Windows NT 4.x WorkStation
Kedveli a titkosított jelszavakat. Ha egyszer egy gépről megjegyzi, hogy tudja kezelni a titkosított jelszavakat, akkor késöbb már szóba sem áll vele, ha az a gép nem így kéri. Ha ilyen kliensünk vagy szerverünk van, akkor jobb a legutolsó SaMBa verziót használni. Ez most a samba 1.9.16p11, de párhuzamosan dolgoznak a jelentősen áttdolgozott 2.0 verzión is.

Néhány kliens nem rendelkezik olyan lehetőséggel, hogy más felhasználóként kapcsolódjunk egy share-hez, mint ahogy bejelentkeztünk. Ez a "Kapcsolodás másként" (Connect As). Ekkor használhatjuk a \\server\share%username formát. Ez akkor is használható, ha azt tapasztaljuk, hogy a kliens figyelmen kivül hagyja azt, amit megadunk neki a fenti dialógus ablakban.

Egy példa konfiguráció Itt bemutatok egy általam évek óta használt konfigurácót.

Tervezett csoportok és jogaik Egy felhasználó vagy a user vagy a jht csoportba tartozik elsődlegesen. A többi csoport úgynevezett másodlagos. (Egy már meglévő felhasználót a adduser lajbi masik parancsal tehetünk be másodlagos csoportba.

Az alábbi táblázatban az r olvasási (read), a w irási (write) az x böngészési (browse) jogot jelent. Egy sor egy share, egy oszlop egy group.

user jht pusr tdk efi guest
homes -rw -rw -rw -rw -rw ---
printers x-- xw- x-- xw- x-- x--
admin x-- xrw x-- x-- x-- x--
tdk x-- x-- x-- xrw x-- x--
alkalmazasok x-- xr- xrw xr- x-- x--
annonftp xr- xr- xr- xr- xr- xr-
netlogon xr- xr- xrw xr- xr- xr-
efi --- --- --- --- -rw ---
Table: share-ek és a group-ok jogai

Szavakkal elmondva: a user csoport tagjai elérhetik saját home könyvtárukat irásra olvasásra, és az annonymous ftp területet olvasásra. A jht csoportnak van egy közös munkaterülete admin névvel. A pusr (power user) csoport irhat is az alkalmazasok share-re. Ök installálhatnak a kliensek számára programokat. A tdk csoport hasonló a jht-hoz, de ők nem az admin-t használjak, hanem annak egy alkönyvtárát, tdk névvel. Az efi share érdemel egy kis figyelemet. Ez senki számára nem browse-olható, tehát csak úgy lehet elérni, ha valaki tudja hogy létezik, es beirja, hogy \\jht\efi. Innentöl már a normális kapcsolódási eljárás folyik le.

Ezt megvalósító smb.conf így néz ki:

; Configuration file for jht.
; ============================================================================
; For the format of this file and comprehensive descriptions of all the
; configuration option, please refer to the man page for smb.conf(5).
;
; last update: Lajbi 96.11.05
[global]
   server string = %h  Jarmu- es Hotechnika tanszek, Samba %v
   workgroup = JARMUTECHNIKA
   printing = bsd
   printcap name = /etc/printcap
   load printers = yes
   guest account = guest
   security = user 
   hosts allow = 192.188.244. 192.188.243. 192.188.245.
   domain logons = yes
   domain master = yes
   guest ok = no
   logon script = %G.bat
   max diks size = 120
   log file = /usr/local/samba/var/log.%m
   lock directory = /usr/local/samba/var/locks
   share modes = yes
   os level = 34
   remote announce = 192.188.243.255/JHT 192.188.245.255/JHT
   message command =  /usr/bin/mail  -s 'message from %f on %m' root < %s; rm %s 

; sajat home konyvtar mindenkinek
[homes]
   comment = Home directories
   browseable = no
   read only = no
   create mode = 0700
   mangled map = (*.html *.htm)

; nyomtatas csak a jht es tdk csoportnak
[printers]
   comment = All Printers
   path = /var/tmp
   browseable = no
   printable = yes
   public = no
   writable = no
   create mode = 0700
; maganterulet
   valid users = @jht, @tdk

; kozos munkaterulet a jht group tagjainak, full access minden tagnak
[admin]
   comment = Tanszek kozos dolgai
   path = /home/admin
   valid users = @jht
; ok kapcsolodhatnak
   public = no
   writable = yes
   printable = no
   force user = admin
   force group = jht
; a leterhozott file-ok tulajdonosa admin.jht lesz
   create mode = 770
; a csoport szabadon garazdalkodhat 

; kozos munkaterulet a tdk group tagjainak, az [admin] resze!
[tdk]
   comment = TDK-s hallgatok terulete
   path = /home/admin/tdk
   valid users = @tdk
   public = no
   writable = yes
   printable = no
   force user = admin
   force group = jht
   create mode = 770

; dos/windoze binarisok a jht,tdk groupnak es guest usernek, de read-only
; pusr group irhat ra!
[dosbin]
   comment = DOS es Windows alkalmazasok
   path = /home/jht/dosbin
   writable = no
   printable = no
   write list = @pusr
   valid users = @jht,@tdk
   force user = jht
   force group = jht
; ez a dosbin meg1x
[alkalmazasok]
   copy = dosbin

;annon ftp terulet, de itt read-only az  incoming is
[anonftp]
   comment = JHT anonnymous ftp terulete
   path = /home/ftp/pub
   public = yes
   writable = no
   printable = no

; domain controller miatt
[netlogon]
   comment = Domain Controller logon directory
   path = /home/jht/netlogon
   writable = no
   printable = no
   guest ok = yes
   write list = @pusr
   browseable = no
   force user = jht
   force group = jht

; ezek itt nem browse-olhato, csak azoknak, akik tudnak rola :-)
; egy project altal hasznalt terulet
; efi: EFI project tagjainak (efi group)
[efi]
   comment = EFI project 
   path = /home/efiproject
   valid users = @efi
   public = no
   writable = yes
   printable = no
   force user = lajbi
   force group = efi
   create mode = 770
   browseable = no

A SaMBa a valid users opcióval szabályozza, hogy ki kapcsolódhat az adott share-hez. Az elindított smbd procces ugyanolyan jogokkal rendelkezik mint belépett felhasználó, vagy (ha van) a force user és force group előír. De ekkor meg nem jelenti azt, hogy minden fájlt fölött urtalkodik, mert a hagyományos UNIX-os jogosultságok érvényben vannak. Ez nem egyszerű, mert harom szinten szabályozhatjuk a hozzáféréseket:

  1. ki kapcsolódhat az adott share-hez? (valid users )
  2. ha kapcsolódott, akkor milyen jogosultságuvá válik? ( force user, force group )
  3. a UNIXos fájlok hagymányos hozzáférés szabályozása (tulajdonos, csoport, többiek).

Ezért nézzünk még két konfigurációs fájlt. Egy rövid /etc/passwd részlet:

lajbi:xxx:510:101:Lajber Zoltan,aula 120,1535,,:/home/lajbi:/bin/bash
znagy:xxx:505:100:Nagy Zoltan:/home/znagy:/bin/bash
czanik:xx:512:100:Czanik Andras,ELTE JTK,,,:/home/czanik:/bin/bash
admin:xxx:1002:101:Tanszeki adminisztracio,aula 125,1430:/home/admin:/bin/bash
jht:xxxxx:1003:101::/home/jht:/bin/bash
fjuhasz:x:1008:100:Juhasz Ferenc,GM IV,,,:/home/fjuhasz:/bin/bash
jritz:xxx:1013:100:Ritz Jozsef,GM V/8,C/4026,,:/home/jritz:/bin/bash
guest:xxx:1016:109::/home/guest:/bin/true

és /etc/group részlet:

users:*:100:
jht::101:lajbi,ari,jbeke,llaib,admin
pusr::103:jht,lajbi
tdk::104:znagy,tracz,losgyan,fjuhasz,horvath,jritz,bhamza,beno
efi::107:lajbi,fjuhasz

Mivel a Linuxos gép tartományvezérlő is, szükség van a kliensek számára lefuttatható logon scriptre is. Mivel az smb.conf-ban a logon script = %G.bat sor szerepel, a beléptetett felhasználó elsődleges csoport neve szerinti batch fájl fog elindulni. Ezek:

users.bat:

net use i: \\jht\homes /yes net use h: \\jht\tdk /yes net use w: \\jht\alkalmazasok /yes

jht.bat:

net use i: \\jht\homes /yes net use h: \\jht\admin /yes net use w: \\jht\alkalmazasok /yes

Az smb.conf security opciója

Ennek háromféle értéke lehet:

  1. share Ez akkor jobb, ha többnyire olyan felhasználók kapcsolódnak a SaMBa-hoz, akiknek nincs account-juk a UNIX-os gépen.
  2. user Ez akkor javasolt, ha a klienseken és a UNIX-on a login nevek megegyeznek. Gondot okozhat néhány furcsa tulajdonsággal rendelkező kliens program. A wfwg például ebben az esetben néha teljesen figyelmen kivül hagyja a "kacsolódás másként" dialogdobozba irt nevet és jelszót.

    Úgy tűnik, némelyik NT4-esnél van hasonló mizéria, ekkor használjuk a \\server\share%user formát. Bár ezt meg nem minden kliens fogadja el :-).

  3. server Ekkor meg kell adni a password server = gepnev opciót is, és a felhasználói név/jelszó ellenörzést az adott gép fogja elvégezni. Ez általában egy NT AS szokot lenni.

Hogyan is müködik ez?

Az SMB szerver a kapcsolat létrehozásakor közli a klienssel, hogy milyen üzemmódban van. Ez azt befolyásolja, hogy a kliens milyen módon probálja azonosítani magát.

security = user
Elöször erről, ez az egyszerübb. Ez esetben a kliens küld egy session setup blokkot közvetlenül a protokoll egyeztetése után. Ez tartalmaz egy felhasználói név/jelszó párost. Ez esetben a szerver még nem tudja, hogy ez a kliens milyen share-ekhez fog fordulni, tehát a megadott felhasználói név, jelszó és természetesen a gép ismeretében dönthet arról, hogy elfogadja-e vagy nem a kérést.

Ha ez megtörtént, akkor a kliens elvárja, hogy a késöbbiekben a tree connection blokkal mount-olni tudjon share-eket.

Egy kliens több session setup kérést is küldhet. A szerver a válaszban ad egy "felhasználó azonosítót", így a kliens elvileg képes többszörözött kapcsolatok fentartására.

security = share
Ez az alapértelmezett a SaMBA-ban, mert ez volt készen elsőnek. A kliens ekkor azonosítani próbálja magát minden tree connect esetében, vagyis amikor mount-olni akar egy share-t. Ekkor viszont nem küld explicit felhasználói nevet, csak a kért share nevét és egy jelszót! A kliensek ekkor azt várják, hogy a egy jelszó egy share-hez tartozik, és nem egy felhasználóhoz. Windows for WorkGroups és a Windows 95-ben nincs felhasználói azonosítás, így arra nem lehetett építeni a védelmet, ezért ott a egy share-hez tartozik egy jelszó. A SaMBa mindig a UNIX rendszerü felhasználó/jelszó séma alapján azonosít és dönt a hozzáférésről.

Sok kliens küld session setup blokkot még akkor is, ha share szintű az ellenörzés, és ebben megad egy felhasznói nevet, de nem ad jelszót. A SaMBa feljegyzi ezt a nevet egy lehetséges felhasználók listára. Amikor a kliens küld egy tree connection blokkott, akkor az ebben kért share neve is felkerül a lehetséges felhasználók listájára, továbbá az összes, az smb.conf file adott share-hez tartozó valid users sorában szereplő nevek.

Ha a küldött jelszó bármelyik, a lehetséges felhasználók listáján szereplő névhez megfelel, akkor a kliens engedélyezett a hozzáférésre, mint az a felhasználó, ahol az egyezés történt.

security = server
Ebben az esetben a SaMBa azt mondja a kliensének, hogy verb+security = user+ -en van. Amikor megkapja a felhasználói név/jelszó párost, akkor ezeket használva a SaMBa megpróbál belépni a password server-re. Ha ez sikerül, akkor elfogadja a kérést, különben nem.

A titkosított jelszavak A SaMBa a kapcsolat létrehozásakor nem csak azt közli, hogy milyen üzemmódban van, hanem azt is, hogy képes-e titkosított jelszavakat kezelni. Ha ezen opcióval fordítottuk a SaMBa-t, akkor visszaküld a kliensnek egy kulcsot is. Ez esetben a kliens az összes jelszavát titkosított formában fogja küldeni.

Ekkor külön jelszó fájlt kell karbantartani a SaMBa számára, ugyanis kriptográfialilag lehetetlen a UNIX tipusú jelszavakat SaMBa tipusúra konvertálni.

Előnyként jelentkezik, hogy a bizonyos kliensek felhasználói távolból is megváltoztathatják a jelszavukat, ehhez nem szükséges bejelentkezniük pl. telnet-el a SaMBa-s gépre.

Fax szerver A forrás: /usr/doc/samba/Faxing.txt-ben, a beszerzési helyekkel együtt. Mi szükséges hozzá?

Hogyan müködik? Érkező faxok Az mgetty fogadja is a faxot, és azokat át tudjuk alakítani pl. a g3tolj vagy hasonló eszközökkel. Ezt követöen küldhetjük nyomtatóra, vagy pl. ghostview-el képernyőre. Vagy küldhetünk e-mailt , esetleg a smbclient -M jucika < fax jött!parancsal értesítjük a felhasználót.

Egyéb szolgáltatások

DHCP
Ez olyasmi,mint a bootp, de elvileg többet is tud. A megfelelő bootpd-vel lehet DHCP-t is szolgáltatni, de csak statikusan, nincs lejárati ideje a IP cimeknek. a Debian 1.2-ben:
#/usr/sbin/bootpd -v
bootpd+dhcp 2.4.3
Így ez alkalmas rá. Nem kell semmi különös beállítás, a hagyományos /etc/bootptab használható, sőt még a bf=netzImage is maradhat a diskless Linuxokhoz. Ha nem ilyen a bootpd, akkor upgrade, vagy patch és újrafordítás.

WINS
Windows Name Server, a DNS es a netbios nevek közötti megfeleltetést segíti, alapértelmezetten be van kapcsolva. Ha már van NTAS WINS a hálózaton, ki kell kapcsolni.

Összehasonlítás

Amit a SaMBA NEM tud:
Biztos van más is, de amivel én találkoztam eddig>
Amit a SaMBa tud, de a WinNT Server nem:
Csak néhány dolog, ami eddig feltünt nekem:

Érvek a Linux + SaMBa ellen

Érvek a Linux + SaMBa mellet

Ezen anyag az MLF "második buli"-jára készült szóbeli előadás módosított fóliái. A dokumentum időnként frissített verziója megtalálható a http://jht.gau.hu/~lajbi/sambaeloadas.html címen.

A SaMBa web lapok: http://lake.canberra.edu.au/pub/samba/, ahol lehet keresni a levelezési lista archivumában is. A SaMBa levelezesi lista (angol): samba@samba.anu.edu.au A SaMBa-s újdonságok (angol): samba-announce@samba.anu.edu.au

A beiratkozás ezekre úgy történhet, hogy küldünk egy levelet a listproc@samba.anu.edu.au cimre. A Subject legyen üres, és a levél törzsében: subscribe samba (nevünk) vagy subscribe samba-announce (nevünk)

Elég sokszor beszélnek a SaMBaról a comp.protocols.smb newsgroupban is.

Sok sikert a Linuxos és bármilyen más SaMBázáshoz.

Köszönöm Iványi Péter peteri@carme.sect.mce.hw.ac.uk és Szekeres István szekeres@fornax.hu segítségét.



Lajber Zoltan
Fri Mar 14 16:55:33 MET 1997