Estou tentando ativarnamespaces de usuário no Docker. É claro que isso requer que os namespaces de usuário estejam habilitados no kernel.
Uma das etapas para habilitar namespaces de usuário no RHEL/CentOS é:
echo "user.max_user_namespaces=15000" >> /etc/sysctl.conf
Porque max_user_namespaces é 0 por padrão. Depois disso, você deve reinicializar ou apenas executar sysctl -p
para carregar as configurações do sysctl em sysctl.conf. Depois que as configurações forem carregadas, /proc/sys/user/max_user_namespaces
deverá conter 15.000. Isso funciona perfeitamente no RHEL 7.4 (kernel: 3.10.0-957.10.1.el7.x86_64).
E também funciona no CentOS 7.4 (kernel: 3.10.0-693.10.1.el7.x86_64) quando executo o sysctl -p
. Mas se eu reiniciar, max_user_namespaces volta para 0.
Verifiquei o status do serviço systemd-sysctl para descobrir que ele tinha um active (exited)
status:
● systemd-sysctl.service - Apply Kernel Variables
Loaded: loaded (/usr/lib/systemd/system/systemd-sysctl.service; static; vendor preset: disabled)
Active: active (exited) since Wed 2019-04-03 16:15:34 WEST; 16s ago
Docs: man:systemd-sysctl.service(8)
man:sysctl.d(5)
Process: 2786 ExecStart=/usr/lib/systemd/systemd-sysctl (code=exited, status=0/SUCCESS)
Main PID: 2786 (code=exited, status=0/SUCCESS)
Apr 03 16:15:34 localhost.localdomain systemd[1]: Starting Apply Kernel Variables...
Apr 03 16:15:34 localhost.localdomain systemd[1]: Started Apply Kernel Variables.
Após uma inspeção mais detalhada, descobri que toda vez que o serviço systemd-sysctl é iniciado, ele falha devido a um erro de 'Permissão negada' ao tentar gravar em /proc/sys/user/max_user_namespaces
:
$ journalctl -xn
[...]
Apr 03 16:15:34 localhost.localdomain sudo[2779]: user : TTY=tty1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/systemctl start systemd-sysctl
Apr 03 16:15:34 localhost.localdomain polkitd[763]: Registered Authentication Agent for unix-process:2780:7181831 (system bus name :1.51 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
Apr 03 16:15:34 localhost.localdomain systemd[1]: Starting Apply Kernel Variables...
-- Subject: Unit systemd-sysctl.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit systemd-sysctl.service has begun starting up.
Apr 03 16:15:34 localhost.localdomain systemd-sysctl[2786]: Failed to write '15000' to '/proc/sys/user/max_user_namespaces': Permission denied
Apr 03 16:15:34 localhost.localdomain systemd[1]: Started Apply Kernel Variables.
-- Subject: Unit systemd-sysctl.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit systemd-sysctl.service has finished starting up.
--
-- The start-up result is done.
Apr 03 16:15:34 localhost.localdomain polkitd[763]: Unregistered Authentication Agent for unix-process:2780:7181831 (system bus name :1.51, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
Aqui estão as permissões do arquivo (no RHEL e no CentOS):
$ ls -l /proc/sys/user/max_user_namespaces
-rw-r--r--. 1 root root 0 Apr 3 10:10 /proc/sys/user/max_user_namespaces
Como eu disse, posso alterá-lo sysctl -p
ou editá-lo diretamente usando o sudo. Por que o serviço systemd-sysctl não consegue gravar nele?
Lembre-se de que exatamente a mesma coisa funciona no RHEL... Não tenho ideia de qual é o problema e não consegui encontrar uma resposta em lugar nenhum. Háessepergunta, mas ainda não foi respondida.
Alguma ideia?