
我有一個 Oracle Linux 7.2 的 VirtualBox 實例,由於Failed to start Login Service
.在啟動序列中,進程掛起此訊息並且不會繼續,因此我什至無法登入並執行systemctl status systemd-logind.service
.
造成這種情況的可能原因是,我刪除了 zsh,而我的所有使用者(包括 root)都將 zsh 設定為預設 shell(廢話!)。之後機器啟動並出現登入提示,但由於找不到 shell,我無法登入。然後我插入了一張 Live CD 並進入/etc/passwd
將用戶的預設 shell 更改為/bin/bash
.此後登入服務將根本不會啟動。任何想法如何解決這個問題?
答案1
我發現更改後/etc/passwd
它不再具有正確的 SELinux 設定。我的機器上並不需要 SELinux,所以我透過完全停用 SELinux 解決了這個問題。透過修改檔案/etc/selinux/config
和設定選項SELINUX=permissive
(如果您想保留 SELinux 檔案標籤以便稍後啟用它)或SELINUX=disabled
(完全關閉它)可以輕鬆完成此操作。
答案2
我今天在 VirtualBox 上使用 CentOS 7.2 時遇到了這個問題。我能夠ssh
以普通用戶身份進入並發出
touch /.autorelabel
然後重新啟動以重置所有上下文。啟動需要一段時間,但有效。
答案3
由於密碼過期而在單一使用者模式下使用後chage
,需要重新啟動SELINUX=permissive
以/etc/selinux/config
恢復正確的標籤。
從健全的系統中為每個修改的檔案取得正確的 SELinux 上下文,ls -Z /etc/passwd /etc/shadow
並將上下文套用回損壞的系統。
作為一個例子,以下是在 CentOS 7 上使用的命令集chage
-請勿應用無需與健全的系統(測試或預生產)進行比較!
chcon system_u:object_r:passwd_file_t:s0 /etc/passwd
chcon system_u:object_r:passwd_file_t:s0 /etc/group
chcon system_u:object_r:shadow_t:s0 /etc/shadow
chcon system_u:object_r:shadow_t:s0 /etc/gshadow
SELINUX=enforcing
在重新啟動以恢復正常操作之前,請檢查您在單一模式下修改的任何檔案的 SELinux 上下文。
複製 SELinux 上下文的其他方法可在如何從一個目錄複製 SELinux 上下文並將其套用到另一個目錄?