Почему идентификатор пользователя остается 65534 при использовании клона для создания нового пространства имен пользоватLinux

Ответить
Anonymous
 Почему идентификатор пользователя остается 65534 при использовании клона для создания нового пространства имен пользоват

Сообщение Anonymous »

Я пытаюсь создать новое пространство имен пользователей, используя сценарий Python, который использует системный вызов клона . Моя цель -сопоставить идентификатор пользователя недавно порожденной оболочки с определенным значением, аналогичным тому, как это делается с командой Unshare . sh , я могу успешно обновить сопоставления UID через:

Код: Выделить всё

echo '0 502 1' > /proc/[PID]/uid_map
echo '0 502 1' > /proc/[PID]/gid_map
После этого запуск идентификатор в новой оболочке показывает пользователя как root .
Однако, когда я Попытка сделать то же самое в сценарии Python, используя libc.clone , оболочка по -прежнему сообщает идентификатор пользователя как 65534 () даже после обновления отображений UID и GID. Вот мой скрипт: < /p>

Код: Выделить всё

import signal
import os
import ctypes
import sys

CLONE_NEWUTS = 0x04000000
CLONE_NEWUSER = 0x10000000

def write_file(path, content):
try:
with open(path, "w") as f:
f.write(content)
except Exception as e:
sys.exit(f"[Error] Failed to write mapping {content} to {path}: {e}")

def child_func():
input("...>")
os.execlp("bash", "sh")  # Start a new shell

libc = ctypes.CDLL("libc.so.6", use_errno=True)
STACK_SIZE = 1024 * 1024
stack = ctypes.create_string_buffer(STACK_SIZE)

child_stack = ctypes.c_void_p(ctypes.addressof(stack) + STACK_SIZE)
pid = libc.clone(
ctypes.CFUNCTYPE(ctypes.c_int)(child_func),
child_stack,
CLONE_NEWUTS | CLONE_NEWUSER | signal.SIGCHLD,
)

if pid == -1:
sys.exit("Failed to create new namespace")

print(pid)
write_file(f"/proc/{pid}/setgroups", "deny\n")
write_file(f"/proc/{pid}/uid_map", f"0 502 1\n")
write_file(f"/proc/{pid}/gid_map", f"0 502 1\n")

os.waitpid(pid, 0)
< /code>
 Что я проверил: < /strong> < /p>

 Сценарий выполняется с привилегиями root. /li>
 Файлы отображения UID и GID обновляются после клона < /code> call. < /li>
< /ul>
Несмотря на эти шаги, Пользователь внутри пространства имен остается никого 
. Чего я могу пропустить? Любые советы или идеи будут оценены.


Подробнее здесь: https://stackoverflow.com/questions/794 ... mespace-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»