Hogyan oszthatunk meg könyvtárakat Linux és Windows rendszerek között (3. oldal)

botond küldte be 2018. 11. 23., p – 22:12 időpontban

A 3. oldal tartalma

 

Folytatás

A leírás első oldalán a Linuxra feltelepített Samba szerverrel kialakítottunk egy megosztást, amihez a második oldalon Windows rendszerből kapcsolódtunk.

Ezen az oldalon pedig fordított irányban használunk megosztást: A cifs-utils segítségével kapcsolódunk a Windowsban megosztott könyvtárakhoz.

 

 

Windows megosztás elérése Linux rendszerről

Első körben hozzunk létre, vagy válasszunk ki egy könyvtárat a Windows rendszerű gépen, amit meg szeretnénk osztani.

Az egyszerűség kedvéért én a C meghajtóm gyökér könyvtárában hoztam létre egy "Megosztás" nevű könyvtárat:

Windows - Megosztott könyvtár

A következő lépésben a Linuxos gépen ellenőrizzük, hogy a hosts fájlban benne van-e a Windowsos gép IP címe, mert így kényelmesebben tudunk rá hivatkozni a továbbiakban, tehát célszerű beállítani a gép valódi nevét és IP címét.

nano /etc/hosts

Nálam ez így néz ki:

192.168.1.103   bnd-asztali-v

A leírás első oldalán telepítettük a cifs-utils csomagot, erre most lesz szükségünk. Így ha kimaradt volna, akkor pótoljuk:

apt-get install cifs-utils

A Linuxos gépen keressünk egy helyet, ahová csatolni fogjuk a megosztott Windows könyvtárat.

Én erre a célra létrehozok egy könyvtárat a /mnt alatt. Ezt akár felhasználóként, akár rootként is létrehozhatnánk, nincs jelentősége, mert a mountoláskor fogja a rendszer beállítani a könyvtár tulajdonosát. Viszont a /mnt könyvtárban csak a root-nak van írási joga, így tehát marad a root.

mkdir /mnt/asztali-megosztás

Tehát nálam ez lesz a csatolási pont.

Most pedig rootként mountoljuk be a fent megosztott Windows könyvtárat. Ehhez használjuk a mount parancsot:

mount -t cifs //bnd-asztali-v/Megosztás /mnt/asztali-megosztás/ -o user=botond,uid=botond,gid=botond,iocharset=utf8,sec=ntlm

Itt a megadott opciók jelentése a következő:

  • user: Távoli megosztás (ez esetben a Windowsos gép) felhasználóneve
  • uid: Helyi felhasználó neve vagy UID-ja. Ez a felhasználó lesz a tulajdonosa a becsatolt könyvtárnak.
  • gid: Helyi csoport neve vagy csoport azonosítója. Ez a csoport lesz a tulajdonosa a becsatolt könyvtárnak
  • iocharset: A fájlstruktúra neveinek karakerkódolása.
  • sec: Titkosítási módszer. Az ntlm a Windowsos megosztásokhoz jó.

Ezután bekéri a felhasználó jelszavát és utána a megosztott Windows könyvtár elérhető a csatolási pontban megadott útvonalon.

Ha nem szeretnénk utólag begépelni a jelszót, akkor azt is megadhatjuk a parancssorban:

mount -t cifs //<windows gépnév>/<megosztás> /<helyi csatolási pont> -o user=<megosztás felhasználóneve>,pass=<megosztás jelszava>,uid=<helyi felhasználó>,gid=<helyi csoport>,iocharset=utf8,sec=ntlm

Így scriptekből is használható. Viszont ez nem biztonságos megoldás, ha a parancssorban adunk meg jelszavakat, pláne, ha utána még scriptekbe is betesszük. Erre a megoldás a credentials fájl használata.

A cifs mountolásával kapcsolatban további paraméterek és beállítások megtekinthetők a mount.cifs manual oldalán.

 

 

Credentials fájl használata a biztonságos csatlakozáshoz

Biztonságosabban csatlakozhatunk a távoli megosztáshoz, hogyha nem parancssorban adjuk meg hozzáférési adatainkat, hanem helyette egy speciális fájlban tároljuk azokat, amire aztán hivatkozhatunk a parancssorból. Így a jelszavaink nem lesznek láthatók sehol.

Az itt leírt credentials fájl használata bármilyen jelszavas mountoláshoz használható, nem csak Windows megosztásokhoz történő csatlakozásokhoz.

A Linux felhasználói fiókunkban – akinek mountolni szeretnénk a megosztást – hozzunk létre egy fájlt, például:

nano ~/.asztali-v-credentials

