使用錯誤密碼的 Active Directory 管理員組成員 SUDO 成功
環境:
OS: FreeBSD 12.1-Release-p10 Sudo: 1.9.5p2 Samba: 4.13.1_1
我們最近遷移到了 Active Directory 後端,以提供 DNS、DHCP 和內部 SSO 支持。我的 SSH 登錄執行良好,使用 PAM 通過 Samba/Winbindd 設置進行身份驗證。我想通過 AD 組成員資格控制誰可以使用 sudo(現在只是 root)。
為此,我在 AD 中創建了一個名為“Unix Admins”的新組,我希望 sudo 檢查其成員資格,就像它對本地使用者和 wheel 組所做的那樣。為此,我只是複制了現有的輪子條目,並有兩個組檢查線,如下所示:
%wheel ALL=(ALL) ALL %Unix\ Admins ALL=(ALL) ALL
當一個不在輪子或新組中的 AD 使用者登錄並嘗試使用 sudo 時,他們會收到關於不在 sudoers 文件中的正常錯誤,正如預期的那樣。當他們在AD 組中但不在輪子中時,系統會提示他們輸入密碼,如果他們正確輸入密碼,命令將按預期執行。
但是,當他們輸入錯誤的密碼時,會顯示一條錯誤消息,考慮到這種情況,這個消息有點神秘,然後該命令無論如何都會執行,就好像他們輸入了正確的密碼一樣。
錯誤發生如下:
% sudo ls Password: When trying to update a password, this return status indicates that the value provided as the current password is not correct. <<ls output here>>
編輯:為清楚起見進行了編輯。
Edit2: /etc/pam.d & /usr/local/etc/pam.d 相關內容
/usr/local/etc/pam.d/sudo
# # $FreeBSD: branches/2021Q1/security/sudo/files/pam.conf 340872 2014-01-24 00:14:07Z mat $ # # PAM configuration for the "sudo" service # # auth auth include system # account account include system # session # XXX: pam_lastlog (used in system) causes users to appear as though # they are no longer logged in in system logs. session required pam_permit.so # password password include system
/etc/pam.d/system
# # $FreeBSD: releng/12.1/lib/libpam/pam.d/system 197769 2009-10-05 09:28:54Z des $ # # System-wide defaults # # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local #auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass auth sufficient pam_unix.so no_warn try_first_pass nullok auth sufficient pam_winbind.so try_first_pass # account #account required pam_krb5.so account required pam_login_access.so account required pam_unix.so # session #session optional pam_ssh.so want_agent session required pam_lastlog.so no_fail # password #password sufficient pam_krb5.so no_warn try_first_pass password required pam_unix.so no_warn try_first_pass
FreeBSD 中的 PAM 模組不像我們想像的那樣在 Linux 中工作,並且實際上按照文件說明的那樣工作。
問題出在 auth 部分中關於 OPIE 系統的前面模組中。這些模組預設處於活動狀態,並且對於未在其帳戶中初始化 OPIE 的使用者總是成功的——老實說,基本上每個人都是如此。即使所有“正常”身份驗證模組都返回失敗,如果這些模組設置為“足夠”或“可選”,這也會導致通過身份驗證小節。
解決方案是刪除引用兩個 OPIE 模組的行。
這是您的問題,“系統文件已修改為包含
pam_winbind
,並將pam_unix
模組從更改required
為sufficient
”。花時間閱讀Linux PAM 管理員指南的第 4.1 章是非常值得的(是的,我知道你在使用 FreeBSD),這樣你就可以理解我在這裡解釋的細節。
當您
pam_unix
設置為 時,它會根據密碼的有效性required
立即返回成功或失敗。當您將其更改為它時,sufficient
它只會返回成功,否則會繼續。現在沒有失敗模式。您的
auth
堆棧現在可以返回成功或預設值,恰好是success。要解決此問題,請添加 adeny
作為最後一個堆棧條目auth
# auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient pam_unix.so no_warn try_first_pass nullok auth sufficient pam_winbind.so try_first_pass auth required pam_warn.so auth required pam_deny.so
pam_warn
如果您不希望 PAM 記錄身份驗證失敗,請評論該條目。PAM 堆棧的有用關鍵字
required
-失敗最終會導致堆棧返回失敗,但只有在剩餘模組執行完畢之後requisite
-失敗將立即返回sufficient
-成功將立即返回,除非失敗required
已經掛起