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");