Как да използвате командата chroot в Linux

Подкана за терминал на лаптоп с Linux

Фатмавати Ахмад Заенури/Shutterstock.com



|_+_| командата може да ви изпрати в затвора, да запази вашата среда за разработка или тестване изолирана или просто да подобри сигурността на вашата система. Ние ви показваме най-лесния начин да го използвате.

Какво е chroot?

Ако се опитате да измерите полезността на дадена команда, трябва да вземете предвид функционалността, която предоставя, и лекотата на използване. Ако е твърде сложно за хората за използване или твърде дълго, за да ги накара да искат да се опитат да го използват, функционалността може също да е нулева. Ако никой не го използва, той не предоставя никаква функционалност.





При дискусии с потребители на Linux — лично и във форуми — изглежда, че |_+_| командата е тази, която е определена като трудна за използване или твърде упорита и досадна за настройка. Изглежда, че тази страхотна помощна програма не се използва толкова много, колкото може да бъде.

10 основни Linux команди за начинаещи СВЪРЗАНИ 10 основни Linux команди за начинаещи

С |_+_| можете да настроите и стартирайте програми или интерактивни обвивки като Bash в капсулирана файлова система, която е възпрепятствана да взаимодейства с вашата обикновена файлова система. Всичко в рамките на |_+_| среда е въведена и задържана. Нищо в |_+_| средата може да види отвъд собствената си специална главна директория, без да ескалира до root привилегии. Това е спечелило този тип среда прякора на |_+_| затвор. Терминът затвор не трябва да се бърка с FreeBSD |_+_| команда, която създава |_+_| заобикаляща среда това е по-сигурно отколкото обичайното |_+_| заобикаляща среда.



Но всъщност има много лесен начин за използване на |_+_|, през който ще преминем. Използваме редовни Linux команди, които ще работят във всички дистрибуции. Някои дистрибуции на Linux имат специални инструменти за настройка на |_+_| среди, като напр debootstrap за Ubuntu, но тук сме дистроагностици.

Кога трябва да използвате chroot?

A |_+_| средата предоставя функционалност, подобна на тази на виртуална машина, но е по-леко решение. Затворената система не се нуждае от хипервизор, за да бъде инсталиран и конфигуриран, като напр VirtualBox или Мениджър на виртуални машини . Нито пък е необходимо да има инсталирано ядро ​​в присвоената система. Затворената система споделя вашето съществуващо ядро.

Реклама

В някои значения |_+_| среди са по-близо до контейнери като напр LXC отколкото към виртуални машини. Те са леки, бързи за внедряване и създаването и задействането на такъв може да бъде автоматизирано. Подобно на контейнерите, един удобен начин да ги конфигурирате е да инсталирате достатъчно от операционната система, за да постигнете необходимото. На задължителния въпрос се отговаря, като се погледне как ще използвате вашия |_+_| заобикаляща среда.



Някои често срещани употреби са:

Разработка на софтуер и проверка на продукта . Разработчиците пишат софтуер и екипът за проверка на продукта (PV) го тества. Понякога от PV се откриват проблеми, които не могат да бъдат репликирани на компютъра на разработчика. Разработчикът има всички видове инструменти и библиотеки, инсталирани на своя компютър за разработка, които обикновеният потребител – и PV – няма да имат. Често се оказва, че нов софтуер, който работи за разработчика, но не и за други, използва ресурс на компютъра на разработчика, който не е включен в тестовата версия на софтуера. |_+_| позволява на разработчиците да имат обикновена ванилова среда на своя компютър, в която да могат да потопят софтуера, преди да го дадат на PV. Затворената среда може да бъде конфигурирана с минималните зависимости, които софтуерът изисква.

Намаляване на риска за развитие . Разработчикът може да създаде специална среда за разработка, така че нищо, което се случва в нея, да обърка действителния му компютър.

Стартиране на остарял софтуер . Понякога просто трябва да имате стара версия на нещо, което работи. Ако старият софтуер има изисквания, които биха били в противоречие или са несъвместими с вашата версия на Linux, можете да |_+_| среда за проблемния софтуер.

Реклама

Възстановяване и надстройки на файловата система : Ако инсталацията на Linux стане неработоспособна, можете да използвате |_+_| за монтиране на повредената файлова система към точка за монтиране на Live CD. Това ви позволява да работите в повредената система и да се опитвате да я поправите, сякаш е монтирана нормално в root /. Това означава, че очакваните пътеки към файловете в повредената система ще бъдат правилно препратени от главната директория, а не от точката на монтиране на Live CD. Подобна техника беше използвана в статията, описваща как да мигрирате файловата система на Linux от ext2 или ext3 към ext4.

