sudo pam 스택에서 pam_echo.so를 사용할 수 없는 이유는 무엇입니까?

sudo pam 스택에서 pam_echo.so를 사용할 수 없는 이유는 무엇입니까?

Sudo 중에 인증이 실패하면 메시지를 표시하고 싶은 CentOS 7 시스템이 있습니다. pam_echo에 줄을 추가하여 이를 수행하려고 했습니다 /etc/pam.d/sudo.

/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의 동작을 변경할 수 있습니까?

답변1

나는 sudo를 실행하고 GDB를 사용하여 역추적을 수행했습니다. 나는 빵 부스러기를 따라 가면서 PAM 출력을 방지하는 것이 sudo에 하드 코딩되어 있음을 발견했습니다.

역추적:

#13 pam_authenticate의 0x00007f9879eba7e0(pamh=0x56373c553960, flags=flags@entry=32768) pam_auth.c:34
sudo_pam_verify의 #14 0x00007f987a3510de (pw=, 프롬프트=0x56373c553d00 "[sudo] 스티브의 비밀번호: ", auth=, callback=0x7ffea8406880)
    auth/pam.c:182에서
auth/sudo_auth에서 verify_user의 0x00007f987a35052c (pw=0x56373c54ce98, 프롬프트=prompt@entry=0x56373c553d00 "[sudo] steve의 비밀번호: ", verifyd=validated@entry=2, callback=callback@entry=0x7ffea8406880) .c: 294
#16 check_user의 0x00007f987a3520e5(auth_pw=0x56373c54ce98, 모드=, 유효성 검사=2) at ./check.c:149
#17 ./check.c:212의 check_user(validated=validated@entry=2, 모드=)의 0x00007f987a3520e5
sudoers_policy_main의 #18 0x00007f987a36506d(argc=argc@entry=1, argv=argv@entry=0x7ffea8406cf0, pwflag=pwflag@entry=0, env_add=env_add@entry=0x56373c5414f0, closure=closure@entry=0x7ffea8 4069f0) ./sudoers에서 .c:423
sudoers_policy_check의 #19 0x00007f987a35eca4(argc=1, argv=0x7ffea8406cf0, env_add=0x56373c5414f0, command_infop=0x7ffea8406a80, argv_out=0x7ffea8406a88, user_env_out=0x7ffea8) 406a90) ./policy.c:758
메인의 #20 0x000056373aee448f (플러그인=0x56373b102480 , user_env_out=0x7ffea8406a90, argv_out=0x7ffea8406a88, command_info=0x7ffea8406a80, env_add=0x56373c5414f0, 0x7ffea8406cf0, argc=1) ./sudo.c:1342
#21 ./sudo.c:261의 메인(argc=, argv=, envp=)에 있는 0x000056373aee448f

auth/pam.c의 181-182행에서 pam_authenticate가 출력을 방지하기 위해 PAM_SILENT 플래그와 함께 호출되는 것을 발견했습니다.

    /* PAM_SILENT는 인증 서비스가 출력을 생성하는 것을 방지합니다. */
    *pam_status = pam_authenticate(pamh, PAM_SILENT);

관련 정보