Syslog로 PAM 디버깅 켜기


34

PAM이 등장한 이후로 싫습니다.

관리자 수준의 Debian Squeeze에서 PAM 디버깅을 켜려면 어떻게해야합니까?

찾을 수있는 모든 리소스를 확인했습니다. Google, 맨 페이지 등 내가 아직 시도하지 않은 유일한 것은 (단지 감히 내가 PAM을 싫어한다고 언급 했습니까?) PAM의 라이브러리 소스를 파고 있습니다.

나는 해결책을 찾기 위해 구글에 아무것도 시도하지 않았다. 내가 지금까지 찾은 것 :

http://www.bitbull.ch/wiki/index.php/Pam_debugging_funktion ( /etc/pam_debug)와 http://nixdoc.net/man-pages/HP-UX/man4/pam.conf.4.html ( debugPAM 항목에 대한 옵션 에서 /etc/pam.d/).

아니, 작동하지 않습니다. PAM 출력 없음, 없음, 절대 침묵.

솔루션을 검색하는 동안 독일의 주유소 인 Pam 링크도 따라갔습니다. 글쎄요, 아마도 수십억 건의 적중에서 단서를 숨길 수도 있지만, 나를 발견하기 전에 내가 죽었을 것입니다.

나머지는 참고로

어떤 문제가 있었습니까?