Приложения за ограждане на пръстени . Стартиране на FTP сървър или друго свързано с интернет устройство в |_+_| околната среда ограничава щетите, които външният нападател може да причини. Това може да бъде ценна стъпка за укрепване на сигурността на вашата система.

СВЪРЗАНИ: Как да мигрираме Ext2 или Ext3 файлови системи към Ext4 на Linux

Създаване на chroot среда

Нуждаем се от директория, която да действа като основна директория на |_+_| заобикаляща среда. За да имаме съкратен начин да се позоваваме на тази директория, ще създадем променлива и ще съхраним името на директорията в нея. Тук настройваме променлива, която да съхранява път към директорията testroot. Няма значение дали тази директория все още не съществува, скоро ще я създадем. Ако директорията съществува, тя трябва да е празна.

chroot

Ако директорията не съществува, трябва да я създадем. Можем да направим това с тази команда. |_+_| Опцията (родители) гарантира, че всички липсващи родителски директории се създават едновременно:

chroot

Трябва да създадем директории, които да съхраняват частите от операционната система нашите |_+_| околната среда ще изисква. Ще настроим минималистична Linux среда, която използва Bash като интерактивна обвивка. Ще включим също |_+_|, |_+_| и |_+_| команди. Това ще ни позволи да използваме всички вградени команди на Bash и |_+_|, |_+_| и |_+_|. Ще можем да създаваме, изброяваме и премахваме файлове и да използваме Bash. И – в този прост пример – това е всичко.

Избройте директориите, които трябва да създадете в |_+_| разширяване на скоби .

chroot

Сега ще променим директорията в новата ни основна директория.

chroot

Нека копираме двоичните файлове, от които се нуждаем в нашата минималистична Linux среда от вашата обикновена директория /bin в нашата |_+_| /bin директория. |_+_| (подробна) опция прави |_+_| кажете ни какво прави, докато изпълнява всяко действие за копиране.

chroot

Файловете се копират за нас:

Реклама

Тези двоични файлове ще имат зависимости. Трябва да открием какви са и да копираме тези файлове и в нашата среда, в противен случай |_+_|, |_+_|, |_+_| и |_+_| няма да може да функционира. Трябва да направим това на свой ред за всяка от избраните от нас команди. Първо ще направим Bash. |_+_| команда ще избройте зависимостите за нас.

chroot

Зависимостите са идентифицирани и изброени в прозореца на терминала:

Трябва да копираме тези файлове в новата ни среда. Избирането на подробностите от този списък и копирането им един по един ще отнеме време и ще бъде податливо на грешки.

За щастие можем да го полуавтоматизираме. Ще изброим отново зависимостите и този път ще съставим списък. След това ще преминем през списъка, копирайки файловете.

Тук използваме |_+_| за изброяване на зависимостите и подаване на резултатите през тръба в |_+_|. Използвайки |_+_| е същото като използването на |_+_| с |_+_| опция (разширени регулярни изрази). |_+_| (само съвпадение) опцията ограничава изхода до съответстващите части на редовете. Търсим съвпадащи библиотечни файлове, които завършват на число |_+_|.

jail

Можем да проверим съдържанието на списъка с помощта на |_+_|:

chroot

Сега, когато имаме списъка, можем да преминем през него със следния цикъл, като копираме файловете един по един. Използваме променливата |_+_| за да преминете през списъка. За всеки член на списъка копираме файла в нашия |_+_| основна директория, която е стойността, съхранявана в |_+_|.

Реклама

|_+_| (подробна) опция причинява |_+_| да обяви всяко копие, докато го изпълнява. |_+_| опция гарантира, че всички липсващи родителски директории са създадени в |_+_| заобикаляща среда.

chroot

И това е изходът:

Ще използваме тази техника, за да уловим зависимостите на всяка от другите команди. И ние ще използваме техниката на цикъла, за да извършим действителното копиране. Добрата новина е, че трябва само да направим малка редакция на командата, която събира зависимостите.

Можем да извлечем командата от нашата история на командите, като натиснете |_+_| натиснете няколко пъти и след това направете редакцията. Командата за копиране в цикъл изобщо не трябва да се променя.

