Ich versuche zu ermöglichenBenutzer-Namespaces auf Docker. Dies erfordert natürlich, dass Benutzer-Namespaces im Kernel aktiviert werden.
Einer der Schritte zum Aktivieren von Benutzernamensräumen in RHEL/CentOS besteht darin:
echo "user.max_user_namespaces=15000" >> /etc/sysctl.conf
Weil max_user_namespaces standardmäßig 0 ist. Danach müssen Sie entweder neu starten oder einfach ausführen, sysctl -p
um die Sysctl-Einstellungen in sysctl.conf zu laden. Sobald die Einstellungen geladen sind, /proc/sys/user/max_user_namespaces
sollten sie 15000 enthalten. Dies funktioniert unter RHEL 7.4 (Kernel: 3.10.0-957.10.1.el7.x86_64) einwandfrei.
Und es funktioniert auch unter CentOS 7.4 (Kernel: 3.10.0-693.10.1.el7.x86_64), wenn ich ausführe sysctl -p
. Aber wenn ich neu starte, wird max_user_namespaces auf 0 zurückgesetzt.
Ich habe den Status des Dienstes systemd-sysctl überprüft und festgestellt, dass er einen active (exited)
Status hatte:
● 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.
Bei näherer Betrachtung habe ich festgestellt, dass jedes Mal, wenn der Dienst systemd-sysctl gestartet wird, ein Fehler aufgrund eines „Zugriff verweigert“-Fehlers auftritt, wenn er versucht, in Folgendes zu schreiben /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)
Hier sind die Berechtigungen der Datei (sowohl in RHEL als auch in 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
Wie gesagt, ich kann es ändern sysctl -p
oder indem ich es direkt mit sudo bearbeite. Warum kann der Dienst systemd-sysctl nicht darauf schreiben?
Beachten Sie, dass genau dasselbe unter RHEL funktioniert ... Ich habe keine Ahnung, was das Problem ist, und ich konnte nirgendwo eine Antwort finden. Es gibtDasFrage, aber sie ist immer noch unbeantwortet.
Irgendwelche Ideen?