Слышали про chroot?
Chroot (change root) - это утилита, которая используется для того, чтобы создать закрытое окружение "тюрьму", в которой программа будет видеть определенную часть файловой системы, как корневую '/'.
Это похоже на создание миниатюрного "сейфа" или "контейнера" для запуска приложений. В качестве примера можете вспомнить тот же Docker.
Под капотом
chroot использует одноименный системный вызов и в некоторых ситуациях может пригодиться, как дополнительный элемент безопасности, который позволит ограничить набор каталогов и файлов, доступных программе.
Системный вызов chroot()
Каждый процесс обладает корневым каталогом — он представляет собой стартовую точку, от которой интерпретируются абсолютные имена путей, начинающиеся с символа '/'. По умолчанию данным каталогом является реальный корневой каталог файловой системы.
Иногда бывает удобно, чтобы процесс изменил свой корневой каталог. Это может реализовать с помощью системного вызова
chroot(). Системный вызов
chroot() изменяет корневой каталог процесса на каталог, указанный в аргументе
pathname:
#include <unistd.h>
int chroot(const char *pathname);
Затем все абсолютные имена путей интерпретируются, как начинающиеся с указанного местоположения в файловой системе. Иногда это называют заключением в клетку chroot, поскольку программа оказывается замкнутой внутри некоторой части файловой системы.
Моменты, которые стоит учитывать при работе с chroot
Следует 100% помнить, что вызов
chroot() не меняет текущий рабочий каталог процесса. Для обеспечения полной безопасности, либо перед, либо после
chroot() необходимо выполнить вызов
chdir(), иначе процесс сможет использовать относительные пути для доступа к ресурсам вне клетки.
Также, при переходе в пространство
chroot, вы можете столкнуться с тем, что ничего не работает) Это и не удивительно, как оболочка будет выполнять команды, которых для нее просто не существует...
Для решения проблемы вам может понадобиться перенести ряд библиотек и программ из "реальной" корневой системы в имитированную либо использовать команду
debootstrap, но это уже отдельная история)
Linux++ | IT-Образование