Fájlszerver

Kisebb vállaltok számára a Linux operációs rendszeren futó Samba nevű szoftver tökéletes megoldás lehet egy fájlszerver létrehozására. A fájlszerver kialakításának alapjait a Microsoft Windows 3.11-es (Windows for Workgroups) változata tartalmazta először, ami 1992-ben jelent meg. Bár ez számos változtatáson esett át (az akkori Windows-ok még a mai értelemben vett felhasználó kezeléssel sem rendelkeztek) lehetővé tette könyvtárak és nyomtatók megosztását a hálózat további gépei számára. A Microsoft erre egy ún. smb (Server Message Block) nevű protokollt használt, amit később Linuxra is implementáltak. A Samba elnevezés ennek emlékét őrzi, a névválasztás (állítólag) egy szótár s*m*b* alakú szavainak kiválasztásával történt.

Samba telepítése

A fájlszerver telepítését a Samba telepítésével kezdjük, melyet a szokásos módon végzünk el. Mivel később szükség lesz rá, egy Midnight Commandert is installálunk. A telepítéshez szükséges parancsok az alábbiak:

root@srv1# apt-get update
root@srv1# apt-get install samba mc

A fájlszerver konfigurálása szövegfájlok módosításából, felhasználók és csoportok felvételéből és módosításából állnak, mely során a módosítások érvényre juttatásához újra kell indítani a samba szolgáltatást. Mivel ezt négy paranccsal lehet megtenni, a gyakorlati munka felgyorsítására érdemes létrehozni egy scriptet erre, amit az /etc/samba/ könyvtárba teszünk. A script neve legyen restart, az elkészítéséhez használd az mcedit programot úgy, ahogyan azt a shell scriptek készítésekor már megtanultuk.

#!/bin/bash
systemctl stop smbd.service
systemctl start smbd.service
systemctl stop nmbd.service
systemctl start nmbd.service

A scriptet futtathatóvá kell tenni a chmod paranccsal, enélkül nem tudnánk azt elindítani.

root@srv1# chmod 700 /etc/samba/restart

A Unix rendszerekben a programok beállításainak általános módja a szöveges konfigurációs fájlokban szereplő paraméterek értékeinek módosítása. Ezek általában a /etc könyvtárban vannak, így van ez a Samba esetében is.

A fájlszerver működését a /etc/samba/smb.conf fájl tartalmának módosításával kell paraméterezni. Ez általában legalább három szekcióból áll, a [global], a [homes] és néhány más, az egyes megosztásokat leíró továbbiból. Az egyes szekciókban számos paraméter adható meg, példáinkban az egyszerűség kedvéért csak a legszükségesebbeket használjuk. Ha „éles” fájlszervert készítesz, érdemes a további paramétereknek is utánanézned, esetleg tanulmányozni a „gyári” smb.conf-ban szereplő beállításokat és magyarázatokat.

A [global] a szerver teljes egészére vonatkozó beállításokat tartalmazza. Az egyes értékek jelentése a következő:

workgroup:

a Microsoft kezdeti koncepciójában az egyes munkaállomásokat ún. munkacsoportokba lehet szervezni, melyekre névvel lehet hivatkozni. Az így csoportosított gépek közt könnyebb a keresés, mivel a Windows felületén a szükséges csoport kiválasztható. A munkacsoport nevét a kliensben is megadják, így ő ismeri azt, hogy melyik munkacsoportba tartozik. A munkacsoport semmilyen korlátozást nem jelent, az csupán leíró jellegű információ. Ennek értéke példánkban EKKE.

server string:

a munkaállomáson, a hálózatban levő számítógépek részletes lista nézetben történő tallózásakor megjelenő név állítható itt be. A %h helyére a számítógép hostneve kerül, a mi szerverünk esetében ez az srv1.

interfaces:

amennyiben a szervernek a szolgáltatást nem az összes, hanem csak meghatározott interfészen vagy hálózaton kell nyújtania, a szolgáltatást végző IP cím és maszk megadásával lehet azt korlátozni.

log file:

a Samba az itt meghatározott logfile-ba naplózza a működése során bekövetkezett eseményeket. A max log size a keletkező logok maximális méretét adja meg, ennél nagyobb méretű log fájlok nem keletkezhetnek. A logging = file a fájlokba logolást írja elő (ez lehetne az operációs rendszer saját syslog rendszere is).

