Tartalom
Bevezető
Adódhat úgy, hogy szeretnénk másokkal megosztani nagyobb méretű fájlokat, vagy éppen fogadni azokat, amik már nem férnek bele egy emailba. Erre a célra természetesen vannak ingyenes fájlmegosztók is, de ha gyakrabban van szükség kétirányú adatátvitelre például távmunka során, akkor célszerűbb ha magunk oldjuk ezt meg. Erre kiválóan alkalmas az SFTP (SSH File Transfer Protocol), ami egy biztonságos fájlátviteli megoldást kínál SSH kapcsolaton keresztül, ellentétben a titkosítás nélküli és elavult FTP kapcsolattal. Az SFTP alapból elérhető minden olyan kiszolgálón, ahol SSH hozzáférés is van. Ebből eredően jelen helyzetben az SSH kapcsolatnak annyi szépséghibája van, hogy ez egy shell hozzáférést is biztosít, amire itt most pont nem lesz szükségünk, mert nem szeretnénk, ha az általunk megosztott hozzáférésen keresztül be tudnának lépni számítógépünk más könyvtáraiba is, és még parancsokat is futtathatnának, hanem azt szeretnénk, hogy csak ahhoz a könyvtárhoz férhessenek hozzá, amelyikhez mi engedélyezzük. Ebben a leírásban megnézzük hogyan hozhatunk létre SFTP felhasználót shell hozzáférés nélkül Linux rendszerünkön.
Ebben a példában az asztali gépemen hozok létre egy csak SFTP-re korlátozott felhasználót, és a laptopomról fogok belépni rá.
Előfeltételek
Először telepítenünk kell egy SSH szervert, ha még nincs a gépünkön:
sudo apt-get install ssh openssh-server
Ezután már minden shell felhasználóval távolról is be tudunk lépni a számítógépre, illetve SFTP kapcsolatot is létesíthetünk. Ezek közül most csak az utóbbira lesz szükségünk, így majd le kell tiltanunk a felhasználót a parancssortól.
Felhasználó létrehozása
Létre kell hoznunk egy új felhasználót a rendszerben, amivel majd csatlakozni fogunk SFTP-n keresztül. A felhasználónk neve ebben a példában legyen "megosztas1". Természetesen bármilyen felhasználónevet adhatunk. A létrehozásához lépjünk be root-ként, majd futtassuk az alábbi useradd parancsot:
useradd megosztas1 -s /sbin/nologin -M
A -s kapcsolóval megadunk a felhasználónak egy másik shellt. Ebben az esetben ezt a nologin paranccsal helyettesítjük. Ezzel biztosítjuk a felhasználót, hogy nem lehet vele belépni a parancssorba. A -M kapcsolóval pedig arra utasítjuk az useradd programot, hogy ne hozzon létre a felhasználónak home könyvtárat sem, mert majd külön beállítjuk hogy melyik könyvtárhoz férhet hozzá.
Ezután adjunk neki egy jelszót:
passwd megosztas1
Ha megvan, ki is próbálhatjuk a su paranccsal, hogy valóban nem tudunk-e belépni ezzel a felhasználóval:
su -l megosztas1
A -l kapcsoló hatására login shell-ként próbálna belépni, tehát belépne a felhasználó home könyvtárába is, ami nem sikerül neki, mivel nincs home könyvtára. Majd utána pedig kiadja a nologin parancs által adott hiba kimenetet: "This account is currently not available.". Így tehát a parancs két hibaüzenetet is dob nekünk, majd visszakerülünk a root parancssorhoz:
Tehát eddig van egy felhasználónk, amivel nem lehet belépni a parancssorba.
SFTP könyvtár létrehozása és beállítása
Az SFTP könyvtárhoz az OpenSSH szerver chroot beállítását fogunk alkalmazni. Ennek viszont olyan követelménye van, hogy a beállított chroot könyvtárat a root-nak kell birtokolnia, és senki más felhasználó vagy csoport nem írhatja. Ha az SFTP hozzáférésünkkel írni is szeretnénk tudni, azaz fájlokat feltölteni, akkor létre kell hozni ez alatt a chroot könyvtár alatt egy olyan alkönyvtárat, aminek a tulajdonosa maga a felhasználó. Dokumentáció.
Root-ként maradva hozzuk tehát létre a felhasználónknak a könyvtárát:
mkdir -p /var/sftp/megosztas1
Ellenőrizzük a chroot könyvtárunk, azaz a /var/sftp jogosultságát és tulajdonosát:
stat -c "%a %U %G %n" /var/sftp
Ennek maximum 755-nek kell lennie, tehát nem írhatja sem a csoport, sem a többi felhasználó, valamint a tulajdonosának is a root-nak kell lennie. Létrehozáskor alapból így is jön létre, ha csak nincs elállítva az umask. Ha nem ezek a tulajdonos és jogosultság beállítások vannak a könyvtáron, akkor állítsuk be.
Ezután állítsuk át a chroot alatt lévő felhasználói könyvtár tulajdonosát és jogosultságát is:
chown megosztas1:megosztas1 /var/sftp/megosztas1
chmod 700 /var/sftp/megosztas1
Ha teljesen el szeretnénk szeparálni egymástól a felhasználókat, akkor természetesen mindegyik felhasználó esetén külön chroot könyvtárat kell alkalmazni, ami ebben az esetben még egy könyvtárszint bevonását igényli (így például a /var/sftp/megosztas1 lenne a chroot könyvtár a root tulajdonossal, és mondjuk a /var/sftp/megosztas1/megosztas1 lenne az ebben lévő írható könyvtár a felhasználói tulajdonossal). Ebben a példában viszont csak egy közös chroot könyvtárat használunk az egyszerűség kedvéért.
Ha tehát megvagyunk a könyvtár struktúrával is, akkor így néz ki az egész idáig:
SSHd beállítása az SFTP számára
Ha idáig megvagyunk mindennel, akkor már csak az OpenSSH-szerver beállítása maradt hátra. Ehhez nyissuk meg szerkesztésre a /etc/ssh/sshd_config fájlt, majd adjuk a végéhez az alábbi részt:
Match User megosztas1 ChrootDirectory /var/sftp ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
Itt a sorok jelentése a kövekező:
- Match User <felhasználónév>: Ez a rész azonosítja ezt az egész feltételes blokkot, ami csak akkor kerül végrehajtásra, ha egyezik a megadott felhasználó a belépett felhasználóval. Ha több felhasználónk is van, akkor vesszővel elválasztva lehet felsorolni őket. Ha külön chroot könyvtárat szeretnénk alkalmazni felhasználónként, akkor külön blokkokat kell létrehozni nekik, amikben meg vannak adva az eltérő chroot könyvtárak.
- ChrootDirectory /var/sftp: Itt kell megadni a chroot könyvtárat, tehát amit a root birtokol, és más nem írhatja. Ezen belül lehetnek a felhasználók külön könyvtárai, amikbe tudnak írni is. A szerver ezeket a könyvtárakat a tulajdonosai alapján egyezteti össze az SFTP felhasználókkal, tehát a könyvtárnevek bármik lehetnek, így nem kell őket itt megadni. Azonban célszerű következetes könyvtárelnevezési módszert alkalmazni, így például ha megegyezik a felhasználó nevével, akkor biztosan nem keverjük össze őket.
- AllowTcpForwarding no: Letiltja a TCP port továbbítást.
- X11Forwarding no: Letiltja az X11 továbbítást.
Mentsük le a fájlt, majd indítsuk újra az SSH szolgáltatást:
systemctl restart sshd.service
Ezzel készen is állunk az SFTP használatára.
SFTP tesztelése
Mielőtt bárkinek is adnánk SFTP hozzáférést a gépünkhöz, előtte teszteljük a kapcsolatot.
Ha már rendelkezésre áll az SFTP kapcsolat, akkor azt többféleképpen is használhatjuk: alkalmi vagy perzisztens módon bemountolhatjuk Linux rendszereken, vagy Windows rendszerekből is elérhetővé tehetjük, vagy ha nincs rá folyamatosan szükségünk, akkor egyszerűen csak felcsatlakozunk egy kliens programmal. Ebben a részben kipróbáljuk néhánnyal az új SFTP fiókunkat.
SSH parancssori belépés tesztelése
Első körben ellenőrizzük, hogy valóban nem tudunk-e belépni a parancssorba ezzel a felhasználóval. A kliens gépen futtassuk a saját paramétereinkkel az ssh belépést. Nálam például:
ssh megosztas1@asztali
Majd miután megadtuk a jelszót, a következő hibát dobja: "This service allows sftp connections only. Connection to asztali closed." Tehát most már nem azt a hibát dobja, mint az elején, mint amit a nologin miatt kaptunk, hanem most már az OpenSSH szerver kezeli ezt a kapcsolatot. Így már biztosak lehetünk, hogy két helyen is le van tiltva a parancssori belépés.
Távoli SFTP fájlrendszer felcsatolása az sshfs parancssal
Ha a kliens számítógépen is Linux rendszert használunk, ahonnan be szeretnénk lépni az SFTP fiókba, akkor az sshfs linux parancs segítségével átmenetileg csatolhatunk fel SSHFS fájlrendszereket, amik a kliens gép újraindítása után megszűnnek. Használatához először telepítsük a programot:
apt-get install sshfs
Majd az alábbi szintaxissal csatolhatjuk fel a fájlrendszert (szintén root-ként):
sshfs -o allow_other <felhasználó>@<szerver>:</abszolút/elérési/út> </helyi/csatolási/pont>
A saját példánknál maradva először hozzunk létre a kliens gépen egy csatolási könyvtárat:
mkdir /mnt/sftp
Majd futtassuk a fentebbi parancsot a saját paramétereinkkel:
sshfs -o allow_other megosztas1@asztali:/ /mnt/sftp
Itt az abszolút elérési útnak megadhatjuk a gyökér könyvtárat is (/), vagy a struktúra bármelyik alkönyvtárát, amelyikre szükségünk van a munka során.
Ezután beléphetünk a csatolási könyvtárba, ahol már helyi könyvtárként használhatjuk az SFTP tárhelyünket:
Ha már nincs szükség a kapcsolatra, akkor az umount parancs segítségével választhatjuk le, amit csak root-ként tehetünk meg:
umount /mnt/sftp
Belépés az sftp parancssori klienssel
Ha nem szeretnénk felcsatolni a fájlrendszert, akkor az sftp parancs segítségével kliensként csatlakozhatunk a parancssorban:
sftp megosztas1@asztali
Ekkor egy FTP-hez hasonló parancssort kapunk, amiben elvégezhetjük a szükséges fájlműveleteket.
Belépés a FileZilla grafikus FTP/SFTP kliens segítségével
És végül jöjjön a jól ismert és közkedvelt FileZilla használata.
Nyissuk meg a kedvenc helyeket, majd kattintsunk az Új állomás gombra. Ekkor előjön a beállító ablak:
Itt állítsuk be a protokollt az "SFTP - SSH File Transfer Protocol" opcióra, a címhez írjuk be a kiszolgáló hosztnevét, vagy IP-címét, majd a port részbe ha az alapértelmezett 22-es portszámtól eltérő portot használunk, akkor itt adjuk meg, egyébként hagyjuk üresen. Majd adjuk meg a felhasználónevet és a jelszót és mentsük le a panelt.
Első csatlakozáskor előjön a szokásos ismeretlen kulcsos üzenet:
Jegyeztessük meg vele, majd csatlakozzunk.
És újra előkerülnek a dolgaink az SFTP-ről.
Konklúzió
Így készíthetünk FTPS felhasználókat, fiókokat, amiket aztán biztonságosan használhatunk a titkosított SSH csatornán keresztül, anélkül, hogy a felhasználókkal be lehetne lépni a parancssorba.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 337 megtekintés