Hogyan állítsuk be a Linux chroot jails

a chroot jail kifejezést először 1992-ben használták, egy kiemelkedő biztonsági kutató, Bill Cheswick cikkében (ami érdekes, ha ilyen dolgokkal foglalkozik, a cikket itt találja). A Chroot jails 2003-ban kezdett megjelenni olyan alkalmazásokkal, mint az IRC és az FTP. 2005-ben a Sun bemutatta zónák nevű “konténerek” technológiáját, amely viszont a névterek fogalmának előfutára volt, amely a konténerekkel használt alapvető technológia.

Chroot alapjai

a Chroot lehetővé teszi a rendszergazdák számára, hogy ellenőrizzék a szolgáltatásokhoz vagy fájlrendszerekhez való hozzáférést, miközben szabályozzák az alapul szolgáló kiszolgálói környezetnek való kitettséget. A két gyakori példa a rendszerindítás során és a Red Hat/CentOS/Fedora rendszereken, valamint a biztonságos FTP-ben (SFTP) található “emergency shell”.

a parancs így néz ki:

chroot <newroot> ]

a sudo parancshoz hasonlóan a chroot parancs megváltoztatja a következő parancs környezetét. Más szavakkal, a newroot könyvtárra vált, és ezt a könyvtárat “működő” könyvtárrá teszi. A command ezután végrehajtja azt a helyet, ami hasznos olyan dolgokhoz, mint például egy olyan rendszer megmentése, amely nem indul el.

a sudo – tól eltérően a könyvtárban “benne lesz”. Ez a gyakorlat ismét hasznos, ha külső adathordozóról indít, de a munkához “helyi” fájlrendszerhez vagy parancshoz kell hozzáférnie.

a chroot másik gyakori használata egy szolgáltatás vagy Felhasználó korlátozása egy csomagoló használatával a fájlrendszer többi részének elrejtésére, ezáltal korlátozva a távoli felhasználó nézetét más felhasználók adatairól. Népszerű megvalósítás ezzel a megközelítéssel SFTP.

Example

Mielőtt elkezdené ezt a példát, győződjön meg róla, hogy van biztonsági másolata. Ebben az esetben készítsen biztonsági másolatot a /etc/ssh/sshd_config fájlról, mert kifejezetten ezen fog változtatni:

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

egyelőre csak az SFTP-felhasználókat korlátozza a szerver otthoni könyvtáraira. Ez a követelmény azt jelenti, hogy hozzá kell adnia a felhasználókat, majd egy csoportba kell helyeznie őket:

# useradd -g sftpusers -s /sbin/nologin -p nick nick

vegye figyelembe, hogy ezzel nick fiókot rendel hozzá bejelentkezési héj nélkül. Ez a technika mind praktikus, mind jó biztonsági gyakorlat: ha csak SFTP-t használ, akkor nem szabad bejelentkezési jogosultságokkal rendelkeznie. A következő cikkben megvitatom a shell távoli felhasználók számára történő biztosítását.

most meg kell mondania a ssh szolgáltatásnak, hogy mit kell tennie, amikor az SFTP felhasználók bejelentkeznek. Nyissa meg a /etc/ssh/sshd_config fájlt, és a végén adja hozzá a következőket:

Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no

fontos, hogy ezeket a beállításokat külön bejegyzéskészletként adja hozzá, és a Match szintaxissal jelezze, hogy ez a szakasz csak a csoport felhasználóira vonatkozik. Ha módosította a meglévő bejegyzéseket, azok minden SSH-felhasználóra vonatkoznának, ami megszakíthatja a távoli hozzáférést.

a konfigurációs sorok a következőképpen oszlanak meg:

  • a ForceCommand teszi ssh válassza ki a beépített lehetőség, hogy SFTP szolgáltatás (amely vezérelheti függetlenül).
  • ChrootDirectory megmondja sshd hol korlátozhatja a felhasználót.
  • Subsystem sftp internal-sftp azt mondja sshd – nek, hogy töltse be a belső sftp szolgáltatást, és tegye elérhetővé.

lehet, hogy meg kell győződnie arról, hogy ez a Subsystem nincs már meghatározva, ha ezt a sort korábban kommentálja a konfigurációs fájlban:

# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server

miután elvégezte a módosításokat és ellenőrizte a helyesírást, folytassa a módosítások mentésével. Ezután indítsa újra sshd:

# systemctl restart sshd

tesztelje az új felhasználót:

$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit

Hoppá, várj csak egy percet: úgy tűnik, hogy láthatja az összes többi felhasználó könyvtárát is. Ezekre a könyvtárakra azonban nem lehet navigálni:

sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied

a chrooted felhasználót a saját saját könyvtárába irányíthatja a ChrootDirectory sor megváltoztatásával a sshd_config fájlban:

ChrootDirectory /

ez a gyors változás teszi úgy tűnik, hogy Nick, mintha ő a saját saját könyvtárában, és ő nem lesz képes látni más felhasználó fájlokat:

sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>

hová tűnt? Ezt nézd meg:

# ls /home/nicktest.txt

vegye figyelembe, hogy a chroot jail önmagában nem tekinthető megfelelő biztonsági korlátozásnak. Bár megakadályozza, hogy a felhasználó megváltozzon egy korlátozott könyvtárból, ennek vannak módjai (az Általános elképzelésre a chroot(2) man oldalon hivatkozunk, amelyet meg kell vizsgálnunk, ha fontolóra vesszük ezt a trükköt termelési vagy üzleti szempontból kritikus környezetben.)

csomagolás (egyelőre)

tehát láthatja, hogy a chroot nagyon hasznos eszköz lehet. A 2. részben részletesebben megvizsgálom az egyes könyvtárak hozzárendelését a felhasználókhoz, valamint egy shell környezet biztosítását egy távoli felhasználó számára anélkül, hogy a kiszolgáló többi részét kitenném.

új a konténerekben? Töltse le a Containers primert, és tanulja meg a Linux containers alapjait.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.