[global]
   workgroup = EKKE
   server string = %h server (Samba, Ubuntu)
   interfaces = 192.168.100.10/24
   bind interfaces only = yes
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   server role = standalone server

Az egyes megosztások leírását önálló szekciókban adjuk meg. Ezek létrehozása során érdemes mintákat használni, azaz a megosztást egy sémát a megfelelő adatokkal kitöltve létrehozni. A gyakorlatban jellemző igény egy olyan megosztás létrehozása, amely minden felhasználó számára elérhető, és nem tartalmaz olvasási vagy írási korlátozást. Az alábbi példa egy ilyen szekció leírását tartalmazza:

[kozos]
   comment = Kozos
   path = /var/fileServer/kozos
   browseable = yes
   create mask  = 0770
   directory mask  = 0770
   public = yes
   writable = yes
   valid users = @smbusers
   write list = @smbusers

Az egyes sorok jelentése a következő:

[kozos]:

a szekció és egyúttal a megosztás neve. A szerver megosztásainak tallózásakor ez a név fog megjelenni, ezért a szerveren belül értelemszerűen egyedinek kell lennie.

comment:

A lista nézetben az itt megadott magyarázó szöveg lesz olvasható a kliensen.

path:

az itt meghatározott könyvtár tartalmazza a megosztás fájljait, ez lesz az adatkönyvtár. Ajánlatos az egyes megosztásokat egy adott könyvtárból létrehozni, ezzel megkönnyítve a fájlszerver későbbi teljes mentését. A változó tartalmú fájlok, adatok helye a Unix rendszerekben a /var könyvtárban van, a samba megosztások létrehozását példáinkban a /var/fileServer könyvtárból végezzük.

browseable:

yes értéke mellett a megosztás tallózható lesz, azaz megjelenik a munkaállomások listáiban. Ha az értéke no, akkor ugyan nem lesz látható, de ha valaki számára ismert a neve, akkor tudja használni – a hozzáférést tehát ez nem korlátozza.

create mask:

az újonnan létrehozott fájlok jogosultsági beállítása a paraméterben megadott érték lesz.

directory mask:

az újonnan létrehozott könyvtárak jogosultsági beállítása a paraméterben megadott érték lesz.

public:

amennyiben az értéke yes, a megosztás tartalma minden felhasználó számára szabadon olvasható.

writeable:

amennyiben az értéke yes, a megosztás tartalmát minden felhasználó írhatja.

valid users:

a public = no értéke mellett használjuk azért, hogy megadjuk a megosztáshoz olvasási hozzáféréssel rendelkező felhasználók listáját. Vesszőkkel elvélasztva sorolhatók fel felhasználók és csoportok is, utóbbiakat @ jellel kell kezdeni. Ajánlott csak csoportokkal dolgozni, a gyakorlatban a felhasználók egyesével történő kezelése meglehetősen kusza konfigurációs fájlhoz vezet.

write list:

azon felhasználók és csoportok megadására szolgál, akik a megosztásban szereplő fájlokra írási jogosultsággal rendelkeznek. Ők hozhatnak létre könyvtárakat és fájlokat, módosíthatják és törölhetik azokat.

Állítsuk be a fájlszerverünket! Dolgozzunk az /etc/samba könyvtárban! Először nevezzük át az eredeti smb.conf fájlt smb.conf.old-ra!

root@srv1:/etc/samba# mv smb.conf smb.conf.old

Ezt követően az mcedit smb.conf paranccsal hozzuk létre az samba konfigurációs fájlját az alábbi tartalommal (érdemes átmásolni):

[global]
   workgroup = EKKE
   server string = %h server (Samba, Ubuntu)
   interfaces = 192.168.100.10/24
   bind interfaces only = yes
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   server role = standalone server

[kozos]
   comment = Kozos
   path = /var/fileServer/kozos
   browseable = yes
   create mask  = 0770
   public = yes
   writable = yes
   valid users = @smbusers
   write list = @smbusers

