Centos

通過腳本更改 root 密碼失敗但報告成功

  • October 14, 2016

我有一個項目需要我編寫腳本/命令序列來更改 CentOS 7 安裝上的 root 密碼。

我可以假設將執行腳本的使用者已經是 root。

目前,我正在使用以下內容,並收到一條成功消息:

[root@localhost]# echo -e ‘password\npassword’ | (passwd --stdin root)
Changing password for user root.
passwd: all authentication tokens updated successfully.

但是,這實際上並沒有更改密碼。經過進一步檢查(手動設置密碼),我注意到密碼password沒有通過字典檢查,但最後仍然報告成功:

[root@localhost]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.

一種可能的解決方案是嘗試根據 中提供的方法和鹽對給定密碼進行雜湊處理/etc/shadow,但我想避免過於復雜的解決方案。我還可以檢查中的值是否/etc/shadow實際更改,但這忽略了密碼設置為它已經是的情況,我想支持這種情況。

有沒有人建議在實際設置密碼之前嘗試驗證密碼,或者最好從 FULL 輸出passwd

使用passwd --stdin時只需發送一次密碼。所以正確的版本是

echo password | passwd --stdin

如果您的程式碼範例是準確的,那麼 (a) 當您需要簡單的正向引號時,您已經有了智能引號,並且 (b) 密碼可能被設置為類似 `password\npassword’ 的東西(可能兩邊都帶有智能引號)。

使用命令使事情工作passwd令人印象深刻,因為它傳統上是互動式的並且很難自動化。(對於 gnu 一代來說,它使其相對輕鬆。)但是如果你正在做自動化,為什麼不使用對自動化更友好的命令,比如chpasswd

echo root:password | chpasswd

會做你在上面做的事情。如果你想一次做 50 行,只需發送更多的username:password.

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