데비안 스퀴즈로 업그레이드 한 후 뭔가 이상해졌습니다 (음, 어, 한 번, Etch 바로 위에 있었던 것이 었습니다. 따라서 아마도 데비안의 잘못이 아니며 오랫동안 오래 지속 된 설정입니다. PAM과 관련이 있다는 인상을 즉시 받았지만 실제로 무슨 일이 있었는지 몰랐습니다. 나는 완전히 어두워졌고 혼자 남겨졌으며 어렸을 때 힘이 없었습니다. 일부 ssh 로그인은 작동했지만 일부는 작동하지 않았습니다. 재미 있었어. 에 실마리도 ssh -v없고 실마리도 /var/log/*없습니다. "인증 성공"또는 "인증 실패", 때로는 동일한 사용자가 동시에 한 세션에서 동시에 다른 세션에서 실패한 경우도 있습니다. 그리고 당신이 정말로 잡을 수있는 것은 없습니다.

다른 옵션의 기차를 파고 난 후에 알 수있었습니다. 이 nulloknullok_secure데비안 특별는. 뭔가 나사 /etc/securetty와에 따라 tty로그인이 거부되거나되지 않은 (다소 랜덤). 정말 좋은, 휴!

수정은 쉬웠고 이제는 모든 것이 다시 정상입니다.

그러나 이것은 미래에 그러한 혼란을 디버깅하는 방법에 대한 의문을 남겼습니다 . PAM이 처음으로 견과류를 운전하는 것은 아닙니다. 최종 솔루션을보고 싶습니다. "아마겟돈"에서와 같이 최종이 아니라 "해결됨"에서와 같은 최종. 감사.

아, BTW, 이것은 다시 PAM이 등장한 이후로 미워하는 것이 좋다는 내 믿음을 강화 시켰습니다. 내가한다고 언급 했습니까?


다음은 데비안에서이 문제를 직접 생성하는 방법은 passwd -d user다음이 같은 상자에 ssh를 시도 user. syslog의 출력 "실패한 암호"는 PAM 디버깅과 전혀 관련이 없으므로 PAM은 자동으로 유지됩니다.
Tino

난 당신이 설정해야 함을 언급하는 것을 잊었다 PermitEmptyPasswords yes에서 /etc/ssh/sshd_config물론, 다음 PAM 출력과 같이 pam_unix(sshd:auth): authentication failure디버그 채널도 PAM 모듈 어떤 힌트에,하지만 여전히 아무것도 실패의 원인.
Tino

데비안에 /var/log/auth.log파일이 있습니까? 나는 최근 우분투가 그것을 가지고 있다는 것을 발견하고 거기에 모든 pam 관련 내용을 기록합니다. 여기에 대한 답변 중 어느 것도 도움이되지 않았지만 조사하면 /var/log/auth.log문제를 해결하는 데 도움이되었습니다.
LordOfThePigs

/var/log/auth.log입니다 syslog. 문제는 로깅이 아니라 디버깅입니다. 예를 들어 PAM 스택이 일찍 실패하면 출력되는 모듈 syslog이 전혀 호출되지 않기 때문에 아무것도 표시 되지 않습니다. 또는 무언가 실패하고 무언가는 아니지만 둘 다 정확히 같은 줄을 기록합니다. 모든 경우의 95 %는 일반적인 로그를 조사하여 해결할 수 있지만 5 %는 실제로 배후에서 실제로 발생하는 흔적이 없기 때문에 불가능합니다.
Tino

4
PAM을 싫어하면 +1 ;)
Zayne S Halsall

답변:


24

시도해 볼 몇 가지 사항 :

syslog에서 디버그 메시지 로깅을 활성화 했습니까?

cp /etc/syslog.conf /etc/syslog.conf.original
vi /etc/syslog.conf

다음 줄을 추가하십시오.

*.debug     /var/log/debug.log

로 종료하십시오 :wq!.

touch /var/log/debug.log
service syslog restart

다음과 같이 모든 모듈에 대해 디버깅을 활성화 할 수 있습니다.

touch /etc/pam_debug

또는 관련 행 /etc/pam.d/system-auth또는 다른 /etc/pam.d/*파일 의 끝에 "디버그"를 추가하여 원하는 모듈에 대해서만 디버깅을 활성화 할 수 있습니다.

login   auth    required    pam_unix.so debug

그런 다음에 디버깅 메시지가 나타나기 시작해야합니다 /var/log/debug.log. 이것이 당신을 도울 수 있기를 바랍니다!


좋은 대답이지만 syslog 디버깅을 사용했다고 생각합니다. 제가 확인하겠습니다.
Tino

확인했습니다. 죄송합니다. 귀하의 답변은 해결책이 아닙니다. PAM은 여전히 ​​침묵을 유지합니다. 아마도 이것은 nullok이 모듈 만 디버깅이 부족하다는 점 에서 특별합니다. 이러한 핵심 코드에서 디버깅이 부족하다는 것은 Freddy Kruger가 괴롭히는 것보다 더 악몽입니다.
Tino

글쎄, 나는 당신이 정확하게 대답한다고 생각합니다! PAM음소거 된 것은 대답의 잘못이 아닙니다 . 그래서 당분간 나는 PAM항복 할 때까지 "솔루션"으로 받아들 입니다. 감사.
Tino

여전히 디버그 출력이 보이지 않지만 Ubuntu 16.04에서 syslog 디버그를 보려면 echo '* .debug /var/log/debug.log'> /etc/rsyslog.d/90-debug를 수행하십시오. conf; systemctl restart rsyslog.service
Noam

debug.log에 대한 적절한 권한과 파일 소유권이 필요합니다. syslog와 동일하게 설정하십시오. (간단하고 잊기 쉽습니다.)
mgarey

10

적어도 CentOS 6.4에서는 /etc/pam_debug사용되지 않습니다.

pam_warn.so 모듈이 설치되어 있으면 다음과 같이 로깅 출력을 얻을 수 있습니다.

auth required pam_warn.so

success required pam_warn.so

등.이 모듈은 언제라도 인증 프로세스를 방해하지 않지만 syslog를 통해 의미있는 내용을 기록합니다.

최신 정보

코드를 조사하고 일부 컴파일을 수행 한 후 (1) 소스를 통해이 디버그 모드를 활성화 할 수 있으며 (2) RHEL 패치로 인해 해당 기능을 거의 사용할 수 없게합니다 (적어도 pam_unix 모듈). 어쨌든 코드를 패치하는 것이 좋습니다.

이것이 RHEL에서 작동하게하려면 Linux-PAM ... src.rpm (1.1 버전의 경우)을 가져 와서 spec 파일을 다음과 같이 변경하십시오.

  • 로 시작하는 줄 찾기

    % configure \

그 후에 --enable-debug \

  • % patch2로 시작하는 행을 제거하거나 주석 처리하십시오 (이전 행 위).

그런 다음 rpm을 빌드하고 설치하십시오 (강제로 기존 패키지를 덮어 쓰기). 이제 /var/run/pam-debug.log 파일을 만듭니다 :

install -m 622 /dev/null /var/run/pam-debug.log

파일이 존재하지 않으면 디버그 출력이 stderr로 전송됩니다.

  • 내 생각에 stderr로 보내는 것은 어리석은 일이며 패치 충돌을 일으키는 원인입니다. libpam / include / security / _pam_macros.h 파일로 이동하여 파일 의 4 줄을 교체하여 해당 동작을 변경할 수 있습니다.

    로그 파일 = stderr;

return;

빌드시 도달 불가능한 명령문에 대한 경고가 표시되지만 무시할 수 있습니다. sed 스크립트에서이 변경을 수행하고 패치 후에 RPM의 % prep 섹션에 넣을 수 있습니다 ...

sed -i 's/logfile = stderr;$/return;/' libpam/include/security/_pam_macros.h

이 작은 패치를 수행하면 제대로 다시 작동하므로 % patch2를 복원 할 수 있습니다.


감사. 좋은 힌트입니다. 다시 문제가 생기면 노력하겠습니다. 그래서 희망적으로 결코 ..;)
Tino

이것은 나를 위해 일했지만 SELinux를 실행하는 경우 /var/run/pam-debug.log에 적절한 컨텍스트를 설정해야합니다 (system_u : object_r : var_log_t는 대부분의 메시지를 잡았습니다). 그렇지 않으면 많은 디버깅 출력이 표준 오류에 기록됩니다 (또는 RedHat의 표준 오류 동작을 패치하면 자동으로 삭제됩니다).
jgibson

6

CentOS 6.4의 PAM에서 디버그 로그를 활성화하는 방법을 찾으려고 몇 시간을 보냈습니다. 이 질문은 데비안을위한 것이지만, 다른 사람들이 이미 가지고있는 시간을 들이지 않아도되기 위해 CentOS에서 어떻게해야하는지 적어 보겠습니다.

결과적으로 pamCentOS 패키지 에서 디버그 로그를 활성화하는 것은 간단합니다. 어려움은 패키지를 다시 컴파일해야한다는 사실에서 비롯됩니다. 따라서 먼저 여기pam-1.1.1-13.el6.src.rpm 에서 SRPM (예 :)을 찾으 십시오 . SRPM에서 패키지를 컴파일하는 방법을 모르는 사람들 은 RPM 빌드 환경 설정 단계를 참조하십시오 .

주요 단계는 다음과 같습니다. 스펙 파일을 열고 호출 --enable-debug%build섹션에 추가하십시오 configure. 재 컴파일! 새로 만든 패키지를 다시 설치하십시오. 마지막으로 디버그 로그를 작성할 파일을 작성하십시오.

$ sudo touch /var/run/pam-debug.log

파일을 만들지 않으면 터미널에서 많은 로그가 날아가므로 유용하지 않을 수 있습니다.


유닉스의 다른 맛이나 PAM을 감히 사용하는 것도 매우 환영합니다;)
Tino

5

데비안과 우분투 (및 다른 배포판)에는 모든 pam 출력이 기록되는 특수 로그 파일이 있습니다.

/var/log/auth.log

나는 하루 반 동안 pam 관련 문제로 고생하고 마침내이 로그 파일에 대해 알아 냈고 광기에서 자신을 구했습니다.

다음은 계획대로 진행되지 않을 때이 파일의 내용 샘플입니다.

Jul 10 09:31:14 vagrant-ubuntu-trusty-64 pamtester: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd_users.db': No such file or directory
Jul 10 09:36:20 vagrant-ubuntu-trusty-64 sudo:  vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log

작동 할 때의 모습은 다음과 같습니다.

Jul 10 09:47:00 vagrant-ubuntu-trusty-64 sshd[5222]: pam_unix(sshd:session): session closed for user vagrant
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: Accepted publickey for vagrant from 10.0.2.2 port 54652 ssh2: RSA dd:3b:b8:2e:85:04:06:e9:ab:ff:a8:0a:c0:04:6e:d6
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: pam_unix(sshd:session): session opened for user vagrant by (uid=0)
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo:  vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session opened for user root by vagrant(uid=0)
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session closed for user root
Jul 10 09:51:41 vagrant-ubuntu-trusty-64 pamtester: pam_userdb(vsftpd:auth): user 'foo' granted access
Jul 10 09:51:44 vagrant-ubuntu-trusty-64 sudo:  vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Jul 10 09:51:44 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session opened for user root by vagrant(uid=0)

pam 디버그 로깅을 활성화 할 수있는 다른 가능성은 없습니다.


1
pam_*실제로 같은 줄 은 모두 PAM으로 인식됩니다. 다른 라인은 PAM 사용 여부에 관계없이 툴에 의해 출력됩니다. 이는 PAM이 어떤 이유로 든 PAM을 거부하는 경우 PAM에있는 경우 실제 원인을 찾기가 실제로 어렵다는 것을 의미합니다. 비 PAM 회선은 문제가 PAM에 있으므로 도움이되지 않으며 PAM 회선은 종종 너무 조용하기 때문에 도움이되지 않습니다. 많은 PAM 모듈이 존재하면 어떤 모듈이 범인인지 추측하기가 어렵습니다. 각 모듈마다 다르므로 디버깅을 활성화하는 방법을 찾을 수는 없습니다.
Tino

0

/ etc / securetty로 문제가 생겼으며 tty (약간 임의 임)에 따라 로그인이 거부되었는지 여부. 정말 좋은, 휴!

조금 확장 해 주시겠습니까?

securetty의 맨 페이지 당 :

the file contains the device names of terminal lines (one per line, without leading /dev/) on which root is allowed to login.

당신이 묘사하는 행동은 securetty가 정상적으로 작동하는 것처럼 들립니다 (실제로 루트로 로그온했다고 가정).

일부 ssh 로그인은 작동했지만 일부는 작동하지 않았습니다.

여기에도 PAM 이외의 제한이있을 수 있으므로 사용자의 /etc/ssh/sshd_config모습에 대한 통찰력을 제공하는 데 도움이 될 수 있습니다 .

특히, 당신의 설명에서 :

  • 루트로 로그인하려고했지만 실패한 경우이 행이 다음에 있기 때문일 수 있습니다 sshd_config.PermitRootLogin no
  • 일부 사용자 / 그룹 작업, 그리고 다른 사람하지 않을 경우 하나의 이유에서 사용할 수 sshd_configAllowGroups또는 AllowUsers. 샘플 라인은 다음과 같습니다. AllowGroups users admins

물론 PAM이 문제의 일부일 수도 있지만, 다른 방법으로 설명 할 수있는 것처럼 '주요 증상'이 나에게 들립니다.


-1

Asket ... 난 당신의 게시물을 정말 사랑했습니다 :) 나는 지난 15 시간 동안 이런 것들과 싸우고 있었다 ... (나는 30 분 휴식을했을지도 모른다)

어떻게 든 당신이 한 모든 일을 수행하여 작동하게했습니다. 즉, / etc / pam_debug가 있고 pam 항목을 디버그합니다. 그러나 내 경우와 같이 고군분투하고 pam_mysql있었고, 나는 팸 항목을 verbose=1한 번 더 넣어야했습니다 debug.

mailsystem:~# cat /etc/pam.d/smtp

auth required pam_mysql.so debug sqllog=1 verbose=1 user=mail passwd=imverysecret host=127.0.0.1 db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 logtable=log_auth logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=time

account sufficient pam_mysql.so debug sqllog=1 verbose=1 user=mail passwd=imverysecret host=127.0.0.1 db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 logtable=log_auth logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=times

"sqllog"는 DB에 로그를 작성하는 것입니다.

아마도 이것이 약간 도움이 될 것입니다.

우리는 모두 PAM을 싫어합니다. 행운을 빕니다!


1
힌트를 주셔서 감사하지만 불행히도 이것은 도움이되지 않습니다.pam_unix(sshd:auth): unrecognized option [verbose=1]
Tino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.