Centos
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,並以侵入性較小的方式解決問題
通過將 clamd 使用的埠範圍定義到 /etc/clamd.d/scan.conf 來解決
StreamingMinPort 30000 StreamingMaxPort 32000
並通過在 selinux 策略中反映相同的埠範圍
semanage port -a -t clamd_port_t -p tcp 30000-32000
任何人都知道管理問題的更清潔或侵入性更小的方法嗎?