1

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

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

我的网站被黑了,一堆文件被设置为 200 权限,它是一个 Joomla 1.5 网站,这么多文件/文件夹,将永远手动执行此操作。

主机在 1and1,是一个 linux 共享服务器

我正在寻找一个 PHP 脚本

解决方案(感谢罗伯特提供信息) 出于某种原因,在 windows 和 linux 文件夹上返回 55 我从http://php.net/manual/en/function.fileperms.php获得了烫发功能

<?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);
}
?>
4

3 回答 3

1

您可以将 php 与chmod()函数和递归目录迭代器一起使用

要检查文件权限,您可以使用fileperms()函数。它以数字模式返回文件的权限。您可以使用递归目录迭代器+ 使用fileperms()进行此检查,并且可以使用chmod(). 使用Directory Iterator,您还可以使用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 种方法来检查读/写/执行权限:

  • DirectoryIterator::isExecutable() - 确定当前 DirectoryIterator 项是否可执行
  • DirectoryIterator::isReadable() - 确定当前 DirectoryIterator 项目是否可以读取
  • DirectoryIterator::isWritable() - 确定当前 DirectoryIterator 项目是否可以写入
于 2013-05-31T11:58:37.933 回答
1

您应该升级到更新的 Joomla!尽快发布版本。否则,您将来将面临越来越多的成功攻击,因为 Joomla! 1.5 很久以前就达到了 EOL(生命周期结束)。

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

于 2013-05-31T17:39:41.260 回答
0
find /home/*/public_html -type d -perm 755
于 2013-05-31T12:03:23.657 回答