Назад | Перейти на главную страницу

Принуждение пользователя к удаленному подключению к консоли rails и предотвращение доступа к любым системным командам

Я пытаюсь настроить доступ к системе, чтобы веб-разработчик ruby ​​мог удаленно подключаться к системе и получать доступ к консоли rails, чтобы выполнить некоторые тесты, когда у них возникают проблемы с приложением. Обычно у них не было бы ssh на этой машине, и мы хотим довольно сильно ограничить то, что они могут делать на этой машине, единственное, что они должны быть в состоянии сделать, - это запустить консоль rails и взаимодействовать с приложением. Сначала я думал, что у меня все хорошо, но теперь я застрял, потому что мне также нужно сделать его безопасным, чтобы они не могли запускать консоль bash или выполнять вызовы системных функций.

Мой подход до сих пор заключался в том, чтобы добавить что-то подобное следующему в файл authorized_keys нового пользователя:

command="/path/to/bash/script.sh" ssh-rsa key user@host

Это заставляет пользователя, который подключается с помощью ключа в этой строке, запускать эту команду при входе в систему и ничего больше, когда сценарий завершается, они отключаются от сеанса. Я написал следующий скрипт, который ищет все папки app_root, а затем помещает пользователя в ту, которую они выбрали, и запускает консоль rails:

#!/usr/bin/env bash
 
echo "Please select the Rails folder you with to work in:"
select FOLDER in $(find /path/to/*/app_root -maxdepth 0 -type d); do
        echo "You have selected $FOLDER ($REPLY), Rails console starting...."
        cd $FOLDER
        RAILS_ENV=production bundle exec rails c
        exit 0
done

Я показал это разработчику, и он был очень счастлив, что может делать то, что ему нужно. Затем я показал своему начальнику, который бежал:

`bash`

Это дало ему оболочку bash как пользователя, которого я настроил для тестирования.

`rm -rf *`

Это позволило ему удалить все в папке, поскольку этот пользователь был в группе, и у группы был доступ на запись.

Это явно не здорово. Поэтому я хочу ограничить пользователя, чтобы он не мог запускать системные команды.

Я спросил, что мне нужно, чтобы остановить системные вызовы с консоли rails в IRC, и получил ответ: запустить процесс в песочнице. Но это довольно широкий термин, и я изо всех сил пытаюсь найти подходящий метод для использования песочницы в этом контексте.

Я считал chroot, Я мог бы разрешить пользователю использовать команды, необходимые для настройки chroot (с помощью visudo), но для настройки chroot потребуется довольно много времени, развернув полностью изолированную ОС в этих папках (используя debootstrap в test vm потребовалось более 10 минут) и кажется очень тяжелым для того, что я пытаюсь сделать. Кроме того, из того, что я прочитал в документации, я обнаружил, что это все еще не на 100% безопасно, вы можете вырваться, если достаточно постараетесь. Кроме того, мне пришлось бы затем настроить среду ruby ​​/ rails и переместить проект в эту ОС, чтобы пользователь мог протестировать ее, и они все равно могли бы получить доступ к системным командам в chroot.

С помощью seccomp было предложено, но я действительно не понимаю, как я бы использовал его в этом контексте (или в любом другом контексте в этом отношении).

Я заглянул в приложение-броня и Selinux песочницы, но ни один из них не доступен в этом выпуске ubuntu.

Может ли кто-нибудь предложить достаточно легкий метод запуска консоли rails в папке приложения, чтобы разработчик мог протестировать свое приложение, но который помешал бы им перейти к запуску bash или других системных команд? Я не против полностью изменить свой подход, если конечный результат гарантирован