ただ行うよりも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;