shell_exec가 파일을 생성할 수 없습니다

shell_exec가 파일을 생성할 수 없습니다

nginx 웹서버를 사용해서 파일 생성이 포함된 스크립트를 작성하고 있는데 sudoers 목록에서 권한을 부여해도 www-data에서 파일을 생성할 수 없습니다.

내 sudoers 파일에서:

www-data ALL=(ALL) NOPASSWD: /usr/bin/php, /usr/bin/python

모든 권한을 부여하려고 시도했지만 여전히 브라우저를 통해 파일을 만들 수 없습니다.

www-dataALL=(ALL) NOPASSWD: ALL

내 간단한 스크립트는 파일을 생성하려고 하며 터미널을 통해 작동하지만 브라우저에서는 작동하지 않습니다.

<?php
$data = "test";
shell_exec("sudo /bin/echo $data > /var/www/api/v3/monitoring/iam/temp");

답변1

입력하면 sudo echo $data >file쉘은 먼저 일반 사용자로 출력 파일을 연 다음 sudo echo열린 파일에 연결된 출력으로 실행됩니다. 따라서 echo명령은 루트로 실행되지만 file일반 사용자로 열립니다.

다음과 같은 것이 필요합니다 sudo sh -c 'echo $data >file'.

.NET을 사용하여 사용자에게 특정 디렉토리에 대한 쓰기 권한을 부여하는 것이 더 쉬울 수도 있습니다 chmod.

답변2

웹 서버 프로세스를 루트로 실행하는 것에 대한 경고는 다음과 같습니다.나쁜아이디어를 고려해야 합니다. 참고로 OP에 답변하기 위해 중요한 점은 파일을 빌드할 sudoers 파일에 디렉터리를 추가하는 것이었습니다. 예를 들어, 디렉토리에 파일을 쓰려는 경우/var/www/api/v3/monitoring/iam/temp, sudoers 파일에 다음 항목이 포함될 수 있습니다.

www-data ALL=ALL NOPASSWD:/var/www/api/v3/monitoring/iam/temp

이 경우 적어도 하나의 디렉터리에 있는 웹 서버에 루트 권한을 부여할 위험이 있습니다. 그리고 exec 명령 앞에 sudo를 추가할 필요가 없습니다. 예를 들어, php exec는 다음과 같습니다.

<?php
$data = "test";
shell_exec("echo $data > /var/www/api/v3/monitoring/iam/temp");

관련 정보