2016年3月20日 星期日

解決「因 SELinux 致不能更改密碼」的問題

在安裝 Linux 系統,多將『/home』家目錄放在一個硬碟分割區,與『 / 』根目錄、『/boot』啟動分割區和『 swap 』置換分割區分開。更新系統時,保留『/home』所在這個分割區不變,就不用備份大量的使用者資料。
  但是,為了節省『系統設定檔』和『使用者帳戶資料』這些內容免於重建,只要備份『 / 』根目錄中的設定資料就可免去這些麻煩。在 Fedora 依這個觀念操作,卻出現一些問題。
  在新系統中,用舊系統備份的『 / 』根目錄中az的設定資料資料重建『使用者帳戶資料』,可以成功用舊密碼登入。不過,更新密碼時,卻出現這些訊息,
[SiB@Celeron-D ~]$ passwd
更改使用者 SiB 的密碼。
正在更改 SiB 的 STRESS 密碼。
(目前的)UNIX 密碼:
新 密碼:
再次輸入新的 密碼:
passwd: 驗證記號處理錯誤
或英文版的訊息
[SiB@Celeron-D ~]$ passwd
Changing password for user SiB.
Changing password for SiB.
(current) UNIX password:
New password:
Retype new password:
passwd: Authentication token manipulation error
Linux 為增加密碼的安全性,使用 shadow 這個檔案儲存加密後的密碼。在 Fedora 裏這個 shadow 檔更納入 SELinux 機制的保護,上圖中用紅色標記的訊息,是因為『 /etc/shadow 』這個複製的加碼密碼檔不被 SELinux 認可,而不允許變更所致。網路上有兩個建議:
  • 關閉 SELinux:連帶關閉許多 SELinux 的安全機制、保護措施,駭客最喜歡了
  • 讓 SELinux 承認新檔案的合法性,當然是 root 權限才能操作。
第二個方法比較安全,命令如下:
[root@Celeron-D ~]# restorecon -v /etc/shadow
再修改密碼,就一切正常了。
[SiB@Celeron-D ~]$ passwd
更改使用者 SiB 的密碼。
正在更改 SiB 的 STRESS 密碼。
(目前的)UNIX 密碼:
新 密碼:
再次輸入新的 密碼:
passwd:所有驗證 token 都已成功更新
或英文版的訊息
[SiB@Celeron-D ~]$ passwd
Changing password for user SiB.
Changing password for SiB.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

已測試版本:

  • Fedora 22, 23

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)