Ezzel elkészítettük a konfigurációs fájlt, de még nem vagyunk készen, mert nem csak a felhasználóink hiányoznak a rendszerből, hanem az adatkönyvtáraink sincsenek még készen.

Felhasználó felvétele

Az első felhasználónk Szabó Lajos lesz, akinek a szabo.lajos bejelentkezési nevet adjuk. Fontos tudni, hogy ahhoz, hogy valamelyest kettős adminisztrációt kell végeznünk: nem léteznek kizárólag fájlszerver felhasználók, a rendszer felhasználóit kell jogosítanunk a samba megosztásainak használatára. Ezért minden felhasználót fel kell venni normál felhasználóként, majd egy újabb paranccsal a fájlszervbe is. A Unixok felhasználó kezeléséről, a szükséges parancsokról itt olvashatsz bővebben. Először tehát felvesszük Szabó Lajost normál felhasználóként. A gyakorlatban az itt megadott jelszót nem szoktuk számukra elérhetővé tenni, mivel az esetek túlnyomó többségében nem akarjuk lehetővé tenni számukra, hogy ssh-n bejelentkezzenek. Amennyiben a felhasználó nevében pont van, az adduser parancs számára „erőltetni” kell annak használatát, ezt a --force-badname paraméterrel lehet megtenni.

root@srv1# adduser szabo.lajos --force-badname
...

Hozzuk létre Szabó Lajos samba hozzáférését, vegyük fel a fájlszerver user adatbázisába! Itt ne használd az előzőleg megadott jelszót, válassz másikat!

root@srv1# smbpasswd -a szabo.lajos

Ha Szabó Lajos számára hozzáférést akarunk biztosítani a kozos megosztáshoz, akkor a megosztás szekciójában leírt @smbusers csoport miatt fel kell vennünk őt ebbe a csoportba. Sajnos ebben a pillanatban még a csoport sem létezik, ezért először elkészítjük azt az 500-as csoport azonostóval, majd hozzáadjuk Lajos ehhez a csoporthoz. (Ha ezek a parancsok problémát jelentenek, nézd át a már említett korábbi tananyagot itt).

root@srv1# groupadd -g 500 smbusers
root@srv1# usermod -G 500 szabo.lajos

Adatkönyvtárak létrehozása

A fájlszerverünknek már van egy felhasználója, aki jogosult a kozos mappa használatára, de a megosztás path direktívájában megadott /var/fileServer/kozos könyvtár még nem létezik. Hozzuk ezt létre, és állítsuk be a jogosultságait úgy, hogy annak tartalmát az smbusers csoport tagjai írhassák!

root@srv1# mkdir -p /var/fileServer/kozos
root@srv1# chgrp smbusers /var/fileServer/kozos
root@srv1# chmod 770 /var/fileServer/kozos

Itt az idő, hogy teszteljük a fájlszervert! Mivel számos beállításon változtattunk, indítsuk újra a már előkészített restart scripttel a /etc/samba könyvtárban, majd teszteljük a kapcsolódás működőképességét!

root@srv1:/etc/samba# ./restart

Kapcsolódás a fileserverhez

A Windows gépeken több módja is van a fájlszerver kapcsolat felépítésének. A grafikus megoldás talán egyszerűbb, de a parancssoros megoldást is gyakran alkalmazzák, főleg nagyobb számú megosztás felvételének automatizálására. A folyamat végeredményeként egy hálózati meghajtó egy betűjellel ellátott meghajtóként lesz elérhető úgy, ahogyan a gépben levő merevlemezt vagy SSD-t is. Bármelyik módszert is használjuk a kapcsolódáshoz, annak során a szerver neve/IP címe mellett meg kell adni a megosztás nevét is. Erre a Microsoft az ún. UNC (Universal Name Convention) megadási formát alkalmazza, amely egy \\szerver\megosztás formájú szöveg. Bár a szerver megadható névvel is, személyes tapasztalatom alapján ez a később tárgyalásra kerülő VPN kapcsolatok során problémát okozhat, ezért itt kivételesen az IP cím alkalmazását javaslom. Példánkban a kozos nevű megosztásra tehát \\192.168.100.10\kozos néven hivatkozunk majd.

Az alábbi példában a Sajátgép ablakának címsorába a \\ karaktereket követően gépeljük be a szerver IP címét!

