Ранее мы рассматривали разрешение доступа и ограничение административных команд, которые пользователь может запускать с помощью команды sudo. Но вы также можете ограничить, какие обычные команды разрешены пользователю для доступа и использования. Хотя в Linux нет простого способа сделать это напрямую, можно достичь этой цели с помощью команды chroot.

Chroot-команда

Функция команды chroot заключается в изменении корневого каталога, используемого текущим сеансом. Эта команда обычно используется при попытке исправить систему, которая не загружается после загрузки с диска восстановления. После использования он делает корневую файловую систему для сеанса пользователя каталогом, предоставленным команде. Используя chroot, вы можете сделать корневую файловую систему пользователя каталогом, имитирующим обычный корневой каталог, но с ограниченным количеством приложений и файлов, которые можно использовать. Недостатком этого является то, что этот замещающий корневой каталог займет дополнительное место в файловой системе, и если вам нужны разные настройки для разных пользователей, вам нужно будет создать несколько версий этой корневой файловой системы.

Создание файловых систем для каждого пользователя

Если вы хотите настроить это для своих пользователей, то необходимо проделать небольшую работу по созданию фальшивых корневых файловых систем. Во-первых, нам нужно создать список команд, которые мы хотим, чтобы наши пользователи могли использовать. Получив этот список, мы можем создать репликацию корневой файловой системы, необходимой для их поддержки. Далее мы создадим каталог для хранения этой файловой системы:

sudo mkdir /fakeroot

В этом каталоге fakeroot нам нужно воссоздать большую часть структуры каталогов, которую мы обычно видим в системе Linux.

cd /fakeroot

sudo mkdir bin dev etc etc/pam.d home lib lib/security lib64 var var/log usr usr/bin

В этом примере я включу команду bash. Это будет сделано в системе Ubuntu, хотя метод, если не пути, будет одинаковым для любой системы Linux. Чтобы включить больше файлов, вам нужно будет повторить следующие шаги для настройки приложения. Первое, что вам нужно сделать, это найти полный путь к команде, которую вы хотите использовать, это можно сделать с помощью команды which:

which bash

Это даст вам путь к программе, которая будет вызываться, если вы наберете bash. В моем случае это был /bin/bash, поэтому нам нужно скопировать его в то же место в fakeroot:

sudo cp /bin/bash /fakeroot/bin/bash

Далее нам нужно убедиться, что все библиотеки, которые использует команда bash, доступны. Это можно сделать с помощью команды ldd:

ldd /bin/bash

Вывод должен выглядеть примерно так:

linux-vdso.so.1 => (0x00007ffda3534000)

libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f47c02e5000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f47c00e1000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f47bfd17000)

/lib64/ld-linux-x86-64.so.2 (0x000055b1b4563000)

Это показывает полные пути к файлам библиотеки, поэтому все, что вам нужно сделать, это скопировать эти файлы в ваш каталог fakeroot:

sudo mkdir /fakeroot/lib/x86_64-linux-gnu

sudo cp /lib/x86_64-linux-gnu/libtinfo.so.5 /fakeroot/lib/x86_64-linux-gnu/libtinfo.so.5

sudo cp /lib/x86_64-linux-gnu/libdl.so.2 /fakeroot/lib/x86_64-linux-gnu/libdl.so.2

sudo cp /lib/x86_64-linux-gnu/libc.so.6 /fakeroot/lib/x86_64-linux-gnu/libc.so.6

sudo cp /lib64/ld-linux-x86-64.so.2 /fakeroot/lib64/ld-linux-x86-64.so.2

Теперь Bash будет работать в среде chroot. Хотя мы еще не закончили настройку. Во второй части мы завершим настройку, необходимую для работы среды chroot.

Никогда не пропустите ни одного поста. Подпишитесь на еженедельную рассылку 100 ТБ.

Первоначально опубликовано на blog.100tb.com.