実行可能ファイルまたはユーザーに対してunprivileged_userns_cloneを選択的に有効にする方法は?

実行可能ファイルまたはユーザーに対してunprivileged_userns_cloneを選択的に有効にする方法は?

ただ行うよりもCLONE_NEWUSER細かい方法でアクティブにするにはどうすればよいですかkernel.unprivileged_userns_clone

非ルートやBPFなどの新しい複雑な機能を無効にし、特定のプログラムでそれを使用することを選択的に許可して、CAP_SYS_ADMINカーネルAPI攻撃サーフェスを管理可能に保ちたいと思います。

たとえば、or suid-rootが正常に動作したいのchrome-sandboxですCLOSE_NEWUSERが、すべてのプログラムがそのような複雑なトリックを使用できるとは思わず、いくつかの承認されたプログラムしか使用できません。

答え1

これはカスタムカーネルパッチを作成しないと不可能です。この Debian 専用の sysctl を参照してください。廃止。ユーザーの名前空間を無効にする方法はですuser.max_user_namespaces = 0

新しいユーザーネームスペースの作成kernel/user_namespace.c:create_user_ns()。新しい名前空間の作成が許可される前にいくつかのチェックが行われますが、ファイルごとまたはユーザー固有の制御については表示されません。これは残念ですが、多くのカーネル開発者はリスクを理解していない権限のないユーザーの名前空間をグローバルにアクティブにする非ハインドストーリー。

UID 1234のみを許可するカーネル6.0で新しい名前空間を作成する例(テストされていません!)パッチ:

--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -86,6 +86,10 @@ int create_user_ns(struct cred *new)
    struct ucounts *ucounts;
    int ret, i;
 
+   ret = -EPERM;
+   if (!uid_eq(current_uid(), KUIDT_INIT(1234)))
+       goto fail;
+
    ret = -ENOSPC;
    if (parent_ns->level > 32)
        goto fail;

関連情報