2016-02-26 1 views
0

Особенно в мире 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()?

+0

Возможно лучше подходит для [Информационная безопасность] (http://security.stackexchange.com/)? –

+0

@SergeBallesta Я бы сказал, что он одинаково хорошо там, как здесь. В идеале, я бы опубликовал этот вопрос один раз - но на оба сайта одновременно! Но нет, StackExchange слишком тупой, чтобы позволить такую ​​функцию. Я имею в виду, вместо того, чтобы заставлять пользователей выбирать один сайт SE, насколько это было бы хорошо, если бы вы могли [пометить] вопрос на два или даже три разных сайта SE? – Will

+0

Я не отметил это для миграции, потому что я согласен с тобой, что здесь нет темы. Но IMHO, вы можете получить более качественные ответы на другом сайте, потому что это фактически касается безопасности. –

ответ

1

У вас есть конкретный пример?

Обычно демона вилки и сохраняют права root в процессе «мастера». Это полезно, поскольку это означает, что он может, например, перезагрузите конфигурацию и, возможно, привяжитесь к другим портам. Дети с вилкой непривилегированы и обрабатывают фактический трафик.

Мое предположение заключается в том, что вы видели программу, которая опустила привилегии, раздвоенная и выходившая в родительском. Если это так, это было сделано как часть становления демона.

+0

Ах, да; Я думаю, что ваш последний параграф объясняет мое замешательство. Я пересматривал старый код и, по-видимому, полностью забыл причину разветвления. Это делается для «отсоединения» от (грандиозной) родительской программы, верно? Можете ли вы уточнить, как работает этот механизм (или ссылка)?Я до сих пор точно не помню ... – Will

+0

Nevermind, [этот ответ] (http://stackoverflow.com/a/16317668/765294), похоже, хорошо освещает демона винд-танца. – Will

1

В наилучшей практике безопасности рекомендуется иметь много оборонительных линий.

Если вы были уверены, что ваш демон не имеет недостатков в нем и не имеет каких-либо функций библиотеки, которые он использует, вы можете позволить ему работать с полными привилегиями без какого-либо риска.

Но если это было написано простым человеком, есть вероятность, что он скрывает некоторые возможные подвиги, которые могут позволить злоумышленнику заставить его выполнить произвольный код. Один из них был обнаружен в библиотеке SSL, не так давно, не говоря уже о Windows ...

Именно поэтому вы должны отменить все привилегии, которые не требуются для обработки внешних, поскольку риски выше в этой части ,

Это все для снижения привилегий. Часть вилки обычно используется для разделения демона на один высокоприоритетный процесс, который никогда не обрабатывает внешний вывод (безопасность ...) и который контролирует другие низкоприоритетные процессы, которые выполняют реальную работу. Например, он позволяет перезапустить ребенка, который умер или застрял, но внешние входные данные никогда не обрабатываются привилегированным кодом.

+0

Я не вижу, как это отвечает на мой вопрос; * что (точно) является преимуществом безопасности ** forking **? *. Возможно, мой вопрос был основан на ошибочном предположении (как указывал другой ответ), но я думаю, что вы все равно должны решить фактический вопрос. – Will

+0

Благодарим за редактирование! – Will

Смежные вопросы