設置 sudo 密碼與登錄密碼不同
作為特權使用者,我試圖將
sudo
密碼設置為另一個密碼,然後是登錄時使用的密碼。我做了一些研究,但沒有找到答案。是否
sudo
支持這種配置?如果您失去了密碼,您將失去一切。有人可以
root
使用相同的密碼登錄並提升自己。
sudo
有一個選項來詢問root
密碼而不是呼叫的使用者密碼,(rootpw
),但共享root
密碼絕對不是一個選項,這就是我們設置的原因sudo
。我
config 2FA
過去做過,效果很好,但也違背了自動化的目的。例如,如果您想使用expect
腳本在十幾台伺服器上執行特權命令,則添加2FA
不允許您這樣做。我找到的最接近的解決方案是只允許 SSH 私鑰並使用與
sudo
(登錄)密碼不同的密鑰設置密碼。儘管如此,它還是不舒服,因為在緊急情況下,您無法使用沒有該密鑰的 PC 登錄。
如果您想詢問 root 密碼,而不是使用者密碼,您可以輸入一些選項
/etc/sudoers
。rootpw
特別是會讓它詢問root密碼。有runaspw
而且targetpw
也有;有關詳細資訊,請參見 sudoers(5) 聯機幫助頁。除此之外,sudo 通過 PAM 進行身份驗證(與其他所有內容一樣)。PAM 支持按應用程序配置。Sudo 的配置在(至少在我的 Debian 系統上)
/etc/pam.d/sudo
,看起來像這樣:$ cat sudo #%PAM-1.0 @include common-auth @include common-account @include common-session-noninteractive
換句話說,預設情況下,它會像系統上的其他所有內容一樣進行身份驗證。您可以更改該
@include common-auth
行,並讓 PAM(以及因此 sudo)使用備用密碼源。common-auth 中未註釋的行看起來像(預設情況下,如果您使案例如 LDAP,這將有所不同):auth [success=1 default=ignore] pam_unix.so nullok_secure auth requisite pam_deny.so auth required pam_permit.so
您可以使案例如,
pam_userdb.so
而不是pam_unix.so
,並將您的備用密碼儲存在 Berkeley DB 數據庫中。例子
我創建了目錄
/var/local/sudopass
、所有者/組root:shadow
、模式2750
。在其中,我繼續使用db5.1_load
(這是 Debian Wheezy 上使用的 Berkeley DB 版本)創建了一個密碼數據庫文件:#umask 0027 # db5.1_load -h /var/local/sudopass -t hash -T passwd.db 安東尼 WMaEFvCFEFplI ^D
該雜湊是
mkpasswd -m des
使用密碼“password”生成的。非常安全!(不幸的是,pam_userdb 似乎不支持比古代crypt(3)
散列更好的東西)。現在,編輯
/etc/pam.d/sudo
並刪除該@include common-auth
行,而是將其放置到位:auth [success=1 default=ignore] pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd auth requisite pam_deny.so auth required pam_permit.so
請注意,pam_userdb
.db
為傳遞的數據庫添加了副檔名,因此您必須保持.db
關閉狀態。根據dannysauer在評論中的說法,您可能還需要進行相同的編輯
/etc/pam.d/sudo-i
。現在,對於 sudo,我必須使用
password
而不是我的真實登錄密碼:安東尼@sudotest:~$ sudo -K anthony@sudotest:~$ sudo echo -e '\nit 工作' [sudo] 安東尼的密碼:passwordRETURN 有效