Rejtett fájlként hozom létre, így még jobb lesz. Majd tegyük bele a következőt:

username=<megosztás felhasználóneve>
password=<megosztás jelszava>
domain=<domain név>

Ezek közül az utolsó sor, a domain elhagyható ha helyi hálózaton dolgozunk. Valamint ügyeljünk rá, hogy a sorok végén ne maradjanak szóközök, speciális karakterek, stb, mert a mount kényes az ilyesmire.

Ezután mentsük le a fájlt, majd állítsunk be neki egy biztonságos jogosultságot a chmod paranccsal:

chmod go-r ~/.asztali-v-credentials

Itt pedig annyit tettünk, hogy a csoporttól (g) és a többiektől (o) megvontuk az olvasási jogot (-r). Így tehát a fájlt mostantól a csak a gazdája és a root todják olvasni.

Ezután módosítsuk a mount parancsunkat ennek megfelelően:

mount -t cifs //bnd-asztali-v/Megosztás /mnt/asztali-megosztás/ -o credentials=/home/botond/.asztali-v-vcredentials,uid=botond,gid=botond,iocharset=utf8,sec=ntlm

Itt ugye az uid= és gid= opciók továbbra is megmaradnak, mert ezek a helyi felhasználót állítják be a megosztás tulajdonosának.

Ezzel tehát megvédtük hozzáférési adatainkat attól, hogy bármilyen parancssorban vagy scriptben meg kellene jelenítenünk őket.

Egyébként ez a biztonsági megoldás hasonló a MySQL nél használt defaults fájlok használatához.

A kapcsolat tartóssá tétele Linux oldalon

A különböző fájlrendszerek bemountolását perzisztens módon is elvégezhetjük, ilyenkor a gép újraindítása után is újból végrehajtásra kerül a megosztás csatlakoztatása automatikusan.

Ehhez nyissuk meg a /etc/fstab fájlt, és az eddigi beállításoknak megfelelően adjuk hozzá a következő sort:

//bnd-asztali-v/Megosztás /mnt/asztali-megosztás cifs credentials=/home/botond/.asztali-v-credentials,uid=botond,iocharset=utf8,sec=ntlm       0       0

Természetesen módosítsuk a saját kialakításunknak megfelelően a paramétereket.

Hibaelhárító

Itt most a saját tapasztalatomat írom le arra az esetre ha elszállna a Windows megosztás.

Ha a Windows megosztást Linux alól masszívan használunk, egyszerre írjuk és olvassuk is nagy adatmennyiségekkel, akkor előfordulhat, hogy a Windows ledobja a kapcsolatot.

Hosszas keresgélés után végül meglett a megoldás, illetve kettő is:

A rövidebb, és gyorsabb megoldás ilyenkor, ha a Windows gépen nyitunk egy DOS parancssor ablakot, majd újraindítjuk a szerver szolgáltatást:

net stop Server
net start Server

Ezután visszaáll a kapcsolat a megosztott könyvárral. Ha mégsem, akkor a Linuxon még egy újra mountolás is kell. De nálam ilyenkor helyreállt a kapcsolat.

Persze ez csak gyors foltozás, így az alábbi tartósabb megoldást kell elvégezni.

A tartósabb megoldás

Van egy tartósabb megoldás, amit elvégezve többször nem fordult elő a hiba. Ezt pedig a Windows registry-ben kell megoldani. 

Futtassuk a Windowsban a regedit parancsot, majd navigáljuk el benne az alábbi pontig:

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/LanmanServer/Parameters/

És itt a Size értékét állítsuk a gyári 1-ről 3-ra, valamint hozzunk létre egy új Duplaszó (32 bites) mezőt "SMB2" néven, aminek pedig adjunk 0 értéket.

Windows - Regedit: SMB Megosztási hiba javítása

Ezután indítsuk újra a Windows számítógépet, és onnantól már nem fogja ledobálni a csatlakozást. Legalábbis nálam nem fordult elő kb másfél év óta.

Ezt anno sok keresgélés után itt találtam meg, nagy köszönet a probléma megoldójának!

 

 

Samba megosztás elérése másik Linuxos számítógépről

Még ez a variáció maradt hátra, amikor egy Samba megosztást szeretnénk elérni egy másik Linuxos számítógépről.

Persze két Linux rendszer között a megosztás megoldható NFS fájlmegosztási módszerrel is, azonban ha egy hálózatra több számítógép is csatlakozik, akkor célszerűbb a Samba megosztást választani, így a Windows gépek is kényelmesen tudják használni a megosztott könyvtárakat.

