Egyszerű Samba fileserver (Jessie)
Ebben a leírásban egyszerű fájlszervert alakítunk ki, amely Windows kliensek számára standalone állománykiszolgálóként működik (és alapját képezi a fejlettebb kiszolgálók beállításának).
Az alábbiak a Debian Jessie disztribúcióban lévő Samba 4.1.17 változatra vonatkoznak, azonban nem használjuk ki a Samba 4 Active Directory képességeit (valójában ez egy adaptált, Samba 3 leírás).
Részben kísérleti stádiumban van, még ne vedd teljesen komolyan!
Tartalomjegyzék
Elméleti megfontolások és házirend
Ebben a leírásban a Samba kiszolgálót legfeljebb kisvállalati használatra méretezzük:
- Egyetlen szervergép - nincs szükség magas rendelkezésre állású (HA) vagy teljesítmény miatti cluster megoldásra;
- A szervergépbe beépített, erre a célra dedikált, legfeljebb néhány TB méretű storage;
- Legfeljebb egy-kétszáz felhasználó, "könnyen áttekinthető" felhasználói szerepek.
Lényeges megkötés, hogy az alább leírt kiszolgáló adminisztrációjához (felhasználók, csoportok, megosztások kezelése, stb.) és üzemeltetéséhez rendszergazda támogatás szükséges, mert a használt eszközöknek nincs könnyen kezelhető adminisztrációs felülete (TODO!).
Tárterület
- A Samba tárterület a /var/opt/samba alatt helyezkedik el. Érdemes külön partícióra tenni (a /var-nak megfelelő korlátozásokkal), hogy a /var teleírását elkerüljük. LVM over RAID-1 használata szóba jöhet.
- A Samba/Windows jogosultságkezelés modellezéséhez a tárterületnek Linux ext2/3/4 fájlrendszeren kell lennie bekapcsolt ACL (access control list) használattal; a teljes Samba/Windows (NTFS) jogosultságkezelés szimulációjához a user_xattr is kell.
- A Samba tárterületet egy Linux system felhasználó és csoport (sambauser:sambashare) birtokolja 2770/660 jogokkal. A Samba/Windows Administrators (Rendszergazdák) csoportnak megfeleltett sambashare Linux csoport a teljes Samba tárterülethez hozzáfér (Linux: rwX, Samba/Windows: Full control).
- Amennyiben érdemi felhasználókezelés szükséges, a tényleges felhasználók authorizációja (ki mihez férhet hozzá) egyrészt a Samba konfigurációjában előírt, megosztás szintű korlátozásokkal, másrészt egy megosztáson belül Linux csoport szintű, az NTFS-nél megszokottakhoz hasonlóan öröklődő Posix ACL-ekkel szabályozható. Jelen leírásban az utóbbi szabályozást preferáljuk.
Felhasználókezelés
Ez a szakasz elavult, Samba 3 megközelítésű - Samba 4 megoldás: TODO!
A Samba által biztosított környezetet tekinthetjük egy, a gazdagép Linuxán belül megvalósított Windows szolgáltatás emulációnak. Jó lenne, ha ez a szolgáltatás - hasonlóan pl. az Apache-hoz, ProFTPd-hez, stb. - virtuális felhasználókkal dolgozhatna, de a Samba minden (4.x alatti) változata megköveteli, hogy a Samba felhasználók és csoportok egyben a szervergépen érvényes Linux felhasználók és csoportok is legyenek. Ennek oka, hogy minden Samba felhasználónak két párhuzamos identitása van: a Sambán belüli műveletek authorizációjánál használatos Samba/Windows identitás, és a Samba által, a felhasználó nevében, a gazdagép fájlrendszerén végzett műveleteknél használatos Linux identitás. Sajnos a Samba tervezésekor a Linux identitást tették meg elsődlegesnek, így (a Samba 4.x előtt) nem lehetséges több Samba/Windows identitást azonos Linux identitásra mappelni úgy, hogy az authentikáció elkülönüljön - azaz nem lehetséges dedikált Linux felhasználó nélküli Samba/Windows felhasználót készíteni.
Technikailag a Samba/Windows identitás a Samba felhasználói backendjében (alapértelmezésben /var/lib/samba/*.tdb), míg a Samba által a felhasználó nevében végzett fájlműveleteknél használatos Linux identitás a Linux felhasználói backendjében (alapértelmezésben /etc/passwd és /etc/shadow állományok) tárolódik. Lehetséges közös backendet használni (jellemzően LDAP szerver), de nem kötelező és standalone szerver esetében ennek talán nincs is különösebb jelentősége.
- Jelen leírásban a Samba/Windows felhasználói adatbázis a Samba alapértelmezett TDB adatbázisa - LDAP (vagy egyéb backend) használatát ld. TODO!.
- A felhasználókezelés kezelőfelületeként jelen leírásban a parancssori root hozzáférést igénylő smbm (samba-manager) scriptet használjuk.
A Linux identitás azonosítója a jól ismert Linux UID, a Windows identitás esetében az egyedi felhasználói azonosítót (relative identifier, RID) a net getlocalsid paranccsal lekérdezhető (a Samba telepítéskor képzett) domain- (jelen esetben gép-) site identifier-hez (SID) hozzáfűzve kapható meg a teljes UID (ugyanígy képződik az elsődleges csoportazonosító - GID - is).
A Samba/Windows és Linux környezeteket az alábbi szempontok szerint igyekszünk összeegyeztetni:
- A Samba felhasználók ne rendelkezzenek Linux login jelszóval illetve shellel; a Samba (távolról történő) igénybe vétele kivételével lehetőleg semmire ne legyenek jogosultak a gazdagépen.
- A Samba felhasználók Linux UID-ja különüljön el a gazdagép rendszer- és valódi felhasználói által használtaktól, az alábbi konvenciók szerint:
UID Felhasználó jellege 0-999 helyi Linux rendszerfelhasználó (ez a Debian alapértelmezése) 1000-9999 helyi Linux interaktív felhasználó (1000-65534 a Debian alapértelmezése) 10000-19999 helyi azonosítású Samba felhasználó (megfelel a Windows local usernek) 20000-29999 központi azonosítású Samba felhasználó (megfelel a Windows domain usernek)
- A Samba által definiált csoportok GID-je különüljön el a gazdagép által használtaktól, az alábbi konvenciók szerint:
GID Csoport jellege 0-999 helyi Linux felhasználói csoport 10000-19999 helyi azonosítású Samba csoport (megfelel a Windows local groupnak) 20000-29999 központi azonosítású Samba csoport (megfelel a Windows domain groupnak)
Hálózati elérés
Ebben a leírásban kétféle hálózati hozzáférést vizsgálunk: a hagyományos, védett belhálózaton keresztüli, illetőleg a tetszőleges hálózatból SSH tunnelen keresztül vezetett (point to point) hozzáférést. Ezeket az alábbi táblázat hasonlítja össze:
- TODO!
Előfeltételek
- A Samba/Windows jogosultságkezelés modellezéséhez a tárterületnek Linux ext2/3/4 fájlrendszeren kell lennie bekapcsolt ACL (access control list) használattal, illetve a teljes NTFS szimulációhoz bekapcsolt user_xattr (kiterjesztett felhasználói attribútumok) használattal - ezt a kernelnek támogatnia kell (custom kernel esetén érdekes, a gyáriban be van kapcsolva a támogatás mindkettőre).
- TODO!
Telepítés
A leírt telepítés során átmenetileg authentikáció nélkül hozzáférhetővé tesszük a Samba tárterületét, ezért ügyeljünk arra, hogy a telepítést vagy biztonságos (bel)hálózati környezetben végezzük, vagy a szervergép tűzfalával megfelelően korlátozzuk a hozzáférést (a Shorewall házirend szerinti beállítása alapértelmezésben nem is engedi az SMB forgalmat).
A Samba kiszolgálót rendszergazdaként, Debian csomagból telepítjük:
apt-get install openssl putty-tools # tunnelezett eléréshez, ha nemcsak zárt belhálózaton fog üzemelni a Samba apt-get install samba samba-doc tdb-tools # samba-common samba-common-bin és sok másfüggőség!
A telepítéskor a Samba létrehoz egy egyedi Samba/Windows gépazonosítót (local SID), ennek értékét érdemes egy szövegfile-ba elmenteni:
net getlocalsid >>/root/install/localsid.$(hostname).$(date +%Y%m%d)
Ezután állítsuk le a konfigurálatlan Samba szervert:
systemctl stop smbd; sytemctl stop nmbd
Ügyeljünk arra, hogy a hagyományos systemctl stop samba nem működik, a komponenseket külön-külön kell indítani és leállítani!
Konfiguráció a samba-manager használatával
Töltsük le a legfrissebb samba-manager tarball-t, a /usr átmenetileg írható újracsatolása után könyvtárhelyesen tömörítsük ki (telepítés), majd csatoljuk vissza csak olvashatóan a /usr partíciót. Ezután adjuk ki a
smbm --configure
parancsot! Ez a következő beállításokat fogja elvégezni:
- Elkészíti egy shell és valid password nélküli sambauser Linux system felhasználót, akinek elsődleges csoportja a Debian maintainer által létrehozott sambashare lesz;
- Elkészíti és a sambauser:sambashare tulajdonába adja az alábbi tárterületet:
/var/opt/samba/homes # esetleges Samba felhasználók home könyvtárai /profiles # esetleges Samba felhasználók roaming profile-jai /services # esetleges Samba szolgáltatások (pl. nyomtatók) könyvtárai /share # a megosztott Samba tárterület alapkönvtára
- Elkészít egy egyszerű Samba szerver beállító állományt a /etc/samba/smb.conf file-ban (a meglévő, a maintainer által biztosított állomány elmentésével) az alábbiak szerint:
- NetBIOS azonosítás a gép nagybetűsre konvertált Linux hostneve;
- A fileserver nem nyújt hálózati tallózási támogatást senkinek;
- Minden, a script futásakor élő szerver IP címen engedélyezett az Samba elérése;
- A logolás nem a syslogba, hanem a /var/log/samba könyvtárba kerül, felhasználónként és gépenként külön állományokba;
- A felhasználói authentikáció elő van készítve, de nincs bekapcsolva;
- Be van kapcsolva az ntfs ACL-ek posix ACL-ekkel történő szimulációja;
- Be van kapcsolva a Sambán belüli adminisztrációs jogosultságok Windows privilégiumokkal történő ellenőrzése;
- A file nevekben ügyelünk az ékezethelyes karakterkezelésre;
- Egyetlen share-t definiálunk, amelyben minden file művelet a sambauser:sambashare Linux accounttal történik, a szokásos 2750/640 jogokkal;
- Ezt a share-t mindenki számára authentikáció nélkül, írásra és olvasásra is megosztjuk.
- Elkészít egy, a teljes Samba adminisztrálására jogosult Samba/Windows felhasználót, akinek Linux identitása a sambauser rendszerfelhasználó, Samba/Windows identitása a helyi gép Local Administrator accountja (rid=500) és tagja lesz a Builtin Administrators (konvencionálisan uid=S-1-5-32-544) Samba/Windows csoportnak (amelyet a script a sambashare Linux groupnak feleltet meg) - ehhez a maintainer már hozzárendelte valamennyi Sambán belüli adminisztrációs privilégiumot, így ennek a felhasználónak a Samba szolgáltatásokra vonatkozóan olyan jogköre lesz, mint egy helyi Windows rendszergazdának, ugyanakkor a Sambán kívül semmilyen érdemi jogosultsággal nem rendelkezik. A létrehozott Samba/Windows felhasználó a Samba Administrator aliast (Samba/Windows felhasználónevet) kapja és egy generált jelszót, amelyet a script a képernyőre és a naplóállományába is kiír;
- Kilistázza azokat a Samba/Windows felhasználókat (identitásokat), amelyeket a maintainer a Samba telepítésekor létező Linux (nem rendszer-) felhasználókhoz létrehozott. Tekintettel arra, hogy a (logikailag) Linux és (logikailag) Samba/Windows felhasználókat igyekszünk elkülönítetten kezelni, ezek a Samba/Windows identitások feleslegesek;
- Végül a script elindítja a Samba szolgáltatásokat.
A samba-manager tevékenységét a /var/log/samba/.smbm.log naplóban dokumentálja. A fenti konfigurációs parancs sikertelen lefutás esetén (illetve bármikor máskor is) újra kiadható, a már megtett konfigurációs lépéseket nem fogja megismételni illetve elrontani.
Shorewall (tűzfal) beállítások
Tesztelés előtt a tűzfalon be kell állítani a Samba által kiszolgált zóna (példánkban trs) felé és felől a forgalom engedélyezését:
-rw-r----- root root /etc/shorewall/rules [...] SMB/ACCEPT trs fw [...] SMB/ACCEPT fw trs [...]
A beállítás érvényesítéséhez a tűzfalat újra kell indítani:
/etc/init.d/shorewall restart
Gyorsteszt
Indítsuk el a Samba szervert:
systemctl start smbd; systemctl start nmbd
és a /var/log/samba alatti logokban ellenőrizzük a hibaüzeneteket, valamint a log.nmbd állományban ellenőrizzük, hogy a Samba nem lett a munkacsoport számára főtallózó. Ezután egy, a telepítés alatti szervert SMB protokollon keresztül elérő (a trs zónában lévő), legalább Windows XP-t (lehetőleg Professionalt) vagy fejlettebb Windowst futtató munkaállomásról próbáljunk csatlakozni a fileserver megosztáshoz, abban hozzunk létre mappát, írjunk-olvassunk-töröljünk állományokat (ékezetes file névvel is)! A szerveren ellenőrizzük a létrejövő Linux jogosultságokat.
TODO!
A Samba démonok bejegyzése a Tiger által ismert démonok listájába
Az smbd és nmbd démonoknak állandóan futniuk kell, valamint joggal figyelnek a NetBIOS portokon. Mindezek ellenőrzésére az alábbi módosításokat jegyezzük be a /etc/tiger/tigerrc állományba:
-rw-r--r-- root root /etc/tiger/tigerrc [...] Tiger_Listening_ValidProcs='[...]|nmbd|smbd' [...] Tiger_Running_Procs='[...] /usr/sbin/nmbd /usr/sbin/smbd'
A Samba monitorozása a Muninnal
A Jessie-beli munin-plugins-extra csomag tartalmaz egy Munin plugint, amely a Samba processek, zárolások és nyitott megosztások számát követi. Beállítást nem igényel, egyszerűen linkeljük be és érvényesítsük a beállítást:
ln -s /usr/share/munin/plugins/samba /etc/munin/plugins/samba systemctl restart munin-node
Szofisztikáltabb monitorozás: TODO!