
파일 권한에 관해 질문을 드려도 될까요? 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
.
사용자 에게는 sandbox
webroot 폴더에 대한 읽기/쓰기 권한이 있어야 합니다.
도움이 되길 바랍니다.
참고: 이는 테스트 목적으로 구현되어야 하며 프로덕션 환경에는 권장되지 않습니다.