Sudo

設置 sudo 密碼與登錄密碼不同

  • March 21, 2022

作為特權使用者,我試圖將sudo密碼設置為另一個密碼,然後是登錄時使用的密碼。

我做了一些研究,但沒有找到答案。是否sudo支持這種配置?

如果您失去了密碼,您將失去一切。有人可以root使用相同的密碼登錄並提升自己。

sudo有一個選項來詢問root密碼而不是呼叫的使用者密碼,(rootpw),但共享root密碼絕對不是一個選項,這就是我們設置的原因sudo

config 2FA過去做過,效果很好,但也違背了自動化的目的。例如,如果您想使用expect腳本在十幾台伺服器上執行特權命令,則添加2FA不允許您這樣做。

我找到的最接近的解決方案是只允許 SSH 私鑰並使用與sudo(登錄)密碼不同的密鑰設置密碼。儘管如此,它還是不舒服,因為在緊急情況下,您無法使用沒有該密鑰的 PC 登錄。

如果您想詢問 root 密碼,而不是使用者密碼,您可以輸入一些選項/etc/sudoersrootpw特別是會讓它詢問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

有效

引用自:https://unix.stackexchange.com/questions/94626