Selinux - clamd가 스레드당 새 포트를 열지 못하게 하는 몇 가지 전략을 찾고 있습니다.

Selinux - clamd가 스레드당 새 포트를 열지 못하게 하는 몇 가지 전략을 찾고 있습니다.

CentOS에서 SElinux를 강제 실행하고 clamAV가 파일을 검색하도록 허용하십시오. 그러나 SElinux는 clamd의 다음 동작을 좋아하지 않는 것 같습니다.

Clamd는 미리 정의된 TCP 포트에서 수신 대기하고 임의의 TCP 포트를 사용하여 파일을 교환하여 클라이언트와 확인합니다.

즉, 스캔된 각 파일은 새 포트를 엽니다.

SElinux를 비활성화하면 모든 것이 잘 작동하므로 SElinux 정책 관련 문제임에 틀림없습니다.

SElinux를 활성화하고 clamd를 강제 적용할 때 다음 문제가 발생합니다.

● clamd.service - clamd scanner () daemon
   Loaded: loaded (/usr/lib/systemd/system/clamd.service; static; vendor preset: disabled)
   Active: active (running) since Thu 2017-06-22 15:56:57 CEST; 27min ago
 Main PID: 3671 (clamd)
   CGroup: /system.slice/clamd.service
           └─3671 /usr/sbin/clamd -c /etc/clamd.d/scan.conf --foreground=yes
Jun 22 15:57:06 prd-app-srv clamd[3671]: HWP3 support enabled.
Jun 22 15:57:06 prd-app-srv clamd[3671]: Self checking every 600 seconds.
Jun 22 15:58:05 prd-app-srv clamd[3671]: ScanStream: Can't find any free port.
Jun 22 15:58:05 prd-app-srv clamd[3671]: ERROR: ScanStream: Can't find any free port.
Jun 22 16:08:05 prd-app-srv clamd[3671]: SelfCheck: Database status OK.
Jun 22 16:08:05 prd-app-srv clamd[3671]: SelfCheck: Database status OK.
Jun 22 16:08:24 prd-app-srv clamd[3671]: ERROR: ScanStream: Can't find any free port.
Jun 22 16:08:24 prd-app-srv clamd[3671]: ScanStream: Can't find any free port.
Jun 22 16:18:24 prd-app-srv clamd[3671]: SelfCheck: Database status OK.
Jun 22 16:18:24 prd-app-srv clamd[3671]: SelfCheck: Database status OK.

/var/log/audit/audit.log에서 다음 로그 항목을 찾습니다.

type=AVC msg=audit(1498156946.689:4165): avc:  denied  { name_bind } for  pid=4086 comm="clamd" src=30860 scontext=system_u:system_r:antivirus_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1498156946.689:4165): arch=c000003e syscall=49 success=no exit=-13 a0=b a1=7fdc8fc31a90 a2=10 a3=1f items=0 ppid=1 pid=4086 auid=4294967295 uid=995 gid=994 euid=995 suid=995 fsuid=995 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="clamd" exe="/usr/sbin/clamd" subj=system_u:system_r:antivirus_t:s0 key=(null)

이것은 밀접한 관련이 있는 것 같습니다. https://bugzilla.redhat.com/show_bug.cgi?id=1248785

서비스가 원하는 모든 포트를 열지 못하게 하는 selinux 정책을 아는 사람이 있습니까?

SElinux를 활성화 및 시행하고 덜 침해적인 방식으로 문제를 해결하고 싶습니다.

답변1

/etc/clamd.d/scan.conf에서 clamd가 사용하는 포트 범위를 정의하여 해결되었습니다.

StreamingMinPort 30000
StreamingMaxPort 32000

그리고 selinux 정책에 동일한 포트 범위를 반영하여

semanage port -a -t clamd_port_t -p tcp 30000-32000

이 문제를 해결하는 더 깨끗하거나 덜 침해적인 방법을 아는 사람이 있습니까?

관련 정보