Книга: Linux программирование в примерах
8.6. Изменение корневого каталога: chroot()
8.6. Изменение корневого каталога: chroot()
Текущий рабочий каталог, установленный с помощью chdir(
) (см. раздел 8.4.1 «Изменение каталога — chdir()
и fchdir()
»), является атрибутом процесса, таким же, как набор открытых файлов. Он также наследуется новыми процессами.
Менее известным является то, что у каждого процесса есть также текущий корневой каталог. Это именно на этот каталог ссылается имя пути /
. В большинстве случаев корневые каталоги процесса и системы идентичны. Однако, суперпользователь может изменить корневой каталог с помощью (как вы догадались) системного вызова chroot()
:
#include <unistd.h> /* Обычный */
int chroot(const char *path);
Возвращаемое значение равно 0 при успешном завершении и -1 при ошибке.
Как указывает справочная страница GNU/Linux chroot(2), изменение корневого каталога не изменяет текущий каталог: программы, которые должны обеспечить нахождение под новым корневым каталогом, должны также вызвать затем chdir()
:
if (chroot("/new/root") < 0) /* Установить новый корневой каталог */
/* обработать ошибку */
if (chdir("/some/dir") < 0) /* Пути даны не относительно нового корневого каталога */
/* обработать ошибку */
Системный вызов chroot()
чаще всего используется для демонов — фоновых программ, которые должны работать в специальном ограниченном окружении. Например, рассмотрите демон Интернета FTP, допускающий анонимный FTP (соединение любого клиента из любого места, без обычных имени пользователя и пароля). Очевидно, такое соединение не должно быть способным видеть все файлы целой системы. Вместо этого демон FTP выполняет chroot()
в специальный каталог со структурой, достаточной лишь чтобы позволить ему функционировать. (Например, со своим собственным /bin/ls
для перечисления файлов, со своей копией библиотеки С времени исполнения, если она разделяется, и, возможно, со своей копией /etc/passwd
и /etc/group
для отображения ограниченного набора имен пользователей и групп.)
POSIX не стандартизует этот системный вызов, хотя GNU/Linux и все системы Unix его поддерживают. (Он популярен с V7.) Он специализирован, но при необходимости очень удобен.
- Добавление, изменение и удаление элементов списка
- Добавление, изменение и удаление столбцов списка
- Добавление и изменение представления списка
- Часть II Изменение способов ведения бизнеса
- Можно ли указать использование по умолчанию вместо C:Program Files другого каталога для установки программ?
- У файла и каталога есть атрибуты (например: Скрытый, Только чтение). Как ими управлять из командной строки?
- Изменение состояния виртуальной машины
- 8.2. Изменение пароля доступа к маршрутизатору
- 3.6.3. Изменение параметров сетевого подключения
- 4.3.2. Изменение настроек по умолчанию
- Изменение начала координат
- Изменение свойств ярлыка