
sudo가 필요한 Zabbix 검사가 있습니다. /etc/sudoers.d/zabbix의 내용은 다음과 같습니다.
zabbix ALL=(ALL) NOPASSWD: /bin/yum history
zabbix ALL=(ALL) NOPASSWD: /bin/needs-restarting
zabbix ALL=(ALL) NOPASSWD: /sbin/check31
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/crm_mon --as-xml
Zabbix 프록시에서 강제로 확인하면 다음과 같은 권한 거부 오류가 발생합니다(pacemaker.status에서 사용 /usr/sbin/crm_mon --as-xml
).
bash-5.0$ zabbix_get -s my-server -k pacemaker.status
sudo: PAM account management error: System error
sudo: unable to send audit message: Permission denied
일시적으로 SELinux를 허용 모드로 설정하여 SELinux가 내 호출을 차단하고 있음을 확인했습니다.
그런 다음 다음 단계를 수행하여 이러한 호출을 허용해 보았습니다.
먼저 감사 로그가 이전 문제의 관련 없는 메시지로 가득 차 있었기 때문에 순환시켰습니다.
service auditd rotate
그런 다음 정책에서 모든 dontaudit를 제거했습니다.
semodule -DB
Zabbix 프록시에서 zabbix_get
위에서 설명한 대로 호출을 실행하여 오류를 발생시켰습니다.
로그에서 SELinux 모듈을 생성하고 다음을 사용하여 설치했습니다 semodule
.
cat /var/log/audit/audit.log | audit2allow -M zabbix-agent
semodule -i zabbix-agent.pp
그래도 를 실행할 때 감사 메시지를 보낼 때 동일한 권한 거부 오류가 발생합니다 zabbix_get
. 나는 몇 가지 연구를 수행했으며 dontaudits를 끄면 이 문제를 해결하기 위해 SELinux가 추가 메시지를 기록하도록 강제해야 하지만 내 상황에서는 작동하지 않습니다.
다음은 빌드된 zabbix-agent.te
파일 입니다 .audit2allow
module zabbix-agent 1.0;
require {
type zabbix_agent_t;
type chkpwd_exec_t;
class unix_dgram_socket create;
class file execute_no_trans;
class netlink_audit_socket create;
}
#============= zabbix_agent_t ==============
allow zabbix_agent_t chkpwd_exec_t:file execute_no_trans;
allow zabbix_agent_t self:netlink_audit_socket create;
allow zabbix_agent_t self:unix_dgram_socket create;
답변1
시도해 보았 니:
setsebool -P zabbix_can_network=1
위의 사항을 이미 허용한 경우 다음을 시도해 볼 수 있습니다.
yum install policycoreutils-python
semanage permissive -a zabbix_agent_t
행운을 빌어요
답변2
비슷한 문제가 있었습니다(selinux 지원 시스템에서 RAID 컨트롤러 검사 실행).
나에게 누락된 링크는 다음과 같습니다.
세모듈 -DB
일부 비감사 정책을 활성화합니다. 그런 다음 정책을 다시 캡처하십시오.
참조 내용은 다음과 같습니다.https://forums.centos.org/viewtopic.php?t=62829 캡처할 때 먼저 selinux를 허용으로 설정하는 것이 중요합니다. 여러분과 마찬가지로 저도 다음과 같은 작업을 수행했습니다(허용으로 설정하고 정책을 캡처 및 적용한 후).
로그 회전, 이전 로그 제거:
service auditd rotate
semodule -DB(감사 규칙 없음 비활성화)
- zabbix에서 명령을 실행하십시오 (구성 - 호스트 - 한 번 실행)
다음을 실행하여 정책 파일을 가져옵니다.
grep -i avc /var/log/audit/audit.log | audit2allow -M 정책x
달리다
semodule -ipolicyx.pp
Zabbix에서 명령을 다시 실행하여 작동하는지 확인하십시오.
달리다
세모듈 -B
감사 없음 규칙을 다시 활성화합니다.
내 sudoers 규칙은 다음과 같습니다.
zabbix ALL=(root) NOPASSWD: /opt/MegaRAID/storcli/storcli64
nologin 쉘이 있는 zabbix 사용자가 다음과 같은 명령을 실행할 수 있는지 시도했습니다.
su -s /bin/bash -c 'sudo /opt/MegaRAID/storcli/storcli64 /c0 /eall /sall show' zabbix
사용자 zabbix로 제대로 실행되는지 확인하기 위해 명령에 대해 동일한 작업을 시도하는 것이 좋습니다.
또한 sudoers 및 섀도우 파일에 Restorecon을 사용했지만 도움이 되었는지는 확실하지 않습니다. 또한 실행하는 스크립트에 zabbix_agent_t 컨텍스트를 설정했지만 효과가 없을 수도 있습니다.
마지막으로, 제가 적용한 정책 파일은 다음과 같습니다. 아마도 이를 컴파일하고 적용하여 작동하는지 확인할 수 있습니다.
cat mypolz1.te
module mypolz1 1.0;
require {
type zabbix_exec_t;
type zabbix_agent_t;
type system_dbusd_t;
class capability { net_admin sys_admin };
class dbus send_msg;
class unix_dgram_socket write;
class file { execute execute_no_trans };
class netlink_audit_socket { read write };
}
#============= zabbix_agent_t ==============
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:capability net_admin;
allow zabbix_agent_t self:capability sys_admin;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:netlink_audit_socket { read write };
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:unix_dgram_socket write;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t system_dbusd_t:dbus send_msg;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t zabbix_exec_t:file { execute execute_no_trans };
보시다시피 몇 가지 정책이 설정되어 있으며 아마도 sysadmin이 트릭을 수행한 것일 수 있습니다(명령을 실행했지만 출력이 없기 전).
반복이 핵심이라고 생각합니다. 매 단계마다 정책 적용으로 완화될 다양한 문제가 발생하기 때문입니다. 행운을 빌어요!