Sudo中に認証が失敗したときにメッセージを表示したいCentOS7マシンがあります。 /etc/pam.d/Sudoにpam_echo行を追加してこれを実行しようとしました。
テストのために、文字列「bar」を含むファイル/ etc/security/fooを作成しました。
これは私のSudopamスタックです。/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
Sudo pamスタックをpamtesterでテストし、間違ったパスワードを入力した後、期待どおりの結果が得られました。 $ 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 = 0x37 steveのパスワード: "、auth =、callback = 0x7ffea8406880) at auth/pam.c:182 #15 0x00007f987a35052c in verify_user(pw = 0x56373c54ce98、Prompt = prompt @ entry = 0x56373c553d00" [ steveのSudo]パスワード: "、validated = valided @ entry = 2、callback = callback @ entry = 0x7ffea8406880)at auth/Sudo_auth.c:294 #16 0x00007f987a3520e5 in check_user(auth_pw = 0x56373c54ce98、mode =、 validated = 2)at ./check.c:149 #17 0x00007f987a3520e5 in check_user(validated = validated @ entry = 2、mode =)at ./check.c:212 #18 0x00007f987a36506d ./sudoers.cの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) 423 #19 0x00007f987a35eca4 in sudoers_policy_check(argc = 1、ar gv = 0x7ffea8406cf0、env_add = 0x56373c5414f0、command_infop = 0x7ffea8406a80、argv_out = 0x7ffea8406a88、user_env_out = 0x7ffea8406a90)at ./policy.c:758 #20 0x000056373a448 、command_info = 0x7ffea8406a80、env_add = 0x56373c5414f0、argv = 0x7ffea8406cf0、argc = 1)at ./Sudo.c:1342 #21 0x000056373aee448f in main(argc =、argv =、envp =)at ./S c:261
Auth/pam.cの181〜182行目で、出力を防ぐためにpam_authenticateがPAM_SILENTフラグを指定して呼び出されていることがわかりました。
/* PAM_SILENTは、認証サービスが出力を生成しないようにします。 */ *pam_status = pam_authenticate(pamh、PAM_SILENT);