PHP가 허가 없이 Linux 파일을 가져오나요?

PHP가 허가 없이 Linux 파일을 가져오나요?

다음을 사용하여 파일과 폴더를 나열하는 PHP 코드가 있습니다.

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

(www-data에는 ls에 대한 sudo NOPASSWD 액세스 권한이 있습니다.)

이제 파일을 읽어야 하지만 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
---

관련 정보