파일 및 폴더에 PHP 쓰기 권한 부여

파일 및 폴더에 PHP 쓰기 권한 부여

더 명확하게 하기 위해 업데이트되었습니다.

~에 따르면http://expressionengine.com/user_guide/installation/installation.html, 그것은 말한다 :

다음은 대부분의 Unix 호스트에 일반적이지만 호스트에 문의하여 더 제한적인 권한을 사용할 수 있는지 확인할 수 있습니다.PHP가 파일(666) 및 폴더(777)에 쓸 수 있도록 허용. Windows 서버에서는 다음 사항이 적용되지 않지만 ExpressionEngine에서 파일과 폴더를 쓸 수 있는지 확인해야 합니다. 이에 대해서는 집주인에게 문의해야 할 수도 있습니다.

이것이 무엇을 의미하는지 잘 모르겠습니다. 특정 파일과 폴더를 각각 666과 777로 변경할 수 있습니다. 저는 멍청하지만 위의 내용은 PHP에서도 이 작업을 수행할 수 있도록 허용해야 하는 것처럼 들리나요?

원래 질문:

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

어떻게 해야 하나요?

답변1

라무와 MV의 답변을 기술적인 솔루션으로 완성하겠습니다. 다음은 모두 UNIX 계열 시스템에만 적용됩니다.

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

웹 서버 사용자 이름 찾기

먼저, 웹 서버가 실행되는 사용자 이름을 알아야 합니다. Apache를 사용하는 경우 apache또는 등이 될 수 있습니다 httpd. www-data대부분의 데비안 계열 시스템에서 Apache는 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

666 또는 777(잘못된 문서/자습서에서 이런 종류의 문제에 대해 선호되는 솔루션)을 수행하면 chmod마술처럼 작동하게 되지만 안전하지는 않습니다. 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은 귀하를 나타내고, 4는 www-data를 나타내고, 0은 기타를 나타내며 -rw-r----로 번역됨), 660으로 설정하세요(6은 귀하를 나타내고, 6은 www-data를 나타내고, 0은 기타를 나타내며 -rw-rw----로 번역됨). 오래되었지만 우아한 메커니즘인 파일 모드에 대해 자세히 알아보려면 rahmu의 답변을 참조하세요.

암호를 조작할 필요가 없도록 하려면 chmod다음 구문을 사용할 수도 있습니다.

chmod -R g+rw your/folder/

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

90%의 경우 이것으로 충분합니다.


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

때로는 첫 번째 솔루션만으로는 충분하지 않습니다. 나는 예를 들 것이다심포니 프레임대량의 데이터를 기록하고 캐시합니다. 따라서 해당 폴더에 대한 쓰기 권한이 필요합니다.

CLI에서 Symfony 콘솔(내 사용자 계정)과 웹(웹 서버 사용자)을 나란히 사용하는 경우 chmod/ 메소드만으로는 충분하지 않을 수 있습니다. chownSymfony가 권한을 계속 변경하기 때문에 많은 문제가 발생할 수 있습니다.

이 예에서는 많은 UNIX 시스템에서 권한을 관리하는 고급 방법인 ACL(액세스 제어 목록)을 사용합니다.

다음은 공식 Symfony 문서에서 제공하는 명령입니다(필요에 따라 app/cache변경 해주세요.app/logs):

지원되는 시스템 chmod +a(예: Debian/Ubuntu가 아닌 시스템)

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명령이 작동하는지 확인해 보세요.

이 명령을 사용할 수 없는 경우그리고Ubuntu 14.04+를 사용하는 경우 도구만 설치하면 됩니다.

sudo apt install acl

그렇지 않으면 파티션 마운트 방법을 변경해야 할 수 있으므로 운영 체제 설명서를 따르십시오(우분투 문서는 여기에 있습니다).

우리는:

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

저는 이 방법으로 어떤 문제나 만족, 환불을 받은 적이 없습니다.

답변2

파일 소유자에 관계없이 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를 웹 서버 이름으로 바꿀 수 있습니다.)

스크립트를 실행하는 사용자와 언급한 파일의 소유자를 알고 나면 적절한 권한을 설정할 수 있습니다. 쓰기 권한(또는 읽기 권한)을 부여하세요.모든시스템의 사용자는 재앙적인 결과를 초래할 수 있습니다.

답변3

다른 많은 PHP 웹 응용 프로그램과 마찬가지로 Expression Engine에는 특정 파일 및 디렉터리에 대한 읽기/쓰기 액세스가 필요합니다. 예를 들어 EE에는 config.php 및 Database.php 파일에 대한 쓰기 액세스 권한과 파일 업로드 디렉터리에 대한 쓰기 액세스 권한이 필요합니다.

문서에 따르면 대부분의 서버는 PHP를 mod_php로 실행하고(따라서 웹 서버의 권한으로 실행) 자신의 사용자를 사용하여 FTP(또는 유사한)를 통해 파일을 업로드할 수 있으므로 이러한 파일과 디렉터리는 다음과 같아야 합니다. 권한 666(모든 사람이 읽고 쓸 수 있음)과 777(모든 사람이 읽고 쓰고 찾아볼 수 있음) 권한을 부여했습니다.

이것이 가장 안전한 방법은 아니지만 확실히 가장 쉬운 방법입니다. 특히 호스팅 서비스를 사용하는 경우에는 더욱 그렇습니다.

그러나 EE 지침에 따르면 일부는 mod_php를 사용하지 않고 fastcgi, suphp 또는 기타 버전을 사용하므로 호스팅 제공업체에 문의하세요. 이러한 서버는 자신의 사용자로 PHP를 실행하므로 업로드하는 모든 파일은 EE 스크립트에서 생성된 모든 파일뿐만 아니라 PHP에서 읽고 쓸 수 있습니다. 이 경우 PHP가 액세스하는 파일 및 디렉터리에 대해 600 및 700 액세스 권한을 부여해야 합니다. (PHP 런타임이 아닌) 웹 서버에서 직접 액세스하는 다른 파일에는 여전히 666 및 777 액세스가 필요합니다.

관련 정보