특정 사용자에 대한 auth.log에서 sudo PAM 메시지를 중지하는 방법은 무엇입니까?


16

내 환경을 모니터링하기 위해 Zabbix를 사용하고 있으며 60 초마다 사용자 정의 스크립트 zabbix_agentd를 사용자로 실행합니다 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

메시지가 사라졌습니다.

그러나 문제는 누군가가 함께 스크립트를 실행 때마다 PAM 메시지를 억제 한 것을이 방법 sudo으로 root.

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

참고 : syslog에서 메시지를 필터링하려고했습니다. 이것은 작동하지만 로그 메시지가 어떤 사용자가 루트가되고 있는지를 나타내지 않기 때문에 위와 동일한 문제, 즉 너무 무차별하다는 문제가 있습니다.


필터링을 지원하며 필터링으로 작동합니다. 나는 그것을 시도했지만 필터링은 보편적 인 방법이 아니기 때문에 그것을 좋아하지 않습니다. 언젠가 메시지의 일부 문자가 변경되거나 무언가가 변경되어 필터가 실패합니다. 구성 매개 변수, 지시문 또는 이와 유사한 것을 사용하여 모든 경우에 중지 될 수있는 솔루션을 찾고 있습니다. 그리고 메시지가 말하고 session closed for user root실제로 필터링하면 모든 메시지를 필터링합니다. 메시지에 언급되지 않은 특정 사용자를 원하며 이름으로 필터링 할 수 없습니다.
inivanoff1

답변:


11

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. 이 행이 인 경우 중복됩니다 .


1
감사합니다! 그것이 내가 찾고있는 것입니다. 완전한! 제거 제안을 주셔서 감사합니다 service in sudo.
inivanoff1

1
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...로그 에서 줄 을 제거하려면 sudoers.d / 파일에 추가하십시오. Defaults:[user] !logfile, !syslog( [user]적절한 경우 교체 )
thom_nic

@thom_nic 그 파일의 경로는 무엇입니까?
not2qubit

아래의 모든 파일 /etc/sudoers.d/-적용되는 사용자, 그룹 또는 응용 프로그램의 이름을 선호합니다. sudo.ws/man/1.8.15/sudoers.man.html
thom_nic

@thom_nic 좀 더 확장 된 답변으로 이것을 게시 해 주시겠습니까? 위에서 제안한 형식이 보이지 않습니다. 또한 나는 거기에 있다고 생각하지 않습니다 :. 그리고 logfiles명시 적이거나 대체되어야 할 것이 있습니까?
not2qubit

3

Toby의 답변을 바탕으로 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두 개의 사이에 줄을 추가 할 수없는 것처럼 보였습니다 @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힘도 이외의 다른 CONFIGS에 포함 sudo.

제 경우에는 이미 코드를 .deb 설치 프로그램으로 패키지 했으므로 /usr/share/pam-configs/myapp파일을 추가 하고 스크립트에 추가 pam-auth-update --package했습니다 .postinstprerm

경고...

위에서 링크 한 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 OPTIONS 섹션을보십시오 . 재미있는 비트 포함 log_input, log_output하지만 (아마도) 더 중요한 것은, syslog하고 logfile. 최신 데비안 버전에서는 rsyslog 또는 sudolog stdout또는 stderr기본적으로 표시됩니다. 그래서 나에게 이것은 내 서비스의 저널 로그에 표시되었지만 /var/log/auth.log내 응용 프로그램 로그와 섞이지 않는 위치는 아닙니다. sudo 로깅을 제거하기 위해 다음과 같이 추가 /etc/sudoers.d/10_myuser했습니다.

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

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


"세션 열기 / 닫기"항목을 구현 한 방식이 효과가 없었습니다. (1) 사용에 지정하지 않은 두 가지 이유가 있습니다 success=1(다음 절을 생략한다), 및 사용자가 지정한 방법 때문에 (2) service = sudo, 실행중인 모든 CRON 작업, 결과는 requirement "service = sudo" not met by user "root". (그리고 다른 부작용도있을 수 있습니다.) 그러나 보너스 는 훌륭했습니다! 감사합니다.
not2qubit

귀하 postinstprerm스크립트 는 어떻게 보입니까?
not2qubit

@ not2qubit re : success=1-나는 pam_unix완전히 건너 뛰지 않을 것 입니다. [default=ignore]pam_unix를 건너 뛰지 않고 출력을 기록하는 것만 중지하고 싶습니다 .
thom_nic

다시 : cron작업 및 service = sudo: 크론 작업이 개인 사용자로 실행되고 있지만 sudo크론 작업의 일부로 전화하지 않을 수 있습니까?
thom_nic

2

꽤 무서운 테스트와 연구 끝에 Debian Stretch (Raspberry)에 대한 효과적인 솔루션을 찾았습니다. OP가 요구하는 것을 달성하는 방법은 여러 가지가 있습니다. 그러나 PAM 문서는 압도적이므로 대부분의 자료는 실제로 TL; DR입니다.

  1. 다음 을 사용하여 rsyslog 에 대한 사용자 정의 문자열 필터를 추가 할 수 있습니다 /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/월드 쓰기 권한을 먼저 변경하지 않고는 파일을 편집하지 마십시오 . 실수하지 않으면 나중에 sudo / su를 사용하지 못하게 될 수 있습니다 ! 새 설정을 다시 변경하기 전에 테스트했는지 확인하십시오. (기본값은 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:

무시 -모듈 스택과 함께 사용하면 모듈의 반환 상태는 응용 프로그램이 얻는 반환 코드에 영향을 미치지 않습니다.

done- 모듈 스택을 종료하고 PAM이 즉시 응용 프로그램으로 돌아 오는 부작용으로 ok와 동일합니다.

N- 스택에서 다음 N 모듈 위로 건너 뛰는 부작용과 함께 ok와 같습니다.

그런 다음 재부팅하고 몇 시간 동안 실행하여 (예 : cron 작업 확인) 이것이 작동하는지 테스트하십시오. 그런 다음 파일 권한을 복원해야합니다. 그렇지 않으면 시스템에 보안 허점이 생길 수 있습니다. ( 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

필자의 경우 이것은 몇 분마다 arp-scan 을 실행하는 IDS 스크립트에 의해 생성되었습니다 . 로그에 표시되지 않게하려면 다음 파일을 작성하십시오.

# 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사용자 이름입니다.)


1
> 할 일이없는 편집 자신의 세계 쓰기 권한을 변경하는 첫번째없이부터 /etc/pam.d/의 모든 파일은 .... 높은 루트와 같은 다른 터미널 세션을 실행하는 것이 좋습니다 대신 예를 들어, sudo su - 그럼 당신은 변화를 잊고 위험한 권한과 위험을 설정할 필요가 없습니다 다시.
thom_nic

@thom_nic 이것을 테스트 했습니까? PAM에서 sudo / su 사용을 실수로 차단하면 사용자가 무엇을 하든지 루트 셸에서도 오류가 발생합니다. 그렇지 않은 경우 PAM이 제대로 작동하지 않을 수 있습니다.
not2qubit

-2

당신은 얻을 것이다 :

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)

당신의 로그에.


1
다음을 지정하십시오. 1. 편집중인 파일, 2. "귀하의"사용자 및 해결 방법
not2qubit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.