[unix] 파일 및 폴더에 쓸 수있는 PHP 권한 부여

추가 선명도를 위해 업데이트 :

http://expressionengine.com/user_guide/installation/installation.html 에 따르면 다음 과 같이 말합니다.

대부분의 유닉스 호스트의 경우 다음이 일반적이지만 호스트가 더 제한적인 권한을 사용하여 PHP가 파일 (666) 및 폴더 (777)에 쓸 수 있는지 확인할 수 있습니다 . Windows 서버에서는 다음이 적용되지 않지만 ExpressionEngine에서 파일 및 폴더를 쓸 수 있는지 확인해야합니다. 이를 위해 호스트에게 연락해야 할 수도 있습니다.

이것이 무엇을 의미하는지 잘 모르겠습니다. 나는 chown’er 인 특정 파일과 폴더를 각각 666과 777로 변경할 수 있지만 위의 소리는 PHP에서도이를 허용 해야하는 것처럼 들립니까?

원래 질문 :

PHP가 특정 파일 (666)과 폴더 (777)에 쓸 수 있는지 확인해야합니다.

어떻게해야합니까?



답변

기술 솔루션으로 rahmu와 MV의 답변을 완성하겠습니다. 다음은 UNIX와 유사한 시스템에만 유효합니다.

UNIX 파일 모드보다 강력한 도구 인 ACL을 사용하는 예를 보려면 chmod / chown 섹션을 스크롤하십시오.

웹 서버 사용자 이름 찾기

먼저 웹 서버가 실행되는 사용자 이름을 알아야합니다. 아파치를 사용하는 경우가 될 수 있습니다 apache또는 httpd, www-data데비안 계열 시스템, 아파치가 대부분에 등 www-data. nginx의 경우 일반적으로이기도 www-data합니다.

확인하려면 다음을 시도하십시오.

ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1

이 명령이 리턴하는 사용자 이름이 일관성이 있는지 확인하십시오 (예를 들어, nginx 99 %의 시간을 사용하지만이 명령은 tomcat7한 번 설치 한 Java 웹 서버를 리턴 함 ) .


웹 서버에 권한 부여 : chmodchown

이렇게 chmod가지 작업을 마술 수 666 또는 777 (나쁜 문서화 / 자습서 문제의 종류에 대한 이동 -에 용액)을, 그러나하는 것은 안전하지 않습니다. 666 또는 777 권한을 부여하면 “다른 사용자”에게 액세스 권한이 부여됩니다. 따라서 Apache뿐만 아니라 ( grandmother그리고 nsa해당 사용자 계정이 컴퓨터에 존재하는 경우-실제로는 테스트 / 문제 해결을위한 것이 아니라면 이것을 피하십시오).

보다 구체적이고 귀하와 Apache에만 권한을 부여하는 것이 좋습니다. 파일 그룹을 변경하여 파일에 대한 모든 권한을 웹 서버에 부여하십시오. 이렇게하려면 소유자를 재귀 적으로 변경하십시오.

chown -R www-data:www-data your/folder/

그러나 대부분 그룹을 변경하여 파일에 대한 전체 액세스 권한을 유지하려고 할 수 있습니다.

chown -R yourusername:www-data your/folder/

그런 다음 적절한 권한 chmod을 부여하여 그룹 www-data과 동일한 권한 을 부여하십시오 . 예를 들어, 현재 모드가 640 (여러분6, www-data는 4, 다른 사람은 0, -rw-r —–로 변환) 인 경우 660 (여러분은 6 , www는 6) 으로 설정하십시오. -rw-rw —-)로 변환하는 기타 데이터의 경우 data 입니다. 파일 모드에 대한 자세한 내용은 rahmu의 답변을 참조하십시오. 오래되었지만 우아한 메커니즘입니다.

로 아케인 숫자를 조작하지 않으려면 chmod다음 구문을 사용할 수도 있습니다.

chmod -R g+rw your/folder/

“그룹에 ( g), 폴더에 대한 +읽기 및 쓰기 rw권한 your/folder/( -R)을 재귀 적으로 추가 ( ) “한다는 의미 입니다.

90 %의 경우 충분합니다.


내가 선호하는 방법 : ACL 사용 (액세스 제어 목록)

때로는 첫 번째 해결책으로는 충분하지 않습니다. 많은 데이터를 기록하고 캐시하는 Symfony Framework 의 예를 살펴 보겠습니다 . 따라서 해당 폴더에 대한 쓰기 권한이 필요합니다.

