Кіріспе
Unix тәрізді жүйелерде түбір каталогты өзгертетін операция – chroot. Chroot – Unix және Unix тәрізді операциялық жүйелерде ағымдағы жұмыс істеп тұрған процесс және оның туынды процестері үшін көрінетін түбір каталогты өзгертетін операция. Мұндай өзгертілген ортада іске қосылған бағдарлама белгіленген каталог ағашының сыртындағы файлдарды атауға (демек, әдетте қол жеткізе алмайды). "Chroot" термині жүйелік шақыруды немесе орама бағдарламасын білдіруі мүмкін. Өзгертілген орта chroot түрмесі деп аталады.
chroot is an operation on Unix and Unix like operating systems that changes the apparent root directory for the current running process and its children. A program that is run in such a modified environment cannot name (and therefore normally cannot access) files outside the designated directory tree. The term "chroot" may refer to the system call or the wrapper program. The modified environment is called a chroot jail.
Тарих
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-ден) жүктеу арқылы жүзеге асырылады.
Артықшылықтарды бөлу. Бағдарламаларға хроотқа ашық файл дескрипторларын (файлдар, құбырлар және желілік қосылымдар үшін) алып жүруге рұқсат беріледі, бұл түрме дизайнын жеңілдетіп, хроот каталогында жұмыс файлдарын қалдыру қажеттілігін жояды. Бұл сонымен қатар, қауіпсіздік бұзушылығын алдын алу мақсатында, артықшылықтары бар бағдарламаның осал бөліктерін құмдық ортада іске қосудың әдеттегі тәсілін жеңілдетеді. Ескеріңіз, хроот түбірлік артықшылықтары бар процесті толығымен шектеу үшін жеткіліксіз болуы мүмкін.
Testing and development A test environment can be set up in the chroot for software that would otherwise be too risky to deploy on a production system. Dependency control Software can be developed, built and tested in a chroot populated only with its expected dependencies. This can prevent some kinds of linkage skew that can result from developers building projects with different sets of program libraries installed. Compatibility Legacy software or software using a different ABI must sometimes be run in a chroot because their supporting libraries or data files may otherwise clash in name or linkage with those of the host system. Recovery Should a system be rendered unbootable, a chroot can be used to move back into the damaged environment after bootstrapping from an alternate root file system (such as from installation media, or a Live CD). Privilege separation Programs are allowed to carry open file descriptors (for files, pipelines and network connections) into the chroot, which can simplify jail design by making it unnecessary to leave working files inside the chroot directory. This also simplifies the common arrangement of running the potentially vulnerable parts of a privileged program in a sandbox, in order to pre emptively contain a security breach. Note that chroot is not necessarily enough to contain a process with root privileges.
Шектеулер
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-ты қолдана алады, бұл әдетте жеңіл ОС-ке аппараттық ресурстарға қол жеткізуді қамтамасыз етеді. Осы мақалада сипатталған қауіпсіздік салдары осы жағдайда да қолданылады.