Estou tentando entender se é possível mapear dois usuários de um namespace de usuário para dois usuários diferentes no host.
O objetivo é replicar as mesmas permissões que tenho no meu host dentro de uma rootfs
(base Ubuntu, porque estou tentando construir um contêiner do zero).
Por exemplo:
- Tudo abaixo
/
deve pertencer aroot
. /home/user
deve pertencer ao regularuser
.
Para conseguir isso, pensei em usar o mapeamento de UID em um namespace de usuário, algo como:
UID in user namespace ---> UID on host
1000 (admin) -> 0 (root)
1001 (bob) -> 1001 (bob)
Esse tipo de mapeamento é mesmo possível?
Aqui está o que eu já tentei:
- Executando
echo -e "1000 0 1\n1001 1001 1" > /proc/[PID]/uid_map
para definir o mapeamento, mas recebo um erro. - Tentando modificar manualmente
/proc/[PID]/uid_map
paranewuidmap
cada usuário.
No entanto, nunca consegui mapear mais de um usuário e não consigo mapear o UID 0 (root) de jeito nenhum.
Atualizar:
Li as páginas de manual e segui as restrições mencionadas ali, mas ainda estou recebendo mensagens de erro.
Por exemplo:
# terminal 1
unshare --user bash
echo $$ # 11591
# terminal 2 as user 'alex' (uid = 1000)
newuidmap 11591 0 0 1
# newuidmap: uid range [0-1) -> [0-1) not allowed
newuidmap 11591 1001 1001 1
# newuidmap: uid range [1001-1002) -> [1001-1002) not allowed
Esses comandos falham, mesmo quando executados com sudo
.
Também tentei mapear os subuids que declarei, mas ainda não funciona:
cat /etc/subuid
alex:100000:65536
root:200000:65536
self:300000:65536
cat /etc/subgid
alex:100000:65536
root:200000:65536
self:300000:65536
A documentação do kernel afirma que apenas um UID/GID no namespace pode ser mapeado para o host UID/GID 0. Um único mapeamento UID-0
1000 0 1
deve aparecer antes de qualquer outro mapeamento.Verifique os mapeamentos de ID de usuário e grupo: uid_map e gid_map.
https://man7.org/linux/man-pages/man7/user_namespaces.7.html
https://man7.org/linux/man-pages/man7/pid_namespaces.7.html
Sobreposições de alcance são proibidas. Por exemplo,
1001 1001 1
não deve haver conflito com o primeiro mapeamento.Sem
newuidmap
, a operação falha devido a permissões insuficientes, mesmo como root dentro do namespace.Usuários sem privilégios só podem criar mapeamentos dentro de seus sub-UIDs/GIDs atribuídos.
De
/etc/subuid:
De
/etc/subgid
:Use
newuidmap
enewgidmap
para configurar mapeamentos seguros.A página do manual explica a sintaxe:
Há usuários aqui que podem explicar isso com mais detalhes ^^