Linux

為什麼我不能在 sudo pam 堆棧中使用 pam_echo.so?

  • December 22, 2017

我有一台 CentOS 7 機器,我想在 sudo 期間身份驗證失敗時顯示一條消息。我試圖通過在 /etc/pam.d/sudo 中添加 pam_echo 行來做到這一點。

為了進行測試,我創建了一個文件 /etc/security/foo,其中包含字元串“bar”。

這是我的 sudo pam 堆棧,/etc/pam.d/sudo: auth include system-auth auth optional pam_echo.so file=/etc/security/foo account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so

出於某種原因,當我無法進行身份驗證時,我看不到 pam_echo 的此輸出。 $ sudo ls [sudo] password for steve: Sorry, try again. [sudo] password for steve: Sorry, try again. [sudo] password for steve: sudo: 3 incorrect password attempts

我用 pamtester 測試了 sudo pam 堆棧,輸入錯誤密碼後得到了預期的結果。 $ pamtester sudo steve authenticate Password: bar

同樣,輸入正確密碼時也沒有輸出。 $ pamtester sudo steve authenticate Password: pamtester: successfully authenticated

似乎 sudo 以某種方式覆蓋或乾擾了 pam 輸出。為什麼 sudo 需要這樣做?我可以更改 sudo 的行為以便輸出通過嗎?

我執行 sudo 並使用 GDB 進行回溯。我跟踪了麵包屑,發現阻止 PAM 輸出被硬編碼到 sudo 中。

回溯:

#13 0x00007f9879eba7e0 in pam_authenticate (pamh=0x56373c553960, flags=flags@entry=32768) at pam_auth.c:34
#14 0x00007f987a3510de in sudo_pam_verify (pw=, prompt=0x56373c553d00 "[sudo] 史蒂夫的密碼:", auth=, callback=0x7ffea8406880)
在 auth/pam.c:182
#15 0x00007f987a35052c in verify_user (pw=0x56373c54ce98, prompt=prompt@entry=0x56373c553d00 "[sudo] 史蒂夫的密碼:",validated=validated@entry=2, callback=callback@entry=0x7ffea8406880) at auth/sudo_auth.c: 294
#16 0x00007f987a3520e5 in check_user (auth_pw=0x56373c54ce98, mode=, valid=2) at ./check.c:149
#17 0x00007f987a3520e5 in check_user (validated=validated@entry=2, mode=) at ./check.c:212
#18 0x00007f987a36506d 在 sudoers_policy_main (argc=argc@entry=1, argv=argv@entry=0x7ffea8406cf0, pwflag=pwflag@entry=0, env_add=env_add@entry=0x56373c5414f0,closure=closure@entry=0x7ffea84069f0) at ./ .c:423
#19 0x00007f987a35eca4 在 sudoers_policy_check (argc=1, argv=0x7ffea8406cf0, env_add=0x56373c5414f0, command_infop=0x7ffea8406a80, argv_out=0x7ffea8406a88, user_env_out=0x7ffea8406) at8007./c:a
#20 0x000056373aee448f in main (plugin=0x56373b102480 , user_env_out=0x7ffea8406a90, argv_out=0x7ffea8406a88, command_info=0x7ffea8406a80, env_add=0x56373c5414f0, argv=0x7ffea8406cf0, argc=1) at ./sudo.c:1342
#21 0x000056373aee448f 在 main (argc=, argv=, envp=) at ./sudo.c:261

在 auth/pam.c 的第 181-182 行,我發現使用 PAM_SILENT 標誌呼叫 pam_authenticate 以防止任何輸出。

/* PAM_SILENT 阻止身份驗證服務生成輸出。*/
*pam_status = pam_authenticate(pamh, PAM_SILENT);

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