그냥 하는 것보다 CLONE_NEWUSER
더 세분화된 방식으로 활성화하려면 어떻게 해야 합니까 kernel.unprivileged_userns_clone
?
비루트 또는 BPF와 같은 새로운 복잡한 기능을 비활성화하고 특정 프로그램에서 이를 사용하도록 선택적으로 허용하여 CAP_SYS_ADMIN
커널 API 공격 표면을 관리 가능하게 유지하고 싶습니다.
예를 들어, or suid-root가 제대로 작동하기를 chrome-sandbox
원 CLOSE_NEWUSER
하지만 모든 프로그램이 그렇게 복잡한 트릭을 사용할 수 있을 것이라고는 기대하지 않으며 승인된 몇 가지 프로그램만 사용할 수 있습니다.
답변1
이는 사용자 정의 커널 패치를 생성하지 않고는 불가능합니다. 이 데비안 전용 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;