CentOS 7 无法连接 clamd.sock 文件(权限被拒绝错误)
CentOS 7 unable to connect clamd.sock file (Permission denied error)
我正在尝试使用 clamAV 扫描 PHP 服务器上上传的文件。我已经在我的服务器(Centos 7)上安装了 ClamAV。目前,我使用的是 PHP 7,所以我使用 Clamd 套接字连接来扫描上传的文件。我启用了 PHP 套接字,clamd.sock 文件存在于 /var/run/clamd.scan/
文件夹中,具有 apache 所有者。
我的 Socket 连接代码 -
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
if(socket_connect($socket, '/var/run/clamd.scan/clamd.sock')) {
return $socket;
}
当我尝试在浏览器上使用 运行 上面的代码时,出现 socket_connect(): unable to connect [13]: Permission denied
错误,但是如果我通过命令行 运行 PHP 代码使用用户作为 root 它工作正常。
我知道 Centos 的 SELinux 策略存在一些问题,就好像我禁用了 SELinux 策略一样,在浏览器中一切正常。我检查了 httpd_can_network_connect --> on
和 antivirus_can_scan_system --> on
都已打开。
问题在于 apache
用户访问 /var/run/
文件夹内的任何内容时,SELinux 中的某些内容(某些策略)正在阻止 apache 连接到 clamd 套接字文件。有任何想法吗?
调试后得知是SELinux策略问题。
您需要在 SELinux 中启用 daemons_enable_cluster_mode 策略。
启用daemons_enable_cluster_mode:
setsebool -P daemons_enable_cluster_mode 1
在我的例子中,这将允许通过 Apache 等其他服务执行 ClamAV 扫描。
我正在尝试使用 clamAV 扫描 PHP 服务器上上传的文件。我已经在我的服务器(Centos 7)上安装了 ClamAV。目前,我使用的是 PHP 7,所以我使用 Clamd 套接字连接来扫描上传的文件。我启用了 PHP 套接字,clamd.sock 文件存在于 /var/run/clamd.scan/
文件夹中,具有 apache 所有者。
我的 Socket 连接代码 -
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
if(socket_connect($socket, '/var/run/clamd.scan/clamd.sock')) {
return $socket;
}
当我尝试在浏览器上使用 运行 上面的代码时,出现 socket_connect(): unable to connect [13]: Permission denied
错误,但是如果我通过命令行 运行 PHP 代码使用用户作为 root 它工作正常。
我知道 Centos 的 SELinux 策略存在一些问题,就好像我禁用了 SELinux 策略一样,在浏览器中一切正常。我检查了 httpd_can_network_connect --> on
和 antivirus_can_scan_system --> on
都已打开。
问题在于 apache
用户访问 /var/run/
文件夹内的任何内容时,SELinux 中的某些内容(某些策略)正在阻止 apache 连接到 clamd 套接字文件。有任何想法吗?
调试后得知是SELinux策略问题。 您需要在 SELinux 中启用 daemons_enable_cluster_mode 策略。
启用daemons_enable_cluster_mode:
setsebool -P daemons_enable_cluster_mode 1
在我的例子中,这将允许通过 Apache 等其他服务执行 ClamAV 扫描。