Centos

SELinux重置root密碼

  • October 23, 2019

免責聲明:這個問題不是為了解決在 SELinux 處於活動狀態時更改 root 密碼的問題,因為已經有很多指南可以解決這個問題。這更多的是 SELinux 在內部如何做到這一點的。

我最近是 SELinux 的使用者,但最近我接觸的更多了。曾經有人問我如何重置root密碼以防忘記。

所以我啟動了我的 CentOS,將 grub 條目編輯為類似

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

我跑了passwd,然後跑了,sync然後強制重啟。重新啟動後,使用新密碼和舊密碼登錄都被拒絕。

再次重新啟動並將參數傳遞給核心以禁用 SELinux ( selinux=0)。嘗試使用新密碼登錄並成功。之後我強制 fs 自動重新標記(通過文件.autorelabel),並且在 SELinux 處於活動狀態時,現在可以登錄了。

我的問題是:為什麼會發生?為什麼僅更改密碼而不更改使用者或對象時重新標記會影響登錄?

感謝您的關注。

TL;DR:通常的 root 密碼重置在 SELinux 中不起作用。為什麼?

編輯:這是在以 KVM 作為管理程序的執行 CentOS7 的虛擬機上測試的。

我能夠在新安裝的 CentOS 7.5 系統中複製此問題。

這是正在發生的事情:

當您啟動時,init=/bin/bash您可能會遇到兩個問題:

  • 根文件系統可以只讀方式掛載。在這種情況下passwd會抱怨一個Authentication token manipulation error.

這很明顯:如果文件系統不是以讀寫方式安裝的,則無法對其進行寫入。

  • 可能未載入 SELinux 策略。在這種情況下passwd將成功更改密碼,但是您將遇到上面原始問題中描述的問題:沒有人可以登錄。

密碼雜湊儲存在/etc/shadow文件中。該文件通常具有 SELinux 類型shadow_t。但是,在沒有載入 SELinux 策略的情況下更改文件會導致 SELinux 類型從文件中刪除,將其保留為unlabeled_t. 因此,嘗試讀取文件以驗證登錄名的服務不再能夠讀取它。

要更改 RHEL/CentOS 7 上的 root 密碼,您需要遵循以下過程:

  1. 像以前一樣,添加init=/bin/bash到 grub 中核心命令行的末尾。
  2. 在 bash 提示符下,使用/usr/sbin/load_policy -i.
  3. 以讀寫方式掛載根文件系統mount -o remount,rw /
  4. 現在更改密碼,它會成功。passwd root
  5. 以只讀方式重新掛載文件系統以送出更改,並在下次啟動時使用mount -o remount,ro /.
  6. 退出 shell 或使用 重新啟動系統exec /sbin/init 6

現在您可以使用更改後的 root 密碼登錄。

Red Hat 提供了有關此過程的詳細說明(需要訂閱)。

引用自:https://serverfault.com/questions/936174