A szerver kapcsolat felépítése UNC megadásával

A szerver kapcsolat felépítése UNC megadásával

A kapcsolat létrejötte után meg kell adni a fájlszerver felhasználójának nevét és jelszavát. A hozzáférés adatai az ablakban szereplő checkbox-szal megjegyeztethető, így az egy újraindítást követően is elérhető marad.

Bejelentkezés a fájlszerverbe

Bejelentkezés a fájlszerverbe

Hálózati meghajtó csatlakoztatása

Hálózati meghajtó csatlakoztatása

Hálózati meghajtó csatlakoztatása

Hálózati meghajtó csatlakoztatása

A K: meghajtó összerendelése

A K: meghajtó összerendelése

Egy megosztás kapcsolása parancssorban is elvégezhető a Windows net parancsával. Ehhez meg kell adni a használandó meghajtó nevét, ami most K: lesz (K, mint közös), valamint a megosztást UNC formában. A parancsnak adható egy /yes paraméter is, ekkor az összerendelési adatokat a Windows megjegyzi és újraindítás után is megtartja.

C:\> net use K: \\192.168.100.10\kozos /yes

A kapcsolat bontása szintén elvégezhető a net paranccsal, ekkor elég a helyi meghajtót meghatározni:

C:\> net use K: /delete

A kapcsolat felvétele után próbáld ki a könyvtárak létrehozását, fájlok másolását a hálózati meghajtóra, majd ellenőrizd a Linux szerveren, hogy azok valóban láthatók-e a /var/fileServer/kozos könyvtárban!

Home könyvtár a fájlszerveren

A Samba speciális megosztásként kínálja a felhasználók saját (tehát felhasználónként eltérő) home könyvtárainak elérését. Bár személy szerint ezért nem vagyok oda nem csak azért, mert a home könyvtárak tartalmát a felhasználó törlésekor könnyű elveszteni, és mentésükről, vagy a cégtől való távozásukkor szükséges archiváláskor ezekkel külön kell foglalkozni. A gyakorlatban pedig ritkák azok a céges feladatok, amelyek a felhasználó számára a többiektől teljesen elszeparált, csak általuk használandó könyvtárat igényelnek. Mindenesetre érdemes megismerni ennek a speciális megosztásnak a használatát. A home könyvtár megosztását definiáló szekció az alábbi formájú:

[homes]
   comment = Home konyvtarak
   browseable = no
   read only = no
   create mask = 0700
   directory mask = 0700
   valid users = %S

Az home könyvtár megosztásakor első és legfontosabb a [homes] név kötelező használata, ez a Samba számára a home könyvtárakat definiálja. Ezért nincs szükség a felhasználónként eltérő path meghatározására, az ebben a definícióban nem is szerepel. A browseable = no alapértelmezett beállítás, ez megakadályozza, hogy az amúgy névvel megjelenő home könyvtár újabb példányban, homes néven is browse-olható legyen. A create mask és directory mask 0700 értéke a felhasználó és csak a felhasználó teljes hozzáférését állítja be. A valid users = %S pedig csak a felhasználó számára biztosít hozzáférést.

Amennyiben ez a szekció jelen van az smb.conf-ban, a felhasználók számára a home könyvtáraik is láthatóvá válnak és csatolhatók is.

Feladatok

  1. A főnököd a fájlszerveren a munkaügyön dolgozók számára egy elkülönített terület létrehozását kéri. Hozd létre ezt a megosztást munkaugy néven, a fáljokat tárold a /var/fileServer/munkaugy könyvtárban! A hozzéférések beállításához hozz létre egy munkaugy nevű csoportot! Demonstráld a hozzáférést egy új felhasználó, Kovács Pélné felvételével! Biztosítsd a hozzáférést a már korábban felvett Szabó Lászlónak is! (Megoldás)

  2. Készíts egy vezetők nevű megosztást, amihez csak azok férnek hozzá, akik tagjai a vezetok csoportnak! Ügyelj arra, hogy egymás fájljaihoz mindannyian hozzáférjenek, akár törölni is tudják azokat!

  3. Kapcsolódj a munkaállomásról a router mögött levő fájlszerverhez VPN kapcsolaton!