扫描具有错误权限的文件或文件夹

时间:2013-05-31 11:55:32

标签: php file joomla permissions directory

我只想查看文件夹和文件夹列表<> 755和文件<> 644

是否有一个脚本可以递归扫描我的Web服务器上的所有文件/文件夹以获取此信息?

我的网站被黑了,一堆文件被设置为200个权限,它是一个Joomla 1.5网站,所以很多文件/文件夹,都需要手动执行此操作。

主机位于1and1,是一个Linux共享服务器

我正在寻找PHP脚本

解决方案(感谢Robert提供信息) 由于某种原因,在Windows和Linux文件夹返回55 我从http://php.net/manual/en/function.fileperms.php

获得了perms的功能
<?php
$path = realpath('.');
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),RecursiveIteratorIterator::SELF_FIRST);
$c = 0;

foreach($files as $name => $f){
        $perm = file_perms($f);
        if ($perm!="644" && $perm!="755" && $perm!="55") {
            $c++;
            echo "<b>".$perm."</b> :: ";
            echo $f->getPathname()."<br>";
            if ($c==200) {exit();}
        }
}

function file_perms($file, $octal = false)
{
    if(!file_exists($file)) return false;
    $perms = fileperms($file);
    $cut = $octal ? 2 : 3;
    return substr(decoct($perms), $cut);
}
?>

3 个答案:

答案 0 :(得分:1)

您可以将php与chmod()函数和resursive directory iterator

一起使用

要检查文件权限,您可以使用fileperms()功能。它将文件的权限作为数字模式返回。您可以resursive directory iterator使用fileperms() +此检查,然后使用chmod()设置权限。使用目录迭代器,您还可以使用getPerms()方法。

示例:

$path = realpath('/path/to/dic');

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),RecursiveIteratorIterator::SELF_FIRST);

foreach($files as $name => $f){
    if($f->getPerms() != 775 && $f->isFile()) {
        chmod($fileinfo->getPathname(), 0775);
        echo getPathname();
    }
}

对于具有不同权限的文件,这会将chmod设置为775。您还可以使用3种方法来检查读/写/执行permmisions:

  • DirectoryIterator :: isExecutable() - 确定当前的DirectoryIterator项是否可执行
  • DirectoryIterator :: isReadable() - 确定是否可以读取当前的DirectoryIterator项目
  • DirectoryIterator :: isWritable() - 确定是否可以将当前的DirectoryIterator项写入

答案 1 :(得分:1)

你应该升级到更新的Joomla!版本尽快。否则,你将来会面临越来越多的成功攻击,因为Joomla!很久以前,1.5已达到EOL(寿命结束)。

一般来说,使用像Akeeba Admin Tools这样的工具是个好主意,它可以完全满足您的要求,还有许多其他有用的东西可以强化您的Jommla!安装。

答案 2 :(得分:0)

find /home/*/public_html -type d -perm 755