그리고 chmod/의 chown당신이 (내 사용자 계정) CLI의 심포니 콘솔과 웹 (웹 서버 사용자)를 병렬로 사용하는 경우 방법은 충분하지 않을 수 있습니다. Symfony가 지속적으로 권한을 수정하기 때문에 많은 문제가 발생합니다.

이 경우 많은 UNIX 시스템에서 권한을 관리하는 고급 방법 인 ACL (Access Control List)을 사용합니다.

공식 심포니 문서에 의해 주어진 다음 명령 ( 변경하십시오 app/cacheapp/logs사용자의 요구에 ) :

지원하는 시스템 chmod +a(즉, 데비안 / 우분투가 아님)

sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

지원하지 않는 시스템에서 chmod +a(가장 일반적)

setfacl도구 가 필요합니다 . 기본적으로 시스템에 설치되어 있으므로 setfacl -v명령을 사용할 수 있는지 확인하십시오.

명령을 사용할 수없는, 경우 우분투 14.04+를 사용하고, 당신은 단지 도구를 설치해야합니다 :

sudo apt install acl

그렇지 않으면 파티션 마운트 방법을 변경해야 할 수도 있으므로 OS 설명서를 따르십시오 ( Ubuntu documentation here ).

그리고 우리는 :

sudo setfacl  -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs

나는이 방법, 만족 또는 당신의 돈을 다시 문제가 없었습니다.


답변

누가 파일 소유자인지에 관계없이 666 개의 권한과 777이면 충분합니다. 마지막 숫자는 시스템의 모든 사용자가 액세스 할 수 있도록합니다. 이것이 가장 쉬운 방법이지만 정확한 이유 때문에 가장 안전하지는 않습니다.

더 좋은 방법은

가장 먼저 이해해야 할 것은 Unix 권한어떻게 작동하는지 입니다. 이 링크에서 제공 한 답변을 이해하기 위해 권한을 숫자로 변환 할 수 있습니다.

  • 0 : ---
  • 1: --x
  • 2 : -w-
  • 삼: -wx
  • 4 : r--
  • 5 : r-x
  • 6 : rw-
  • 7 : rwx

A chmod 666는 다음으로 권한을 변경하는 것과 같습니다 rw-rw-rw.

다음으로 PHP 스크립트를 실행하는 사용자를 파악해야합니다. 일반적으로 웹 서버를 실행하는 사용자입니다. 다음은이를 수행하는 방법의 예입니다 (Apache를 웹 서버 이름으로 바꿀 수 있음).

스크립트를 실행하는 사용자와 사용자가 언급 한 파일의 소유자를 알면 적절한 권한을 설정하는 것은 사용자의 책임입니다. 시스템의 모든 사용자 에게 쓰기 액세스 (읽기조차 가능)를 제공 하는 것은 잠재적으로 치명적일 수 있습니다.


답변

Expression Engine은 일부 파일 및 디렉토리에 대한 읽기 + 쓰기 액세스가 필요한 다른 많은 PHP 웹 응용 프로그램과 같습니다. 예를 들어, EE는 config.php 및 database.php 파일에 대한 쓰기 액세스 권한과 파일 업로드 디렉토리에 대한 쓰기 액세스 권한이 필요합니다.

문서에 나와있는 것은 대부분의 서버가 PHP를 mod_php로 실행하고 (웹 서버의 권한으로 실행) 사용자가 자신의 사용자를 사용하여 FTP로 파일을 업로드 할 것입니다. 디렉토리에는 666 (모두 읽고 쓸 수있는) 권한과 777 (모두 읽고 쓸 수있는 권한)이 부여되어야합니다.

가장 안전한 방법은 아니지만 특히 호스팅 서비스를 사용하는 경우 가장 쉬운 방법입니다.

그러나 EE 명령어 상태에 따라 일부는 mod_php를 사용하지 않고 fastcgi, suphp 또는 다른 버전을 사용하기 때문에 호스팅 제공 업체에 문의하십시오. 이러한 서버는 PHP를 자신의 사용자로 실행하므로 업로드 한 모든 파일은 PHP와 EE 스크립트로 작성된 파일로 이미 읽고 쓸 수 있습니다. 이 경우 PHP가 액세스하는 파일과 디렉토리에는 600과 700의 액세스 권한이 부여되어야합니다. 웹 서버에서 직접 액세스하는 다른 파일 (PHP 런타임이 아님)에는 여전히 666 및 777 액세스가 필요합니다.


답변