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
teszissh
válassza ki a beépített lehetőség, hogy SFTP szolgáltatás (amely vezérelheti függetlenül). -
ChrootDirectory
megmondjasshd
hol korlátozhatja a felhasználót. -
Subsystem sftp internal-sftp
azt mondjasshd
– 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.