Тук сме използвали |_+_| ключ, за да намерите командата, и ние я редактирахме така, че да казва |_+_| вместо |_+_|.

chroot

Сега можем да повторим точно същата команда за цикъл, както преди:

chroot

И нашите файлове се копират за нас:

Вече можем да редактираме |_+_| команден ред за |_+_|:

chroot

Реклама

Отново ще използваме същата команда за цикъл. Не се интересува кои файлове са в списъка. Той работи на сляпо чрез списъка, копирайки файловете вместо нас.

chroot

И зависимостите за |_+_| са копирани за нас:

Ние редактираме |_+_| команден ред за последен път, което го кара да работи за |_+_|:

chroot

Използваме за последен път командата за копиране с цикъл:

chroot

Последните от нашите зависимости се копират в нашите |_+_| заобикаляща среда. Най-накрая сме готови да използваме |_+_| команда. Тази команда задава корена на |_+_| среда и посочва кое приложение да се изпълнява като обвивката.

chroot

Нашите |_+_| средата вече е активна. Подканата на прозореца на терминала е променена и интерактивната обвивка се обработва от |_+_| черупка в нашата среда.

Можем да изпробваме командите, които сме внесли в средата.

chroot chroot

Реклама

|_+_| командата работи както бихме очаквали, когато я използваме в средата. Когато се опитаме да осъществим достъп до директория извън средата, командата се проваля.

Можем да използваме |_+_| за да създадете файл, |_+_| за да го изброите и |_+_| за да го премахнете.

chroot -p chroot touch

Разбира се, можем да използваме и вградените команди, които предоставя обвивката на Bash. Ако напишете |_+_| в командния ред Bash ще ги изброи вместо вас.

rm

Използвайте exit, за да напуснете |_+_| заобикаляща среда:

ls

Ако искате да премахнете |_+_| среда, можете просто да го изтриете:

touch

Това ще изтрие рекурсивно файловете и директориите в |_+_| заобикаляща среда.

Автоматизирайте за удобство

Ако мислите, че |_+_| среди може да са ви полезни, но са малко трудни за настройка, не забравяйте, че винаги можете да поемете напрежението и риска от повтарящи се задачи, като използвате псевдоними, функции и скриптове.

СВЪРЗАНИ: Как да създадете псевдоними и функции на обвивката в Linux

Linux команди
Файлове катран · pv · котка · такт · chmod · сцепление · разл · sed · С · човек · pushd · popd · fsck · тестов диск · сек · fd · пандока · CD · $PATH · awk · присъединяване · jq · сгънете · уникален · journalctl · опашка · състояние · ls · fstab · изхвърли · по-малко · chgrp · chown · rev · виж · струни · Тип · преименувайте · цип · разархивирайте · монтиране · umount · Инсталирай · fdisk · mkfs · rm · rmdir · rsync · df · gpg · ние · нано · mkdir · от · вътрешен · кръпка · преобразувам · rclone · накъсайте · SRM
процеси псевдоним · екран · връх · хубаво · renice · напредък · strace · система · tmux · chsh · история · в · партида · Безплатно · който · dmesg · потребителски мод · п.с · chroot · xargs · tty · мизичко · lsof · vmstat · изчакване · стена · да · убиват · сън · sudo · неговата · време · groupadd · потребителски мод · групи · lshw · изключвам · рестартирайте · Спри се · изключване · passwd · lscpu · crontab · дата · bg · fg
Работа в мрежа netstat · пинг · трасиране · ip · ss · кой е · fail2ban · bmon · Вие · пръст на ръката · nmap · ftp · къдрица · wget · Кой · кой съм аз · В · iptables · ssh-keygen · ufw

СВЪРЗАНИ: Най-добрите Linux лаптопи за разработчици и ентусиасти

ПРОЧЕТЕТЕ СЛЕДВАЩО Снимка на профила на Дейв Маккей Дейв Маккей
Дейв Маккей за първи път използва компютри, когато перфорираната хартиена лента беше на мода и оттогава той програмира. След повече от 30 години в ИТ индустрията, той вече е технологичен журналист на пълен работен ден. По време на кариерата си той е работил като програмист на свободна практика, мениджър на международен екип за разработка на софтуер, ръководител на проекти за ИТ услуги и, последно, като служител по защита на данните. Неговото писане е публикувано от howtogeek.com, cloudsavvyit.com, tenterpriser.com и opensource.com. Дейв е евангелист на Linux и привърженик на отворен код.
Прочетете пълната биография

Интересни Статии