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