Fedora
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
.出了什麼問題,我該如何解決?
出於某種原因,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密碼了。