【问题标题】:clamdscan can't read from tmp directoryclamdscan 无法从 tmp 目录读取
【发布时间】:2013-05-17 21:38:42
【问题描述】:

我想知道我的代码有什么问题,如果我使用 clamscan,无论是从 /tmp 读取还是手动指定路径都可以正常工作。但如果我使用 clamdscan,来自 /tmp 的任何路径都会导致错误(int 结果为 2)。这是代码。

    $command = 'clamdscan ' . escapeshellarg($_FILES['file']['tmp_name']);
    $out = '';
    $int = -1;
    exec($command, $out, $int);

    echo "\n" . $command;
    echo "\n" . $out;
    echo "\n This is int = " . $int;
    if ($int == 0) {
        // all good, code goes here uploads file as normal IE move to
        //echo "File path : ".$file."Return code : ".cl_pretcode($retcode); 
        //echo "\n";
        move_uploaded_file($_FILES["file"]["tmp_name"], "filesave/" . $_FILES["file"]["name"]);
        echo "Stored in: " . "filesave/" . $_FILES["file"]["name"]; 
    } else {
        echo "\n FAILED";
    }

根据上面的代码,它会失败,因为$int = 2。但是,如果我将命令更改为

//some file that is saved already in the directory
$command = 'clamdscan ' . '/abc/abc.txt';

效果很好。

只有当命令是 clamdscan 时才会失败。如果我使用clamscan,临时目录就可以了

有什么想法吗?

【问题讨论】:

  • 运行clamd deamon 的用户是否拥有/tmp 的权限?
  • @dev-null-dweller 嗯..说实话我不知道如何检查。请指导我。我知道 clamscan 工作正常,所以我认为应该是一样的?
  • clamscan 以用户调用它的权限运行,但是clamdscan 依赖于一个通常使用特权非常有限的特殊帐户运行的恶魔进程。只需检查 /tmp 和 is 的子目录是否对所有人都可读
  • @dev-null-dweller 如果是这样的话,我只是检查一下,每个人都可以阅读(777)。我尝试在上面放一些文件,然后从命令行运行它(而不是通过 php exec 函数),clamdscan 工作正常
  • 嘿@Harts,你找到解决方案了吗?

标签: php security file-upload upload antivirus


【解决方案1】:

您真的应该只使用那里的众多 clamd 客户端之一,而不是依赖执行命令并解析其输出,这非常脆弱,将来只会给您带来头痛。例如:

http://torquecp.sourceforge.net/phpclamcli.html

如果您是自己动手的类型,clamd 线协议非常简单 (http://linux.die.net/man/8/clamd),您可能会在几个小时内编写一个简单的客户端。同样,这里的好处是它是一个定义良好的协议,并且具有一些不错的功能,例如流式调用,它允许您使用完全不同的安全凭证来操作 clamd 服务和您的 web 应用程序(它们甚至可以在不同的机器上运行)。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    简单说一下使用http://torquecp.sourceforge.net/phpclamcli.html 作为 DIY cli 执行程序的更好替代方案。前面提到的 php 脚本也完全依赖 clamav 响应文本的语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-30
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多