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


13

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

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

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

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

원래 질문 :

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

어떻게해야합니까?


2
어떤 문제를 해결하려고하는지 잘 모르겠습니다. 파일이있는 디렉토리에 액세스 할 수 있고 파일에 실행 권한이 있으면 해당 권한으로 파일 및 디렉토리에 쓸 수 있습니다.
Karlson

위의 추가 정보를 추가했습니다.
oshirowanen

1
대부분의 유닉스 호스트의 경우 다음이 일반적이지만, PHP가 파일 (666) 및 폴더 (777)에 쓸 수 있도록보다 제한적인 권한을 사용할 수 있는지 호스트와 확인할 수 있습니다 .-혼수 상태가 있습니까? 그렇지 않으면이 문구는 의미가 없습니다. 더 높은 수준의 디렉토리가 제한되지 않으면 월드 쓰기 가능 파일 또는 디렉토리에 쓰는 데 문제가 없습니다.
Karlson

방금 문서에서 복사하여 붙여 넣었습니다. 게다가, 그 말의 의미를 이해하지 못해 질문을 게시 한 이유는 ...
oshirowanen

1
웹 파일과 관련하여 666 또는 777을 사용하도록 제안하는 설명서가 표시되면 적절한 이유가없는 한이를 무시해야합니다. 일반적으로 올바른 권한을 설정하는 방법을 알지 못하고 모든 사람이 파일에 대한 읽기 또는 쓰기 액세스 권한을 부여하고 포기한 사람이 작성한 것입니다.
jsbillings

답변:


18

기술 솔루션으로 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

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


1
'ps aux의 +1 | grep -E '[a] pache | [h] ttpd | [_] www | [w] ww-data | [n] ginx'| grep -v 루트 | 헤드 -1 | cut -d \ -f1 '
Amar Pratap

4

누가 파일 소유자인지에 관계없이 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를 웹 서버 이름으로 바꿀 수 있음).

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


0

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 액세스가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.