A Samba megosztást majdnem ugyanúgy kell mountolni, mint a fentebb leírt Windows megosztást, annyi különbséggel, hogy az opcióknál nem használjuk az ntlm titkosítási módszert.

Így tehát a mount parancs a következőképpen alakul:

mount -t cifs //<távoli gép>/<megosztás> /<helyi csatolási pont> -o credentials=/<credentials fájl>,uid=<helyi felhasználó>,gid=<helyi csoport>,iocharset=utf8

Az fstab bejegyzés pedig:

//<távoli gép>/<megosztás> /<helyi csatolási pont> cifs credentials=/<credentials fájl>,uid=<helyi felhasználó>,gid=<helyi csoport>,iocharset=utf8	0	0

Az opciók paraméter blokk megadásánál minden esetben ügyeljünk, hogy az opciókat elválasztó vesszők körül ne legyenek szóközök, mert akkor már másik paraméternek számítanak. Valamint az elérési útvonalak (csatolási pont, credentials fájl) mindig abszolút útvonalak legyenek, így ezért is tettem be a / jeles kezdéseket.

 

További hasznos beállítások Linux oldalon

Ha Linux oldalon az fstab fájlban csatolunk fel Windows megosztásokat, vagy akár másik Linux gépen lévő Samba megosztásokat, akkor még fűszerezhetjük néhány további lehetőséggel az fstab sorában már meglévő opcióinkat. Az alábbi beállításokat tehát az opciók elé, mögé vagy akár közé is szúrhatjuk, vesszővel elválasztva, szóközök nélkül, ahogyan a többi opciót is.

Jogosultságok maszkolása

Alapértelmezetten a CIFS-el mountolt fájlrendszer – akárcsak például egy NTFS – nem tárolja a könyvtárak és fájlok UNIX-szerű jogosultságait. Ennél fogva az így felcsatolt fájlrendszeren 777 lesz a jogosultság (rwxrwxrwx) a könyvtárakon és a fájlokon is. Ez így nem a legtökéletesebb, mert feleslegesen rákerül minden jog a könyvtárakra és fájlokra. Ahhoz, hogy beállítsuk a számunkra megfelelő jogosultsági struktúrát, maszkolást kell használnunk. Erre szolgálnak a dir_mode és a file_mode opciói a CIFS fájlrendszerek mountolásának.

Ha tehát mondjuk be szeretnénk állítani egy normál jogosultsági szisztémát, ami a könyvtárak esetén "drwxr-x-r-x" (755), a fájlok esetén pedig "-rw-r--r--" (644) beállítást jelent, akkor adjuk meg ezeket oktálisan, amit a meglévő opciók közé szúrhatunk:

...,dir_mode=0755,file_mode=0644,...

A CIFS mountolás összes opciójáról a mount.cifs manual oldalán tájékozódhatunk.

Hálózati hibák kiküszöbölése

Ha a Linux kliens gép indulása idején hálózati gond adódik, vagy a hálózaton éppen nem érhető el a beállított Samba megosztás (például egy otthoni hálózatban még nincs bekapcsolva a kiszolgáló), akkor induláskor a systemd alapértelmezés szerint 90 másodpercig várakozik a megosztás elérésének reményében, majd hibával le is állhat a boot folyamat, amennyiben ezután sem éri el a megosztást. Hogy ezt kiküszöböljük, használjuk a nofail és az x-systemd.device-timeout opciókat. Az elsőt csak egyszerűen meg kell adni, ami arra szolgál, hogy ha nem érhető el a megadott csatolás, akkor ne álljon le hibával, a másodiknak pedig meg kell adni a várakozási időt, amennyit maximum várakozhat a csatolni kívánt fájlrendszer elérhetőségére.

Például:

...,nofail,x-systemd.device-timeout=1s,...

Így tehát ha véletlen nincs bekapcsolva a Samba kiszolgálót futtató gép, a kliens akkor is elindul gond nélkül. Menet közben pedig a "mount -a" paranccsal csatolhatjuk fel az időközben elérhetővé vált fájlrendszert.

 

 

Konklúzió

Ebben a hosszú leírásban átnéztük a Samba segítségével történő fájlmegosztás működését, valamint a más gépeken megosztott könyvtárakhoz történő kapcsolódást. Így most már akár egy vegyes rendszerekből álló irodai hálózaton is könnyedén beállíthatjuk a megosztásokat.

Persze a Samba-nak valamint a cifs mountolásnak még sok egyéb beállítási lehetőségei is vannak, de az itt leírt ismeretek már elegendőek a hétköznapi használatra.

 

 

Lapozó

Ez a leírás több oldalból áll: