Недавно узнал любопытную тему из области информационной безопасности, с которой раньше не пересекался. Как-то не было необходимости. По роду своей деятельности я обычно единоличный посетитель вверенных мне серверов. Редко кого-то приходится туда пускать в консоль. А даже если приходится, то чаще всего временно и несистемно.
Есть shell для пользователей, которые позволяют настраивать различные ограничения (restricted shell) на выполнение команд. Например, rsh или rbash. У них есть ряд встроенных ограничений. И есть целый набор трюков, которые позволяют эти ограничения обходить. Например, открыть vi и выполнить там::set shell=/bin/bash
Еще более простой трюк с awk:awk 'BEGIN {system("/bin/sh")}'
То же самое можно сделать через find:find / -name file01 -exec /bin/awk 'BEGIN {system("/bin/sh")}' ;
Если запрещены редакторы и использование > и >>, а нужно создать скрипт, существует такой ход:echo "rm -rf /" | tee script.sh
И таких способов очень много. Я где-то видел репозиторий с десятками подобных способов обхода различных ограничений. Ссылку не сохранил, а сейчас не получилось найти. Буду рад, если кто-то подскажет.
Посмотрел на всё это и еще раз убедился, что в хорошего безопасника можно вырасти только из крепкого админа. Сама по себе эта профессия не может существовать, а должна быть ответвлением или следующим этапом профессии системного администратора. Та же самая история с devops.
Кто-то на практике занимался подобными настройками? В случае с linux терминалом мне кажется это нереально всё закрыть. Постоянно найдется какая-то лазейка. Я когда то давно подобными ограничениями занимался на терминальном сервере Windows. Отключал и ограничивал все инструменты, которые может использовать пользователь, чтобы что-то сломать. Оставлял только то, что надо для непосредственной задачи.