Щас крутая штука будет, фаер ин зе холл! Будем изолировать пользователя в linux и позволим ему запускать только разрешенные утилиты и команды. Короче говоря закейджим.



Для этого понадобится chroot, заходим под рутом и готовим подопытную папку env:



cd / && mkdir env

mkdir /env/{bin,lib,lib64}



Chroot создает новую среду оболочки, что означает любые изменения, внесенные в эту среду, будут влиять только на файлы и каталоги в среде Chroot, а не на центральную нервную систему.



Папку создали, ок, теперь давай закинем в нее сам интерпретатор bash. После того, как пользователь зайдет на сервер по ssh, запустится bash в изолированной среде.



Чтобы определить, какие библиотеки использует утилита, воспользуемся утилитой ldd.



ldd /bin/bash



Команда ldd осуществляет вывод списка разделяемых библиотек, используемых исполняемыми файлами или разделяемыми библиотеками.



На экран вывелись библиотеки, которые использует bash



libtinfo.so.6 => /lib/libtinfo.so.6

libc.so.6 => /lib/libc.so.6

/lib64/ld-linux.so.2



Их нужно закинуть в папку env, вот так:



cp /usr/bin/bash /env/bin

cp /lib/libtinfo.so.6 /env/lib

cp /lib/libc.so.6 /env/lib

cp /lib64/ld-linux.so.2 /env/lib64



Всё. Базовая изоляция готова. Для того чтобы после авторизации на сервере, пользователь попал в изолированную папку, делаем так:



Добавляем в конфиг: /etc/ssh/sshd_config



Match User user

ChrootDirectory /env



В первой строке, в конце указывает имя пользователя, которого будем изолировать, у меня в системе есть пользователь user, я его и указываю.



Далее дергаем systemctl restart sshd и пробуем залогиниться на сервер под пользователем:



ssh [email protected]



Если все сделал правильно, то поздравляю, ты изолировал пользователя в системе и должен увидеть командную строку и что-то вроде -bash-5.1$.



Самый сок, в том, что никакие команды сейчас не работают, чтобы ты не вводил.
Ты можешь лишь посмотреть версию bash --version или другие ее ключи.



Для того чтобы добавить в эту клетку другие утилиты, повторяешь трюк с ldd, копируешь бинарник и библиотеки.



Таким образом ты можешь делать кастрированный доступ по ssh, например для своих студентов либо для каких-то публичных квестов.



Давай закрепим и добавим утилиту ls в нашу клетку:



ldd /usr/bin/ls



cp /usr/bin/ls /env/bin

cp /lib/libselinux.so.1 /env/lib/

cp /lib/libc.so.6 /env/lib/

cp /lib64/ld-linux.so.2 /env/lib64

cp /lib/libpcre2-8.so.0 /env/lib/libpcre2-8.so.0



Смотрим зависимости через ldd и копируем их в нашу изолированную папку env. Теперь возвращаемся в терминал к пользователю user и пробуем запустить ls. Опа! Работает! Прекрасно! Попробуй теперь посмотреть файловую систему с помощью ls и убедись в наличии клетки.



Тема с chroot очень клевая, помимо того, что мы с тобой сейчас провернули, в chroot можно устанавливать полноценные дистрибутивы linux (возможно у тебя был сексуальный опыт с gentoo). Либо примонтировать proc/sys/dev/run с хостовой машины и сделать работу в chroot идеальной. Но это не совсем безопасно, тут уже тебе выбирать, удобство или параною.



А можно сделать 10 папок и 10 пользователей и в каждую папку воткнуть свой дистрибутив. Логинишься под user1 и попадаешь в kali, логинишься под user2 и попадаешь в centos. Ну ты понял.



Ладно, изучай, надеюсь было читабельно. Увидимся завтра!



tags: #linux #bash #utilites



💩 @bashdays