В этой статье будет объяснена команда chroot Linux на реальных примерах.
Команда chroot в Linux — это сокращение от «change root». Мы используем его для изменения видимого корневого каталога запущенного процесса и его дочерних элементов. Chroot запускает команду с указанным корневым каталогом и выполняется суперпользователем, широко известным как пользователь root во многих системах Linux. В следующих параграфах мы объясним синтаксис команды, опишем параметры команды более подробно и покажем вам примеры из реальной жизни, ежедневно используемые системными администраторами Linux.
Предварительные условия
- Сервер под управлением Ubuntu 22.04 или любой ОС Linux (CentOS, Debian или AlmaLinux).
- Привилегии пользователя: пользователь root или не root с привилегиями sudo.
Синтаксис команды Chroot в Linux
Синтаксис команды chroot следующий:
chroot option newroot [command [args]…]
Chroot меняет корневой каталог на каталог newroot на сервере, который должен существовать. Затем он меняет рабочий каталог на / и, наконец, запускает команду с необязательными аргументами. Мы рассмотрим это более подробно в следующих параграфах:
Параметры Chroot в Linux
Команда chroot принимает несколько опций:
- –groups=groups: параметр группы переопределяет дополнительную группу, используемую новым процессом. Если мы хотим отключить дополнительную группу, нам нужно использовать –groups=” и разделять их запятыми.
- –userspec=user[:group]: эта опция позволяет запустить команду от другого пользователя и/или от другой группы. Если указан пользователь, то группы устанавливаются в соответствии со списком, определенным системой для этого пользователя.
- –skip-chdir: использование этой опции не приведет к изменению рабочего каталога на/после изменения корневого каталога на newroot внутри chroot. Помните, что эта опция разрешена только в том случае, если новый корень — это какой-то старый каталог на сервере.
Примеры Chroot в Linux
В предыдущих параграфах мы уже упоминали, что chroot изменяет корневой каталог запущенного процесса с его дочерними элементами. Полезно знать, что это изменяет среду процесса, и процесс не может получить доступ к файлам за пределами корневого каталога. Этот измененный каталог называется изолированным каталогом chroot.
Давайте перейдем к реальному примеру и создадим новый изолированный корневой каталог на нашем сервере, расположенный в каталоге home.
mkdir -p /home/jail/
После создания каталога нам нужно создать пару каталогов из каталога /. Давайте сначала перечислим содержимое каталога /:
ls -al /
Вы должны получить следующий вывод:
root@host:/# ls -al / total 76 drwxr-xr-x 20 root root 4096 Mar 3 04:13 . drwxr-xr-x 20 root root 4096 Mar 3 04:13 .. lrwxrwxrwx 1 root root 7 Aug 3 2023 bin -> usr/bin drwxr-xr-x 3 root root 4096 Mar 4 04:12 boot dr-xr-xr-x 2 root root 4096 Aug 11 2023 cdrom drwxr-xr-x 19 root root 3960 Mar 3 08:29 dev drwxr-xr-x 107 root root 4096 Mar 5 04:14 etc drwxr-xr-x 2 root root 4096 Jan 18 04:29 home lrwxrwxrwx 1 root root 7 Aug 2 2023 lib -> usr/lib lrwxrwxrwx 1 root root 9 Aug 2 2023 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 Aug 2 2023 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 Aug 2 2023 libx32 -> usr/libx32 drwx------ 2 root root 16384 Jan 16 04:22 lost+found drwxr-xr-x 2 root root 4096 Aug 2 2023 media drwxr-xr-x 2 root root 4096 Aug 2 2023 mnt ...
Теперь давайте выберем один каталог из этого списка, например, bin, и создадим его в новом корневом каталоге:
mkdir -p /home/jail/bin/
После создания скопируйте bash из /bin в новый корень тюрьмы /home/jail/bin/.
rsync -Waq /bin/bash /home/jail/bin
Далее необходимо скопировать необходимые библиотеки в каталог /home/jail/. Чтобы проверить эти библиотеки, выполните следующую команду:
ldd /bin/bash
Скопируйте их в /home/jail/lib64/.
rsync -Waq /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libc.so.6 /lib64/ld-linux-x86-64.so.2 /home/jail/lib64
Далее необходимо выполнить chroot в новый изолированный каталог:
chroot /home/jail/ /bin/bash
Вот и все. Теперь пользователь видит каталог /home/jail в качестве корневого каталога. Конечно, вам не обязательно создавать заключенные roots в одиночку.
Заключение
ПС. Если вам понравился этот пост о командах chroot Linux с примерами, поделитесь им с друзьями в социальных сетях или оставьте комментарий в разделе комментариев. Спасибо.