我在ubuntu服务器20.04上运行了一个简单的python3脚本,该脚本试图调用clamd(clamav守护进程(库来扫描文件。scan ping((和version((函数都能正常工作。然而,当我实际进行测试写入和扫描时,我会得到以下错误:
{'/filedrop/test.doc': ('ERROR', "Can't open file or directory")}
这是我用来称之为测试编写和扫描的代码,这都是来自clamd网站的标准样本:
open('/filedrop/test.doc','wb').write(clamd.EICAR)
print(cd.scan('/filedrop/test.doc'))
代码运行后,我在测试文件中得到了以下字符串,这表明python3脚本能够成功写入该文件,但我一直收到错误,即当我使用clamd扫描函数时无法打开该文件。
这是写入文件的字符串:
X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
我还可以从文件夹上的命令行运行clampscan,它也成功地扫描了文件。
当服务使用clamav:clamav时,我以root用户身份运行。我确实对文件夹和文件给予了读/写权限;其他用户";,并且该文件可以由python脚本编写这一事实也表明了这一点。
我认为这里的问题的解决方案是AppArmour阻止该特定目录的clamd。我会在AppArmour的个人资料中查找claid。它应该被称为/etc/apparmor.d/clamav或类似的名称。你可以调整该配置文件或禁用它(根据Ubuntu(:
sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/profile.name
此处提供了更完整的说明:https://help.ubuntu.com/community/AppArmor
为了测试的目的,你也可以禁用AppArmour(我不想建议任何人永久删除安全功能(,使用:
sudo systemctl stop apparmor
sudo systemctl disable apparmor