Кіріспе

Unix тәрізді жүйелерде түбір каталогты өзгертетін операция – chroot. Chroot – Unix және Unix тәрізді операциялық жүйелерде ағымдағы жұмыс істеп тұрған процесс және оның туынды процестері үшін көрінетін түбір каталогты өзгертетін операция. Мұндай өзгертілген ортада іске қосылған бағдарлама белгіленген каталог ағашының сыртындағы файлдарды атауға (демек, әдетте қол жеткізе алмайды). "Chroot" термині жүйелік шақыруды немесе орама бағдарламасын білдіруі мүмкін. Өзгертілген орта chroot түрмесі деп аталады.

Тарих

chroot жүйелік шақыру 1979 жылы 7-ші Unix нұсқасын әзірлеу кезінде енгізілді. Бір дерек көзі Билл Джой оны 1982 жылдың 18 наурызында, 4.2BSD шығарылғанға дейін 17 ай бұрын, оның орнатылуын және құрастыру жүйесін сынау үшін қосыпты деседі. Ядросы бар BSD-нің барлық нұсқаларында chroot(2) бар. Chroot-қа қатысты "jail" (түрме) терминін алғаш рет 1991 жылы хакерді бақылау үшін бал құмырасын жасаған Билл Чесвик қолданды. Түрмеден қашу туралы алғашқы мақала SunWorld Online-ның қауіпсіздік бағанында, оны Кароль Феннелли жазған; 1999 жылдың тамыз және қаңтардағы санында chroot тақырыбына қатысты көптеген мәселелер қамтылған. Виртуализация үшін оны пайдалы ету мақсатында FreeBSD осы ұғымды кеңейтіп, 2000 жылы 4.0 нұсқасында jail командасын енгізді. 2002 жылы Николас Бойтекс жазған мақалада Linux-та түрме қалай құруға болады деп сипатталған. 2003 жылы Linux түрмесін пайдаланатын алғашқы интернет микроқызметтер провайдерлері SAAS/PAAS (shell containers, proxy, ircd, bots) қызметтерін ұсынды, олар түрмеде пайдаланылу бойынша есептелді. 2005 жылы Sun "стероидтердегі chroot" деп сипатталған Solaris Containers (сонымен қатар Solaris Zones деп те аталады) шығарды. 2008 жылы LXC (соңынан Docker негізделген) "контейнер" терминологиясын қабылдады және 2013 жылы Linux ядросының 3.8 нұсқасына пайдаланушы кеңістіктерін қосу арқасында танымалдылыққа ие болды.

Қолданылуы

Хроот ортасын бағдарламалық жүйенің жеке виртуалды көшірмесін жасау және орналастыру үшін пайдалануға болады. Бұл мыналар үшін пайдалы:
Сынақ және әзірлеу. Бағдарламалық жасақтаманы өндіріс жүйесіне орнату үшін тым қауіпті болған жағдайда, сынақ ортасын хроотта құруға болады.
Тәуелділікті басқару. Бағдарламалық жасақтаманы, тек қана күтілетін тәуелділіктерімен толтырылған хроотта әзірлеуге, құрастыруға және сынауға болады. Бұл, әртүрлі бағдарламалық кітапханалар жиынтығымен жобаларды құрастыратын әзірлеушілердің салдарынан туындайтын байланыс қателіктерінің алдын алуға көмектеседі.
Үйлесімділік. Ескі бағдарламалық жасақтаманы немесе басқа ABI қолданатын бағдарламалық жасақтаманы кейде хроотта іске қосу қажет, себебі олардың қолдаушы кітапханалары немесе дерек файлдары хост жүйесімен атау немесе байланыс тұрғысынан қайшылыққа түсуі мүмкін.
Қалпына келтіру. Егер жүйе жүктеле алмайтын болса, хроот зақымдалған ортаға қайта оралу үшін пайдаланылуы мүмкін, бұл басқа түбірлік файлдық жүйеден (мысалы, орнату ортасынан немесе Live CD-ден) жүктеу арқылы жүзеге асырылады.
Артықшылықтарды бөлу. Бағдарламаларға хроотқа ашық файл дескрипторларын (файлдар, құбырлар және желілік қосылымдар үшін) алып жүруге рұқсат беріледі, бұл түрме дизайнын жеңілдетіп, хроот каталогында жұмыс файлдарын қалдыру қажеттілігін жояды. Бұл сонымен қатар, қауіпсіздік бұзушылығын алдын алу мақсатында, артықшылықтары бар бағдарламаның осал бөліктерін құмдық ортада іске қосудың әдеттегі тәсілін жеңілдетеді. Ескеріңіз, хроот түбірлік артықшылықтары бар процесті толығымен шектеу үшін жеткіліксіз болуы мүмкін.

Шектеулер

