Что такое chroot

Материал из MediaWiki
Перейти к навигации Перейти к поиску

chroot — команда для смены корневой директории (/) на любую доступную в этой ОС. Смена корневой директории происходит с выполнением программы (по умолчанию /bin/sh). Для выполнения chroot вы должны быть суперпользователем
SYNOPSIS:

chroot	[-g group[,group[,...]]] [-u user] newroot [command]

Опции

  • -g — устанавливает группы, первую указанную устанавливает в качестве основной (должна найтись в /etc/groups).
  • -u — устанавливает пользователя (по умолчанию root) (должен найтись в базе данных пользователей).
  • newroot — новая корневая директория.
  • command — команда, которую надо выполнить.

Пример использования

Из статьи «Восстановление GRUB»: <syntaxhighlight lang=sh> for f in proc sys dev; do mount -o bind /$f /mnt/$f; done chroot /mnt /usr/sbin/grub-install /dev/sdX </syntaxhighlight>

Системный вызов chroot

Программа chroot использует системный вызов chroot(2) для смены корневой директории.
SYNOPSIS: <syntaxhighlight lang=c>

  1. include <unistd.h>

int chroot(const char *dirname); </syntaxhighlight> Параметры:

  • dirname — директория, которую необходимо сделать корневой.

Возвращаемые значения:

  • «0» — директория успешно сделана корневой.
  • «-1» — произошла ошибка (какая именно — смотрим код в глобальной переменной errno) и корневая директория не изменена.

Ошибки в errno:

  • ENOTDIR — dirname не является директорией.
  • ENAMETOOLONG — dirname является слишком длинным путем (длина больше PATH_MAX).
  • ENOTENT — директории dirname не существует.
  • EACCES — в праве поиска для какого-либо компонента пути отказано.
  • ELOOP — слишком много символьных ссылок встречается в каком-либо компоненте пути.
  • EFAULT — dirname находится вне адресного пространства процесса.
  • EIO — ошибка ввода-вывода при чтении или записи ФС.
  • EPERM — вызов был произведен процессом не от имени root (нужно запускать программу от имени суперпользователя).

После успешного завершения вызова chroot можно выполнять программу в новой корневой директории с помощью одной из функций семейства exec или выполнить другие действия.

Ссылки