Se alguém usa strace
para inspecionar o comando
$ strace -o logf -f unshare -U sh
unshare: unshare failed: Invalid argument
$ grep 'Invalid argument' logf
31728 unshare(CLONE_NEWUSER) = -1 EINVAL (Invalid argument)
31728 write(2, "Invalid argument\n", 17) = 17
isso revela que a chamada do sistema unshare(2)
falhou. Notavelmente CLONE_NEWUSER
não aparece na página de manual, o que poderia ser um bug de documentação ou pode indicar que CLONE_NEWUSER
não é suportado em uma instalação padrão do RedHat 7 (estou usando o Centos7 aqui em um sistema de teste, que é semelhante mas diferente do RedHat 7).
$ man 2 unshare | col -b | grep CLONE_NEWUSER
$
Isso é estranho; altagoobingledcorreu os termos unshare
e CLONE_NEWUSER
rendeu perguntas sobre unshare(CLONE_NEWUSER)
apesar de que CONFIG_USER_NS
está aparentemente habilitado no Centos 7:
$ grep CONFIG_USER_NS /boot/config-$(uname -r)
CONFIG_USER_NS=y
No entanto, mais altagoobingleduckgoing mostra um thread lxc que indica que "Atualmente os namespaces do usuário estão na fase TECH PREVIEW" (como no RedHat 7.2), isso pode ou não funcionar. Adicionar user_namespace.enable=1
aos argumentos do kernel não ajudou em meu sistema Centos 7.5 (e não é necessário em testes, abaixo). No entanto, os página de recursos do Kernel listam os namespaces de usuário como suportados; Filipe Brandenburger encontrou é seguro habilitar namespaces de usuário que indica que por padrão o RedHat 7 habilita 0 namespaces para usuários, embora este número possa ser aumentado:
# cat /proc/sys/user/max_user_namespaces
0
# echo 640 > /proc/sys/user/max_user_namespaces
# unshare -U sh
sh-4.2$
Portanto, aumentar max_user_namespaces
no Centos 7.5 funciona e não exige o sinalizador user_namespace.enable=1
do kernel.
Ainda mais leitura: