1

特に Linux/POSIX の世界では、一時的な初期化のみを目的として (たとえば、root が所有する秘密鍵ファイルを読み取る、1024 未満のポートを開く、またはリソース制限を引き上げる) ための root 機能を必要とするデーモンは、多くの場合、setuid()/setresuid()setgid()/などの関数呼び出しで資格情報を変更しsetresgid()、呼び出しfork()て実際のプログラムをその子として実行する設計パターンに従います。fork()-ing は「万が一に備えて」行われると思われますが、そうするための実際のセキュリティ上の考慮事項は何ですか?

setgroups(0, NULL)そして、それをフォローアップするために、( 、setresgid(GID_NOBODY, GID_NOBODY, GID_NOBODY)およびに加えて) プログラムがLinux の機能setresuid(UID_NOBODY, UID_NOBODY, UID_NOBODY)を積極的に制限している場合、その理由はまだ関連していますか?cap_set_proc()

4

2 に答える 2

1

何か具体例はありますか?

通常、デーモンは「マスター」プロセスでルート権限をフォークして保持します。これは、構成をリロードしたり、他のポートにバインドしたりできることを意味するため、便利です。フォークされた子には特権がなく、実際のトラフィックを処理します。

私の推測では、親で特権を落とし、分岐して終了するプログラムを見たのではないでしょうか。もしそうなら、これはデーモンになることの一環として行われました。

于 2016-02-26T08:35:43.810 に答える