php exec/shell_exec 동작 CLI 및 CGI

php exec/shell_exec 동작 CLI 및 CGI

PHP를 사용하여 일부 시스템 명령을 실행하려고 하는데 완전히 이해할 수 없는 동작이 발생합니다. 명령줄에서 PHP 스크립트를 실행하면 예상한 결과를 얻을 수 있습니다. 그러나 Apache를 통해 실행하면 혼합된 결과가 나타납니다.

예를 들어, 다음과 같은 간단한 작은 PHP 스크립트가 있습니다.

<?php
$res = shell_exec("ps -ef");
echo $res;
?>

명령줄에서 실행하면 "ps -ef"를 직접 실행했는지 확인하고 싶기 때문에 전체 프로세스 목록을 얻을 수 있습니다. 그러나 Apache를 통해 스크립트를 실행하면 몇 개의 루트 소유 프로세스와 일반 사용자가 소유한 하나의 프로세스도 있지만 대부분 Apache가 소유하는 더 작은 프로세스 집합을 얻게 됩니다. 다른 명령을 사용하려고 하면 유사한 동작이 발생합니다. CLI 모드(예: "php test.php")에서 실행하면 작동하지만 Apache에서 PHP 스크립트를 추출하면 작동하지 않습니다. 어떤 사용자가 CLI 모드에서 실행하는지는 중요하지 않은 것 같습니다(저는 루트와 개인 사용자 계정으로 테스트했습니다). 이것은 일종의 권한 문제인 것 같습니다. "ps -ef"의 예에서 두 경우 모두 결과를 얻었기 때문에 실행 가능한 문제는 아닌 것 같습니다.

저는 Apache 2.4.37과 PHP 8.0.8을 사용하여 CentOS 8을 실행하고 있습니다.

내가 무엇을 놓치고 있나요?

감사해요,

개빈

답변1

파일 시스템은 으로 /proc확인할 수 있습니다 .hidepid=2grep hidepid /proc/self/mountinfo

관련 정보