내 환경을 모니터링하기 위해 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에게 사용할 때 특정 사용자에 대해 기록하지 않도록하려면 어떻게 해야합니까?zabbix
root
sudo
참고 : syslog에서 메시지를 필터링하려고했습니다. 이것은 작동하지만 로그 메시지가 어떤 사용자가 루트가되고 있는지를 나타내지 않기 때문에 위와 동일한 문제, 즉 너무 무차별하다는 문제가 있습니다.
답변
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
. 이 행이 인 경우 중복됩니다 .
답변
Toby의 답변을 바탕으로 Debian / Ubuntu에서 약간 다르게 구성하는 방법을 찾았습니다. 컨텍스트는 다음을 참조하십시오.
- https://manpages.debian.org/stretch/libpam-runtime/pam-auth-update.8.en.html
- https://wiki.ubuntu.com/PAMConfigFrameworkSpec
따라서 데비안 / 우분투에는이 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
Session
및 Session-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
했습니다 .postinst
prerm
경고…
위에서 링크 한 PAMConfigFrameworkSpec 기사 를 읽으면 Session-Interactive-Only
옵션을 정의 하지만 비대화 형 규칙 만 지정할 수있는 방법 은 없습니다 . 그래서 /etc/pam.d/common-session
한 도 업데이트 . 나는 이것 주위에 방법이 있다고 생각하지 않습니다. 해당 사용자에 대해 대화 형 세션이 기록되지 않은 경우 (서비스 계정입니까?) 모든 설정이 완료되었습니다.
보너스 : sudo 로그 출력을 제거하는 방법
받는 사람 또한 session openened|closed
PAM의를 방출하는 선 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 또는 sudo
log stdout
또는 stderr
기본적으로 표시됩니다. 그래서 나에게 이것은 내 서비스의 저널 로그에 표시되었지만 /var/log/auth.log
내 응용 프로그램 로그와 섞이지 않는 위치는 아닙니다. sudo 로깅을 제거하기 위해 다음과 같이 추가 /etc/sudoers.d/10_myuser
했습니다.
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV, 로깅을 비활성화하면 보안 감사에 문제가 발생한다고 생각되면 rsyslog 필터를 통해이 문제를 해결할 수도 있습니다.
답변
꽤 무서운 테스트와 연구 끝에 Debian Stretch (Raspberry)에 대한 효과적인 솔루션을 찾았습니다. OP가 요구하는 것을 달성하는 방법은 여러 가지가 있습니다. 그러나 PAM 문서는 압도적이므로 대부분의 자료는 실제로 TL; DR입니다.
- 다음 을 사용하여 rsyslog 에 대한 사용자 정의 문자열 필터를 추가 할 수 있습니다
/etc/rsyslog.d/anyname.conf
.
:msg, contains, "session opened for user root by pi" stop
- 직접 편집 할 수 있습니다
/etc/pam.d/sudo
- 다음에 사용자 지정 PAM 구성 파일을 만들어 올바른 방법으로 수행 할 수 있습니다.
/usr/share/pam-configs/
- 다음에 사용자 정의 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
사용자 이름입니다.)
답변
당신은 얻을 것이다 :
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)
당신의 로그에.