他のユーザーの資格情報で実行されるワーカープロセスを作成するアプリケーションを作成しています。プログラムはルートで実行されます。しかし、権限の低いアカウントで実行したいと思います。
生成されたプロセスにUID、GIDを割り当てる権限をユーザーアカウントに付与する方法はありますか?
つまり、特定のシステムコールに対するユーザー権限を制限/付与する方法はありますか?ありがとうございます!
答え1
プロセスにUIDを変更する権限を付与することは、UIDをrootとしてのみ変更できるため、rootとして実行する権限を付与するのと同じです。だからそうするとしても何の利益もないでしょう。
プログラムが騙され、ルートとして予期しないタスクを実行するリスクを減らすことで、この設定をより安全にすることができます。これは全体的なダメージの影響を減らすものではありませんが(攻撃者がプログラムで任意のコードを実行できるようにする場合)、部分的なダメージ(攻撃者がプログラムが次の特定のタスクを実行するように説得できる場合)の影響は減ります。読み取ったとおりにファイルをインポートして表示します。リスクを軽減するには、プログラムがルートとして実行される時間を短縮します。専用ユーザーとして実行しますが、実際のUIDは0に設定してください。プログラムにルートが必要な場合は、一時的に有効なUIDを0に切り替えてから元に戻してください。
ユーザーIDは各スレッドではなくプロセス全体のためであるため、マルチスレッドプログラムでは実用的ではありません。
より堅牢性とセキュリティを確保するために権限分離を実装します。つまり、プログラムを 2 つのプロセスに分割し、1 つは root として実行され、もう 1 つは専用ユーザーとして実行されます。ルートとして実行されるプロセスはできるだけ少ない操作を実行する必要があります。他のプロセスからの要求を受け入れ、可能であれば検証して実行します。これにより、他のプロセスにエラーがあっても最大有効な要求のみを作成できます。
簡単な要件の場合は、rootとして実行されるプログラムを作成するのではなく、sudoルールを使用して、基本プログラムが3番目のユーザーとしてコマンドを実行できるようにすることができます。検証を実行するために中間ルートプログラムに頼るのではなく、sudoルールに検証を含めることができます。
myapp_user ALL = (ALL:ALL) validate_and_run
これにより、myapp_user
すべてのユーザーでコマンドを実行できますが、コマンドはvalidate_and_run
引数で実行する必要があります。