SELinux가 Zabbix 에이전트의 sudo 호출을 차단하는 이유는 무엇입니까?

SELinux가 Zabbix 에이전트의 sudo 호출을 차단하는 이유는 무엇입니까?

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이 트릭을 수행한 것일 수 있습니다(명령을 실행했지만 출력이 없기 전).

반복이 핵심이라고 생각합니다. 매 단계마다 정책 적용으로 완화될 다양한 문제가 발생하기 때문입니다. 행운을 빌어요!

관련 정보