Запретить пользователям помечать файлы как исполняемые?
Я хочу убедиться, что пользователи моей системы не могут выполнять chmodding файлы +x, и я не хочу, чтобы что-либо в /home/ или /var/ было исполняемым.
Я не могу поставить их на отдельные разделы.
Под управлением Ubuntu 9.04 Server.
6 ответов
Я собирался предложить оболочку для chmod или чего-то еще, но чем больше я об этом думаю, тем пользователи в конечном итоге найдут способ обойти это (scp исполняемый файл из другого ящика или запустить perl -s "chmod('FILE');", так далее...
Итак, я думаю, что метод FS является лучшим. Поскольку вы говорите, что не можете переместить их в новую файловую систему, как насчет использования монтирования --bind для "remount" /home и /var без привилегий exec?
mount -o noexec --bind /var /var
mount -o noexec --bind /home /home
Я не уверен, будет ли это работать или нет, но кажется многообещающим...
РЕДАКТИРОВАТЬ:
Ну, мне нравится мой красивый, блестящий значок "хороший ответ" из этого ответа, но после игры с ним я не думаю, что он будет работать. Мой первоначальный тест проводился на старом (2.4.9) ядре, и функционал "монтировать поверх себя", похоже, работал. Я попробовал это снова с более новым ядром (2.6.18), и это, кажется, не работает. Я начал искать обходные пути (например, переименование /var и / home во что-то другое, а затем монтирование их обратно. Однако я не очень далеко продвинулся, потому что нашел это на странице руководства для mount на новой коробке:
Обратите внимание, что параметры монтирования файловой системы останутся такими же, как и в исходной точке монтирования, и их нельзя изменить, передав параметр -o вместе с --bind/- rbind.
Ну да ладно... - это всё ещё забавный вариант...
Я могу придумать 2 способа сделать это: один грязный и один хороший. Начнем с грязного.
Напишите сценарий оболочки, который выполняется очень регулярно, как cronjob, скажем, каждые 5 или 10 минут. Было бы явно удалить флаг exec из всех файлов в этих двух каталогах, т.е.
chmod -R ugo-x /home /var
Лучший способ сделать это на уровне файловой системы. Создайте новые разделы для размещения как var, так и home, в любом случае это считается наилучшей практикой. Затем добавьте опцию "noexec" для монтирования. Это предотвратит на уровне файловой системы выполнение файлов, хранящихся в этих каталогах.
Это прекрасный пример того вопроса, на который нужно ответить так:
Вы, кажется, нашли решение для сложной проблемы, и теперь задаете конкретные вопросы о том, как реализовать это решение. Не могли бы вы вместо этого описать исходную проблему, которую вы пытаетесь решить?
По моему опыту, системному администратору очень важно знать, когда отвечать на запрос "что? Почему?". Насколько важно, зависит от склонности пользователей описывать свою первоначальную проблему или пытаться найти свои собственные решения и обратиться за помощью в их реализации. В определенных условиях это разница между дорогими катастрофически плохими решениями и дешевыми хорошими решениями.
Думаю, вы также можете использовать inotifywait с опциями -r, -m и -e attrib для сброса флага -x, если он установлен пользователями
Не забудьте убедиться, что /tmp /var/tmp и другие доступные для записи каталоги также находятся на монтировании разделов с флагом noexec.
Похоже, у вас есть проблемы с политикой...
... и, вероятно, это было вызвано реальной проблемой, потому что вы параноик.
Разве вы этим не ограничиваете эффективность вычислительной платформы?
многие сценарии можно запустить, просто вызвав интерпретатор напрямую:
sh./mybashscript.sh
perl./myperldaemon.pl
Итак, предположительно, вы пытаетесь предотвратить запуск собственного исполняемого файла?
Лучше всего решать эту проблему с помощью политики и политик / аудита...
в лучшем случае вы будете держать в страхе только менее опытных пользователей.