PHP未经许可获取linux文件?

PHP未经许可获取linux文件?

我有一个 PHP 代码,它列出文件和文件夹,使用

shell_exec("sudo ls /home/user");

(www-data 具有 sudo NOPASSWD 访问 ls 的权限。)

现在我需要读取该文件,但不能保证该文件具有使用 www-data 读取的权限。我不想将权限设置为 777。我该怎么做?

答案1

以包含三个文件的目录为例,...

-rw-------  1 root      root         9 Apr 29 15:35 bar
-rw-rw-r--  1 www-data  www-data   395 Apr 29 15:41 cat.php
-rw-------  1 www-data  www-data     9 Apr 29 15:35 foo

…,示例 cat.php 可能具有以下输出 - 由于显而易见的原因,其中包含 php-skript 本身:

ERROR: cannot read file "bar"

echoing contents of file "cat.php":
---
<?php
$filenames = [];
exec('sudo ls -1 .', $filenames);

foreach($filenames as $filename) {
    if (!is_readable($filename)) {
        echo 'ERROR: cannot read file "' . $filename . '"' . PHP_EOL . PHP_EOL;
        continue;
    }
    echo 'echoing contents of file "' . $filename . '":' . PHP_EOL . '---' . PHP_EOL;
    echo file_get_contents($filename);
    echo '---' . PHP_EOL . PHP_EOL;
}
---

echoing contents of file "foo":
---
I am foo
---

相关内容