sou*_*edi 5 fedora selinux container systemd-nspawn
我结合了原始博客文章中的详细说明和手册页中的最新说明(使用 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:
Run Code Online (Sandbox Code Playgroud)
结果:
passwd: Authentication token manipulation error
Run Code Online (Sandbox Code Playgroud)
和 AVC 弹出窗口,即 SELinux 错误。它说passwd不允许取消链接(替换)/etc/passwd。“疑难解答”按钮的建议之一是我可以将标签分配passwd_file_t给/etc/passwd.
怎么了,我该如何解决?
出于某种原因,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
Run Code Online (Sandbox Code Playgroud)
尝试restorecon -Rv /在容器内运行没有任何作用。IIRC libselinux 检测它何时在容器中运行,并且不会做任何事情。
我们需要从容器外部运行:
restorecon -Rv fedora-24/
Run Code Online (Sandbox Code Playgroud)
它确保所有SELinux 标签都被重置。(容器主机期望的值,即未标记)。然后我们就可以成功设置root密码了。
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |