특정 사용자에 대한 auth.log에서 sudo PAM 메시지를 어떻게 중지합니까?

특정 사용자에 대한 auth.log에서 sudo PAM 메시지를 어떻게 중지합니까?

나는 Zabbix를 사용하여 내 환경을 모니터링하고 zabbix_agentd사용자로서 60초마다 사용자 zabbix정의 스크립트를 sudo실행 합니다 root.

나는 /var/log/auth.log이것을 60초마다 본다:

Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root

이 메시지가 내 로그에 넘쳐나는 것을 막고 싶습니다. /etc/pam.d/sudo파일에 다음 줄을 추가 했습니다 session required pam_unix.so.

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

그런 다음 메시지가 사라졌습니다.

하지만 문제는그게 다입니다. sudo누군가가 as를 사용하여 스크립트를 실행할 때 모든 PAM 메시지를 억제합니다 root.

zabbix다른 모든 사용자가 아닌 해당 사용자에 대해서만 메시지를 중지 하고 싶습니다 . 사용자가 권한을 사용하여 스크립트를 실행하고 싶어한다는 sudo것을 알고 PAM에게 알릴 수 있는 방법이 있습니까? PAM을 사용할 때 특정 사용자에 대해 로그인하지 않도록 하려면 어떻게 해야 합니까 ?zabbixrootsudo

노트: 시스템 로그의 메시지를 필터링해 보았지만 위와 같은 문제가 발생했습니다. 즉, 로그 메시지에 어떤 사용자가 루트가 되었는지 표시하지 않기 때문에 너무 무차별적이라는 문제가 있습니다.

답변1

PAM conf 라인에 매우 가까운 것 같습니다.

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

매뉴얼 페이지를 보면 pam_succeed_if요청 사용자(ruser) 예 zabbix.

그래서 나는 다음을 제안합니다:

session [success=1 default=ignore] pam_succeed_if.so quiet uid = 0 ruser = zabbix

zabbix사용자가 변경되면 root다음 테스트가 억제됩니다 (다른 전환은 없음). 나는 이것을 내 사용자 몇 명과 함께 테스트했습니다.

uid = 0(단지 루트가 아닌) 사용자가 되고 싶지 않다면 zabbix위의 테스트를 제거하세요.

테스트를 제거했습니다 service in sudo. 이 줄이 /etc/pam.d/sudo.

답변2

Toby의 답변을 바탕으로 Debian/Ubuntu에서 약간 다른 방식으로 구성하는 방법을 찾았습니다. 맥락은 다음을 참조하세요.

그래서 Debian/Ubuntu에는 다음 pam-auth-update명령이 있는데, 보면 /etc/pam.d/sudo다음과 같습니다:

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

다음과 같습니다 /etc/pam.d/common-session-noninteractive.

#
# /etc/pam.d/common-session-noninteractive - session-related modules
# common to all non-interactive services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of all non-interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1]         pam_permit.so
# here's the fallback if no module succeeds
session requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
# end of pam-auth-update config

물론 위의 파일 중 무엇이든 편집할 수 있지만 여기에는 분명히 "더 높은 힘"이 작용하고 있습니다. Pam 규칙을 추가하려는 다른 패키지와 내 변경 사항이 잘 작동하도록 하려면 어떻게 해야 합니까? 게다가 /etc/pam.d/sudo이렇게 두 s 사이에 줄을 추가할 수도 없는 것 같습니다.@include

##### THIS DIDN'T WORK :( ######
@include common-auth
@include common-account
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
@include common-session-noninteractive

위의 링크와 다른 예제(참고자료 참조 /usr/share/pam-configs/unix)를 읽은 후 다음과 같은 결과를 얻었습니다 /usr/share/pam-configs/myapp.

# Don't log "session opened" messages for myapp user
# See: https://wiki.ubuntu.com/PAMConfigFrameworkSpec
#      https://manpages.debian.org/stretch/libpam-modules/pam_succeed_if.8.en.html
Name: myapp disable session logging
Default: yes
Priority: 300
Session-Type: Additional
Session:
    [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser

SessionSession-Type편집할 파일을 제어하고 순서 Priority를 정의합니다. 파일을 추가하고 실행하면 다음과 pam-auth-update같습니다 /etc/pam.d/common-session-noninteractive. (하단: )

#... omitted
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
session required pam_unix.so 
# end of pam-auth-update config

pam_succeed_if...우리 라인이 앞쪽에 있어야 하기 때문에 이것이 우리가 원하는 것입니다 session required pam_unix.so. (라인은 에서 오고 /use/share/pam-configs/unix를 가지 Priority: 256므로 두 번째 위치에 있게 됩니다.) 또한 service = sudo이 조건자는 common-session-noninteractive이외의 다른 구성에 포함될 수 있으므로 생략했습니다 sudo.

제 경우에는 이미 코드를 .deb 설치 프로그램으로 패키징했기 때문에 해당 파일을 추가하고 스크립트 에 /usr/share/pam-configs/myapp추가 하면 괜찮습니다!pam-auth-update --packagepostinstprerm

경고하다...

당신이 읽으면위에 링크한 PAMConfigFrameworkSpec 기사, 옵션을 정의 Session-Interactive-Only하지만비대화형 규칙만 지정할 수 있는 방법은 없습니다.. 이것도 /etc/pam.d/common-session이렇다또한 업데이트됨. 나는 이 문제를 해결할 방법이 없다고 생각합니다. 이 사용자의 대화형 세션을 기록하지 않기로 동의했다면(서비스 계정 맞죠?) 모든 준비가 완료된 것입니다!

보너스: sudo 로그 출력을 제거하는 방법

session openened|closedPAM에서 내보낸 줄 외에도 실행 sudo된 명령에 대한 추가 정보가 기록됩니다. 다음과 같습니다.

[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...

만약 너라면반품제거하려면 이 링크를 열고 아래에서 계속하세요.

/etc/sudoers.d/___따라서... 특정 작업을 수행하기 위해 수퍼유저 권한이 필요한 서비스 계정에 대해 다음과 같은 작업을 수행할 수 있는 일반적인 설정에 익숙할 것입니다 .

myuser ALL=(ALL) NOPASSWD: /bin/ping

그게 들어갈 수도 있어요 /etc/sudoers.d/10_myuser. 글쎄, 무엇보다도지정할 수도 있습니다.Defaults. 이 구문에 특히 주의하세요.'Defaults' ':' User_List

자, 한번 보세요SUDOERS 옵션 섹션. 흥미로운 부분에는 가 포함되지만 log_input( log_output아마도) 더 중요한 syslog것은 및 입니다 logfile. 최신 버전의 데비안에서는 기본값이 rsyslog이거나 sudolog to stdout또는 log 인 것 같습니다 . 따라서 제 경우에는 이것이 내 애플리케이션 로그에 섞이지 않는 곳 stderr이 아니라 내 서비스의 로그 로그에 표시됩니다 . sudo 로깅을 제거하기 위해 아래와 같이 /var/log/auth.log다음을 추가했습니다 ./etc/sudoers.d/10_myuser

Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping

YMMV, 로깅을 비활성화하면 보안 감사에 문제가 발생한다고 생각되면 rsyslog 필터를 통해 이 문제를 해결할 수도 있습니다.

답변3

수많은 끔찍한 테스트와 연구 끝에 Debian Stretch(Raspberry)를 사용하여 작동하는 솔루션을 찾았습니다. OP가 요구하는 것을 달성하는 방법은 확실히 여러 가지가 있습니다. 하지만 PAM 문서가 많아서 대부분 내용이 매우 깁니다.

  1. 사용자 정의 문자열 필터를 추가할 수 있습니다.시스템 로그 에서: 다음을 /etc/rsyslog.d/anyname.conf사용하여:
    :msg, contains, "session opened for user root by pi" stop
  2. 직접 편집 가능/etc/pam.d/sudo
  3. 다음 위치에서 사용자 정의 PAM 구성 파일을 생성하여 올바른 방법으로 이 작업을 수행할 수 있습니다./usr/share/pam-configs/
  4. 사용자 정의를 생성하여 몇 가지 작업을 수행할 수 있습니다.sudoers파일 입력:/etc/sudoers.d/020_pi

(2)와 (4)를 수행하는 방법을 보여 드리겠습니다.

경고하다

/etc/pam.d/전역 쓰기 권한을 먼저 변경하지 않고는 파일을 편집하지 마십시오. 이를 지키지 않고 실수를 할 경우 향후 이용이 제한될 수 있습니다.스도/스! 따라서 다시 변경하기 전에 새 설정을 테스트해 보시기 바랍니다. (기본 설정은644화)


"세션 열기/닫기"를 제거하려면:

우리는 다음 /var/log/auth.log스팸을 제거하고 싶습니다:

May 10 11:28:03 xxx sudo[26437]: pam_unix(sudo:session): session opened for user root by (uid=0)
May 10 11:28:07 xxx sudo[26437]: pam_unix(sudo:session): session closed for user root

이 작업을 수행:

# sudo chmod 666 /etc/pam.d/sudo
# sudo cat /etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
session [success=1 default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = pi
@include common-session-noninteractive

여기서 가장 중요한 것은 success=1성공하면 다음 1절을 건너뛰는 것(또는 PAM 용어로 "스택에서 다음 모듈을 건너뛰는 것")을 의미한다는 것입니다.

에서 man pam.conf:

소홀히 하다 - 모듈 스택과 함께 사용하는 경우 모듈의 반환 상태는 애플리케이션에서 얻은 반환 코드에 영향을 주지 않습니다.

완벽한 - ok와 동일하지만 모듈 스택을 종료하고 PAM이 애플리케이션을 즉시 반환하는 부작용이 있습니다.

질소 - ok와 동일하지만 스택의 다음 N개 모듈을 건너뛰는 부작용이 있습니다.

그런 다음 재부팅하고 몇 시간 동안 실행하여(크론 작업 확인 등) 작동하는지 테스트합니다. 그런 다음 파일 권한을 재설정했는지 확인하십시오. 그렇지 않으면 시스템에 보안 허점이 생길 것입니다. ( sudo chmod 644 /etc/pam.d/sudo)


중복된 "TTY PWD COMMAND" 메시지를 제거하려면:

우리는 또한 다음과 같은 메시지를 제거하고 싶습니다:

May 11 18:23:20 xxx sudo:       pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l

내 경우에는 실행 중인 IDS 스크립트에 의해 생성되었습니다.arp 스캔몇 분마다. 로그에서 이를 제거하려면 다음 파일을 생성하십시오.

# sudo nano /etc/sudoers.d/020_pi
# sudo cat /etc/sudoers.d/020_pi

Defaults:pi     !logfile, !syslog
pi xxx = (root) NOPASSWD: /usr/bin/arp-scan

(이것은 xxx귀하의 컴퓨터 이름이고 pi귀하의 사용자 이름입니다.)

답변4

당신은 얻을 것이다:

pam_succeed_if(sudo:session): unknown attribute "ruser"

당신의 대답으로.

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session     [success=1 default=ignore] pam_succeed_if.so service in zabbix quiet use_uid
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

작동하지만 여전히 다음을 얻습니다.

pam_unix(sudo:session): session opened for user root by (uid=0)

당신의 일지에.

관련 정보