我似乎无法让这个东西工作,可能是某些权限问题,但我甚至无法以 root 身份从控制台正常运行 clamdscan,结果总是权限被拒绝。例如,我在 /tmp 中创建一个文件 test.txt(eicar 文件),并以 root 身份登录控制台执行“clandscan /tmp/test.txt”,结果显示“/tmp/test.txt:访问被拒绝。错误”。clamd 守护程序正在以用户 clamav 运行,这可能是原因吗?现在我想通过 php 扫描同一个文件(/tmp/test.txt),所以我运行(我已将文件的所有权更改为 apache:apache)
$cmd="clamdscan /tmp/test.txt";
exec($cmd,$a,$b);
我收到错误 127,我尝试使用命令 /usr/bin/clamdscan 的完整路径,但收到错误 126(找到命令但不可执行),这意味着 apache 没有执行 /usr/bin/clamdscan 的权限?可能是什么问题?
答案1
这是一个旧的,但是:
$cmd="clamdscan --fdpass /tmp/test.txt";
exec($cmd,$a,$b);
摘自文档:--fdpass 选项向 clamd 发送文件描述符而不是路径名,从而避免了 clamav 用户需要能够读取所有人的文件。因此,守护进程应该能够在任何情况下以默认 clamav 用户身份运行。...
想要
扫描文件或目录的用户应使用 clamdscan --fdpass 命令让 clamd 守护进程执行此操作