Особенно в мире Linux/POSIX, демоны, которым нужны только некоторые возможности root для целей временной инициализации (например, для чтения файла закрытого ключа, принадлежащего корневому файлу, или для открытия порта < 1024 или для увеличения ограничений ресурсов), часто похоже, следуют шаблону проектирования, где они меняют свои учетные данные с помощью таких вызовов функций, как setuid()
/setresuid()
и setgid()
/setresgid()
, а затем вызывают fork()
для запуска реальной программы в качестве ее дочернего элемента. Предположительно, fork()
-ing сделан «на всякий случай», но каково или было фактическое соображение безопасности для этого?Есть ли какое-либо преимущество в области безопасности, полученное fork() после сброса (root) привилегий?
И следить за того, что причина по-прежнему актуальна, когда (в дополнение к setgroups(0, NULL)
, setresgid(GID_NOBODY, GID_NOBODY, GID_NOBODY)
и setresuid(UID_NOBODY, UID_NOBODY, UID_NOBODY)
), программа также активно ограничивая возможности Linux, понижая все возможности, как только он больше не необходимо, позвонив по телефону cap_set_proc()
?
Возможно лучше подходит для [Информационная безопасность] (http://security.stackexchange.com/)? –
@SergeBallesta Я бы сказал, что он одинаково хорошо там, как здесь. В идеале, я бы опубликовал этот вопрос один раз - но на оба сайта одновременно! Но нет, StackExchange слишком тупой, чтобы позволить такую функцию. Я имею в виду, вместо того, чтобы заставлять пользователей выбирать один сайт SE, насколько это было бы хорошо, если бы вы могли [пометить] вопрос на два или даже три разных сайта SE? – Will
Я не отметил это для миграции, потому что я согласен с тобой, что здесь нет темы. Но IMHO, вы можете получить более качественные ответы на другом сайте, потому что это фактически касается безопасности. –