systemd-nspawn OS 容器无法使用,因为我无法设置 root 密码

systemd-nspawn OS 容器无法使用,因为我无法设置 root 密码

我结合了原始的详细说明博客文章,以及来自手册页(使用 dnf 而不是 yum)。

# sudo dnf -y --releasever=24 --installroot=$HOME/fedora-24 --disablerepo='*' --enablerepo=fedora --enablerepo=updates install systemd passwd dnf fedora-release vim-minimal

# sudo systemd-nspawn -D fedora-24
Spawning container fedora-24 on /home/alan-sysop/fedora-24
Press ^] three times within 1s to kill container.
-bash-4.3# passwd
Changing password for user root.
New password:
Retype new password:

结果:

passwd: Authentication token manipulation error

和一个 AVC 弹出窗口,即 SELinux 错误。它说passwd不允许取消链接(替换)/etc/passwd。 “疑难解答”按钮的建议之一是我可以将标签分配passwd_file_t/etc/passwd.

出了什么问题,我该如何解决?

答案1

由于某种原因,dnf 没有在 /etc/passwd 上设置“正确的”SELinux 标签。但它确实在 /bin/passwd 上设置了标签。这种不匹配就是导致问题的原因。欢迎进一步解释:)。

$ ls -Z fedora-24/etc/passwd
unconfined_u:object_r:etc_t:s0 fedora-24/etc/passwd
$ ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd

$ ls -Z fedora-24/bin/passwd
system_u:object_r:passwd_exec_t:s0 fedora-24/bin/passwd
$ ls -Z /usr/bin/passwd
system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd

restorecon -Rv /尝试在容器内运行没有任何作用。 IIRC libselinux 会检测它何时在容器中运行,并且不会执行任何操作。

解决方案

我们需要从容器外部运行:

restorecon -Rv fedora-24/

它确保全部SELinux 标签被重置。 (为容器主机期望的值,即未标记)。然后我们就可以成功设置root密码了。

答案2

引导的 Cent OS 8 用户空间存在同样的问题。

已发现的问题

[root@- bootstrapped_base_systems]# ls -Z centos8/bin/passwd
system_u:object_r:passwd_exec_t:s0 centos8/bin/passwd
[root@- bootstrapped_base_systems]# ls -Z centos8/etc/passwd
unconfined_u:object_r:etc_t:s0 centos8/etc/passwd

etc/passwd在这种情况下很好)

固定为

[root@- bootstrapped_base_systems]# chcon -v unconfined_u:object_r:etc_t:s0 centos8/bin/passwd
changing security context of 'centos8/bin/passwd'

已验证更改为

[root@- bootstrapped_base_systems]# ls -Z centos8/bin/passwd
unconfined_u:object_r:etc_t:s0 centos8/bin/passwd

相关内容