Egyszerű Samba fileserver (Jessie)

Innen: AdminWiki

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!

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!