以下を使用してファイルとフォルダを一覧表示するPHPコードがあります。
shell_exec("sudo ls /home/user");
(www-dataにはlsへのsudo NOPASSWDアクセス権があります。)
これでファイルを読む必要がありますが、www-dataを使用してファイルを読み取る権限があるという保証はありません。 777に権限を設定したくありません。どうすればいいですか?
ベストアンサー1
3つのファイルを含むディレクトリを例にとります。
-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
---