Я пытаюсь настроить доступ к системе, чтобы веб-разработчик 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 или других системных команд? Я не против полностью изменить свой подход, если конечный результат гарантирован