![Заключение под стражу определенных пользователей при входе в систему](https://rvso.com/image/1048342/%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%20%D1%81%D1%82%D1%80%D0%B0%D0%B6%D1%83%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9%20%D0%BF%D1%80%D0%B8%20%D0%B2%D1%85%D0%BE%D0%B4%D0%B5%20%D0%B2%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%83.png)
Вся эта история с джейлами и chroot немного сбивает меня с толку. Они используются для безопасного запуска потенциально опасных программ, но это должно быть инициировано пользователем. Я ищу, как джейлить пользователей, как это делают Android и iOS. Это можно настроить для удаленных входов, но как это можно настроить для домашних входов?
Предположим, что у меня установлена Ubuntu на настольном ПК. Есть четыре пользователя: администратор, пользователь1, пользователь2 и гость. Первый входит в систему, как это обычно делает учетная запись. Второй и третий входят в тюрьму. Четвертый входит в тюрьму с более строгими ограничениями, чем вторая и третья. Имеют ли эти заключенные в тюрьму учетные записи доступ к виртуализированной среде? Включают ли они копии основных двоичных файлов или они встроены в интерфейс all? Это достигается с помощью скриптов инициализации или чего-то еще?
решение1
Настройка Chroot-окружения
Создать пользователя, которого нужно посадить в тюрьму.
$sudo adduser acer
Для настройки chroot нам необходимо предоставить пользователям привилегии sudo.
Добавить пользователя в группу sudo
$sudo adduser acer sudo
Создать папку для настройки пользователя в тюрьме
$sudo mkdir /chroot
Пользователь jail может получить доступ только к тому, что находится внутри папки /chroot.
Это значит, что нам нужно что-то там предоставить, если только пользователь не видит только пустую папку.
Просто создайте основные необходимые вещи.
$cd /chroot
$ sudo mkdir bin dev etc home lib usr var
$sudo mkdir etc/pam.d home/acer lib/security var/log usr/bin
Мы хотим скопировать программное обеспечение в /chroot, которое пользователь jail сможет использовать.
Команда Bash
$which bash
/bin/bash
$sudo cp /bin/bash /chroot/bin
$ldd /bin/bash
#This ldd command is used to list the library function
linux-gate.so.1 => (0xb772d000)
libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xb76f0000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb76eb000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb753c000)
/lib/ld-linux.so.2 (0xb772e000)
Copy this lib file to chroot lib directory
$sudo cp /lib/i386-linux-gnu/libtinfo.so.5 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libdl.so.2 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libc.so.6 /chroot/lib
$sudo cp /lib/ld-linux.so.2 /chroot/lib
команда ls
$which ls
/bin/ls
$sudo cp /bin/ls /chroot/bin
$ldd /bin/ls
linux-gate.so.1 => (0xb771f000)
libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb76e1000)
libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0xb76d8000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7529000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb74eb000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb74e6000)
/lib/ld-linux.so.2 (0xb7720000)
libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0xb74e0000)
Скопируйте этот файл lib в каталог chroot lib
$sudo cp /lib/i386-linux-gnu/libselinux.so.1 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libacl.so.1 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libc.so.6 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libpcre.so.3 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libdl.so.2 /chroot/lib
$sudo cp lib/i386-linux-gnu/libattr.so.1 /chroot/lib
$sudo cp /lib/ld-linux.so.2 /chroot/lib
команда su
$which su
/bin/su
$sudo cp /bin/su /chroot/su
$ldd /bin/su
linux-gate.so.1 => (0xb7737000)
libpam.so.0 => /lib/i386-linux-gnu/libpam.so.0 (0xb770d000)
libpam_misc.so.0 => /lib/i386-linux-gnu/libpam_misc.so.0 (0xb7709000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755a000)
libaudit.so.1 => /lib/i386-linux-gnu/libaudit.so.1 (0xb7535000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7530000)
/lib/ld-linux.so.2 (0xb7738000)
Copy this lib file to chroot lib directory
$sudo cp /lib/i386-linux-gnu/libpam.so.0 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libpam_misc.so.0 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libc.so.6 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libaudit.so.1 /chroot/lib
$sudo cp /lib/i386-linux-gnu/libdl.so.2 /chroot/lib
$sudo cp /lib/ld-linux.so.2 /chroot/lib
Добавьте некоторые файлы конфигурации системы и дополнительные библиотеки в chroot
$cat /etc/passwd | grep acer > /chroot/etc/passwd
$cat /etc/passwd | grep root >> /chroot/etc/passwd
$cat /etc/group | grep acer > /chroot/etc/group
$cat /etc/group | grep root >> /chroot/etc/group
$cat /etc/shadow | grep acer > /chroot/etc/shadow
Скопируйте файл nsswitch.conf в /chroot
$sudo cp /etc/nsswitch.conf /chroot/etc/nsswitch.conf
Внутри nsswitch это должно выглядеть следующим образом
passwd: files
group: files
shadow: files
hosts: files
networks: files
protocols: files
services: files
ethers: files
rpc: files
netgroup: files
Копируем файлы конфигурации, необходимые для работы системы PAM, чтобы авторизация в джейле могла работать
$sudo cp /etc/pam.d/common-account /chroot/etc/pam.d/
$sudo cp /etc/pam.d/common-auth /chroot/etc/pam.d/
$sudo cp /etc/pam.d/common-session /chroot/etc/pam.d/
$sudo cp /etc/pam.d/su /chroot/etc/pam.d/
Мы добавляем несколько дополнительных библиотек, необходимых для PAM и коммутатора служб имен.
$sudo cp /lib/libnss_files.so.2 /chroot/lib
$sudo cp /lib/libnss_compat.so.2 /chroot/lib
$sudo cp /lib/libnsl.so.1 /chroot/lib
$sudo cp -fa /lib/security/ /chroot/lib
Нам нужно создать файл login.defs в каталоге /chroot/etc/. Этот файл определяет некоторые настройки для процесса входа в систему.
$sudo vim /chroot/etc/login.defs
Добавьте следующую строку в файл login.defs
SULOG_FILE /var/log/sulog
Если бы мы этого не сделали, команда su попыталась бы использовать утилиту syslog, которая недоступна в настройках jail, и весь процесс завершился бы неудачей.
Создадим скрипт, который будет сажать нашего пользователя в тюрьму, всякий раз, когда он заходит в систему.
Создать файл jailshell в каталоге /bin, за пределами jail
$sudo vim /bin/jailshell
Добавьте следующий скрипт в этот файл
#!/bin/bash
sudo chroot /chroot /bin/su acer
Сделать его исполняемым
$sudo chmod +x /bin/jailshell
Чтобы запустить скрипт, нам нужно отредактировать файл /etc/passwd (который находится за пределами клетки).
Измените /bin/bash на /bin/jailshell у пользователя acer
$sudo vim /etc/passwd
acer:x:1003:1003:,,,:/home/acer:/bin/jailshell
Установить пользователя acer в домашнем каталоге тюрьмы
$cd /home/acer
$sudo cp -fa ./ /chroot/home/acer
Следующее также может быть полезным
$sudo cp /etc/bash.bashrc /chroot/etc/
$sudo cp /etc/localtime /chroot/etc/
$sudo cp /etc/services /chroot/etc/
$sudo cp /etc/protocols /chroot/etc/
$sudo cp /usr/bin/dircolors /chroot/usr/bin/
$sudo cp /usr/bin/groups/ /chroot/usr/bin/
Все сделано. Теперь протестируйте вход.
$su – acer
password:xxxx
[sudo]password for acer:xxxx
acer@Snovabits:/$ ls
bin dev etc home lib usr var