PHP/Linux 파일 권한

PHP/Linux 파일 권한

파일 권한에 관해 질문을 드려도 될까요? Apache가 실행되는 Ubuntu 서버를 설정했습니다. 나는 간단한 PHP 업로드 양식을 가지고 있으며 다음과 같이 /var/www/site/uploads에 파일을 업로드할 수 있습니다.

sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 1736
drwxrwxrwx 2 www-data www-data    4096 Oct 18 02:53 ./
drwxrwxrwx 3 sandbox  sandbox     4096 Oct 18 00:42 ../
-rw-r--r-- 1 www-data www-data  145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 www-data www-data  166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 www-data www-data 1451489 Oct 18 02:53  
 6453_3d_landscape_hd_wallpapers_green.jpg

어쨌든 파일을 업로드할 수 있는 방법이 있는데 다음과 같이 표시됩니다.

-rw-r--r-- 1 sandbox sandbox  145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 sandbox sandbox  166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox sandbox 1451489 Oct 18 02:53     
 6453_3d_landscape_hd_wallpapers_green.jpg

대기/실행 중인 쉘 스크립트에 즉시 공급할 수 있도록 했습니다. 현재 대기 중인 스크립트(이동, 체크섬, 이름 바꾸기, 크기 조정 등)는 www-data 속성을 사용하여 업로드된 파일에 대해 아무 작업도 수행할 수 없습니다. 다음과 같은 로컬 계정으로 수행하면

sandbox@sandbox-virtual-machine:/var/www/site/uploads$touch testfile

그러면 스크립트가 원하는 대로 실행될 수 있습니다. 어떤 제안이라도 감사하겠습니다. 미리 감사드립니다.

제가 발전할 수 있도록 도와주신 모든 분들께 감사드립니다.

이제 해결에 가까워졌고 출력을 추가합니다.

sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 388
drwxrwxrwx 2 www-data www-data   4096 Oct 18 04:22 ./
drwxrwxrwx 3 sandbox  sandbox    4096 Oct 18 04:17 ../
-rw-r--r-- 1 sandbox  sandbox  166947 Oct 18 04:21 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox  sandbox  219808 Oct 18 04:20 adafruit_pi.png
-rw-rw-r-- 1 sandbox  sandbox       0 Oct 18 04:22 test

중간 그룹에만 차이가 있는 '테스트'와 같은 업로드된 파일에 대한 권한을 어떻게 설정할 수 있습니까? adafruit_pi.png 대 테스트와 같은 것입니다. PHP 코드에 어떤 문장을 삽입해야 할까요?

답변1

PHP는 Apache에서 웹앱으로 실행되고 있으며 이것이 바로 www-data여러분이 보고 있는 사용자입니다.

업로드 후 다음을 사용하여 파일의 소유자와 그룹을 변경할 수 있습니다.

exec( 'chgrp sandbox 3*.jpg' );
exec( 'chown sandbox 3*.jpg' );

권한을 변경한 후에는 웹서버가 파일에 쓸 수 없고 파일을 삭제하거나 이동할 수 없다는 점에 유의하세요.

답변2

사용자 www-data를 샌드박스 그룹에 추가해 보세요.

답변3

Apache 서비스에 대한 사용자 및 그룹을 변경해 보십시오. Apache 구성 파일에서 검색하고(우분투에서는 /etc/apache2/apache2.ini에 있는 것 같습니다) 다음 행을 검색하십시오.

User www-data
Group www-data

그리고 www-data로 변경합니다 sandbox.

사용자 에게는 sandboxwebroot 폴더에 대한 읽기/쓰기 권한이 있어야 합니다.

도움이 되길 바랍니다.

참고: 이는 테스트 목적으로 구현되어야 하며 프로덕션 환경에는 권장되지 않습니다.

관련 정보