Fedora

systemd-nspawn OS 容器無法使用,因為我無法設置 root 密碼

  • November 26, 2021

我結合了原始部落格文章中的詳細說明和手冊頁中的最新說明(使用 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.

出了什麼問題,我該如何解決?

出於某種原因,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密碼了。

引用自:https://unix.stackexchange.com/questions/308687