我正在 RaspberryPi 3 上设置一个小型服务器,并为无根 docker 实例添加了一个新用户(“服务器”)。但我面临的问题是,我无法让 systemd 的用户实例正常工作。它失败并出现以下错误:
systemctl --user status :
Failed to connect to bus: no permission
systemd --user --test :
[...] failed to open directory /home/pi/.config [...]
systemd --user :
Failed to create /user.slice/user-1000.slice/session-1.scope/init.scope control group: Permission denied
Failed to allocate manager object: Permission denied
如您所见,即使我(通过 su)以“服务器”身份登录,其中一个错误中也会提到用户“pi”。
所以我的问题是:如何让 systemd 正常工作以便我可以设置 docker?
uname -a: Linux Pi-Server 5.10.17-v7+ #1421 SMP 2021 年 5 月 27 日星期四 13:59:01 BST armv7l GNU/Linux
创建用户的命令:sudo useradd -m -d /home/server server
答案1
它比你想象的要棘手得多。
首先,su
它不会真正“将您作为其他用户登录”。即使您使用-
,它仍然只是Start the shell as a login shell with an environment similar to a real login
。例如,如果您运行loginctl
,则在执行时不会看到正在创建的会话su
。
话虽如此,您想要实现的目标还是有可能的。您可以运行loginctl enable-linger server
以使用户实例在启动时启动。
然后,为了systemctl --user
工作su server
,你需要设置两个环境变量(如果你使用的话,将它们列入白名单-
):
XDG_RUNTIME_DIR=/run/user/$(id -u server) DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u server)/bus su server
XDG_RUNTIME_DIR=/run/user/$(id -u server) DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u server)/bus su -w XDG_RUNTIME_DIR,DBUS_SESSION_BUS_ADDRESS - server
答案2
正如 Tom Yan 所说,su
不会创建新会话。他的解决方案足以解决我的问题,但我想提一下我在搜索 Docker 文档后发现的另一种方法:
如果您使用,您应该能够启动新会话ssh server@localhost
。