[這是我在 ServerFault 上的帖子的後續內容:https://serverfault.com/questions/661136/root-accepts-any-password-how-to-change-to-a-real-password]
在舊系統上,root 帳號接受任何密碼,只要密碼不為空即可。任何密碼都會被接受為正確的密碼,因此任何人都可以登入。
在過去(十多年前)這不是問題,因為系統位於具有自己的身份驗證的撥號數據機後面......但幾年後,可以透過公用 IP 位址存取系統。
奇蹟般的是,直到上週才有人關心它的 SSH 端口。
有人(中國IP位址)以root身分登入並更改了一些系統設定並登出。
我從備份中恢復了系統,並更改了 SSH 端口,使其無法再透過 ADSL 調製解調器訪問,以便給我一些時間來解決此問題。
問題似乎出在/etc/pam.d/system-auth
:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_cracklib.so retry=3
password sufficient /lib/security/pam_unix.so nullok use_authtok md5
password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
當我改變時
auth sufficient /lib/security/pam_unix.so likeauth nullok
到
auth sufficient /lib/security/pam_unix.so likeauth
那麼 root 帳號不再接受任何隨機密碼,但它也不接受我設定的密碼
我嘗試了以下方法:
- 首先透過命令修改root密碼
passwd
。結果:我可以使用任何密碼登入 - 然後刪除
nullok
:我無法在新的 SSH 會話中使用任何密碼登錄,即使使用我剛剛設定的密碼也無法登入 - 然後我又改了root密碼。結果:我仍然無法在新的 SSH 會話中使用任何密碼登入。
- 然後我放回
nullok
系統身份驗證:我可以再次使用任何密碼登入
我一直在保持開啟的 SSH 會話中進行編輯和密碼設置,並透過開啟新的 SSH 會話來測試結果。
我不敢關閉主 SSH 會話,因為擔心無法再次進入。我也沒有重新啟動系統,因為它是一個正在運行的交通燈系統
我很驚訝我不必輸入舊密碼,而只需輸入新密碼(兩次)。
更改密碼後我得到了答案Password changed
,但我無法使用新密碼透過 SSH 登入。
我必須在其他地方設定 root 密碼嗎?或刪除是否會nullok
透過 SSH 完全阻止 root 帳號?
我希望唯一root
能夠使用 1 個特定密碼登入並拒絕任何其他密碼的存取。