我有一个 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
---