chroot механизмі артықшылықты (root) пайдаланушылардың қасақана бұрмалауына қарсы қорғауға арналған емес. Бір ерекшелігі – NetBSD, онда chroot қауіпсіздік механизмі болып саналады және ешқандай қашу жолы белгілі емес. Көптеген жүйелерде chroot контексттері дұрыс жиналмайды және жеткілікті құқықтары бар chroot бағдарламалары екінші chroot-ты орындау арқылы одан шығуға мүмкіндік алады. Осы қауіпсіздік кемшіліктерінің тәуекелін азайту үшін chroot бағдарламалары chroot-тан кейін мүмкіндігінше тезірек root құқықтарынан бас тартуы керек немесе басқа механизмдер – мысалы, FreeBSD түрмелері – қолданылуы керек. FreeBSD сияқты кейбір жүйелер екінші chroot шабуылының алдын алу үшін қауіпсіздік шараларын қолданады. Қарапайым файлдық жүйелерде құрылғы түйіндерін қолдайтын жүйелерде chroot-талған root пайдаланушы құрылғы түйіндерін жасап, оларға файлдық жүйелерді орната алады; сондықтан chroot механизмі өзінен-өзі артықшылықты пайдаланушылардың жүйелік құрылғыларға төмен деңгейдегі кіруін тоқтату үшін қолданылмайды. Бұл I/O, өткізу қабілеті, дискілік кеңістік немесе CPU уақыты сияқты ресурстарды пайдалануды шектеуге бағытталмайды. Көптеген Unix жүйелері толыққанды файлдық жүйеге бағдарланбаған және желілік байланыс пен процестерді басқару сияқты, chroot бағдарламасына жүйелік шақыру интерфейсі арқылы қол жетімді болатын, қауіпті болуы мүмкін функционалдықты сақтайды. Бастапқыда бағдарламалар жұмыс кеңістігін, конфигурациялық файлдарды, құрылғы түйіндерін және белгілі бір алдын ала анықталған орындарда орналасқан ортақ кітапханаларды табуды күтеді. Chroot бағдарламаның сәтті іске қосылуы үшін chroot каталогы осы файлдардың ең төменгі жиынтығымен толтырылуы керек. Бұл chroot-ты жалпы құмдық (sandboxing) механизмі ретінде пайдалануды қиындатады. Jailkit сияқты құралдар осы процесті жеңілдетуге және автоматтандыруға көмектеседі. Chroot-ты тек root пайдаланушысы ғана орындай алады. Бұл пайдаланушылардың setuid бағдарламасын арнайы құрылған chroot түрмесіне (мысалы, жалған және файлдарымен) орналастырып, оны құқықтарын арттыруға итермелеуге жол бермеу үшін жасалған. Кейбір Unix жүйелері chroot механизмінің кеңейтімдерін ұсынады, олар осы шектеулердің кем дегенде бір бөлігін шешуге мүмкіндік береді (Операциялық жүйе деңгейіндегі виртуализация технологиясын жүзеге асыруға қараңыз).

Белгілі қолданулар

Postfix поштаны жеткізу агенті жеке-жеке chrooted көмекші бағдарламалардың құбыр желісі ретінде жұмыс істейді. 4.2BSD-ге ұқсас, Debian және Ubuntu-ның ішкі пакеттерді құрастыру жүйелері пакеттер арасындағы қате құрылыс тәуелділіктерін анықтау үшін chroot-ты кеңінен пайдаланады. SUSE өзінің құрастыру бағдарламасында ұқсас әдіс қолданады. Fedora, Red Hat және басқа да RPM-ге негізделген дистрибутивтер mock сияқты chroot құралын пайдаланып барлық RPM-дерді құрастырады. POSIX жүйелері үшін көптеген FTP серверлері сенімсіз FTP клиенттерін оқшаулау үшін chroot механизмін қолданады. Бұл кіріс байланысын өңдеу үшін процесс тармақтандырылып, содан кейін туынды процесті chroot-қа орналастыру арқылы іске асырылуы мүмкін (бағдарламаны іске қосу үшін қажетті кітапханалармен chroot-ты толтыру қажеттілігінен аулақ болу үшін). Егер артықшылықтарды бөлу қосылса, OpenSSH демоны әрбір клиент үшін желілік трафикті алдын ала куәландыру үшін артықшылығы жоқ көмекші процесті бос каталогқа chroot-тайды. Демон SFTP және shell сессияларын да chroot-та оқшаулай алады (4.9p1 нұсқасынан бастап). ChromeOS Crouton-ды пайдаланып Linux инстанциясын іске қосу үшін chroot-ты қолдана алады, бұл әдетте жеңіл ОС-ке аппараттық ресурстарға қол жеткізуді қамтамасыз етеді. Осы мақалада сипатталған қауіпсіздік салдары осы жағдайда да қолданылады.