bgles가 게시 한 솔루션은 처음에 권한을 올바르게 설정한다는 점에서 나에게 적합하지만 (두 번째 방법을 사용합니다) 여전히 Laravel에 잠재적 인 문제가 있습니다.
기본적으로 Apache는 644 권한을 가진 파일을 만듭니다. 그래서 그것은 거의 저장소 /에 있습니다. 따라서 스토리지 / 프레임 워크 / 뷰의 내용을 삭제 한 다음 Apache를 통해 페이지에 액세스하면 캐시 된 뷰가 다음과 같이 생성 된 것을 볼 수 있습니다.
-rw-r--r-- 1 www-data www-data 1005 Dec 6 09:40 969370d7664df9c5206b90cd7c2c79c2
"artisan serve"를 실행하고 다른 페이지에 액세스하면 CLI PHP가 Apache와 다르게 작동하기 때문에 다른 권한이 부여됩니다.
-rw-rw-r-- 1 user www-data 16191 Dec 6 09:48 2a1683fac0674d6f8b0b54cbc8579f8e
프로덕션에서는이 작업을 수행하지 않으므로 그 자체로는 큰 문제가되지 않습니다. 그러나 Apache가 사용자가 작성해야하는 파일을 작성하면 실패합니다. 그리고 이것은 할 수 있습니다 로그인 한 사용자와 장인을 사용하여 배포 할 때 캐시 파일, 캐시 된 뷰 및 로그에 적용될 있습니다. www.data:www-data 644 인 캐시 파일을 삭제하지 못하는 "artisan cache : clear"의 쉬운 예입니다.
www-data로 artisan 명령을 실행하여 부분적으로 완화 할 수 있으므로 다음과 같은 모든 작업을 수행하거나 스크립팅합니다.
sudo -u www-data php artisan cache:clear
또는 지루함을 피하고 이것을 .bash_aliases에 추가하십시오.
alias art='sudo -u www-data php artisan'
이것은 충분하며 보안에 영향을 미치지 않습니다. 그러나 개발 시스템에서 테스트 및 위생 스크립트를 실행하면 'sudo -u www-data'를 사용하여 phpunit을 실행하고 파일을 만들 수있는 빌드를 확인하는 모든 항목을 사용하도록 별칭을 설정하지 않는 한이 문제가 발생합니다.
해결책은 bgles 조언의 두 번째 부분을 따르고 / etc / apache2 / envvars에 다음을 추가하고 Apache를 다시 시작 (다시로드하지 않음)하는 것입니다.
umask 002
이것은 아파치가 기본적으로 664로 파일을 생성하도록합니다. 그 자체로 보안 상 위험 할 수 있습니다. 그러나 Laravel 환경에서 주로 논의되는 곳 (Homestead, Vagrant, Ubuntu)에서 웹 서버는 www-data 그룹의 www-data 사용자로 실행됩니다. 따라서 사용자가 임의로 www-data 그룹에 가입하도록 허용하지 않으면 추가 위험이 없습니다. 누군가가 웹 서버에서 벗어날 경우 어쨌든 www-data 액세스 수준을 가지므로 아무것도 손실되지 않습니다 (보안과 관련하여 가장 좋은 태도는 아니지만). 따라서 프로덕션 환경에서는 비교적 안전하며 단일 사용자 개발 시스템에서는 문제가되지 않습니다.
궁극적으로 사용자가 www-data 그룹에 있고 이러한 파일을 포함하는 모든 디렉토리는 g + s (파일은 항상 상위 디렉토리의 그룹 아래에 작성 됨)이므로 사용자 또는 www-data에 의해 작성된 것은 r / 다른 사람을 위해 w.
이것이 목표입니다.
편집하다
권한 설정에 대한 위의 접근 방식을 조사 할 때 여전히 충분 해 보이지만 몇 가지 조정이 도움이 될 수 있습니다.
기본적으로 디렉토리는 775이고 파일은 664이며 모든 파일에는 프레임 워크를 설치 한 사용자의 소유자와 그룹이 있습니다. 우리가 그 시점에서 시작한다고 가정 해 봅시다.
cd /var/www/projectroot
sudo chmod 750 ./
sudo chgrp www-data ./
우리가하는 첫 번째 일은 다른 사람의 액세스를 차단하고 그룹을 www-data로 만드는 것입니다. www-data의 소유자와 회원 만 디렉토리에 액세스 할 수 있습니다.
sudo chmod 2775 bootstrap/cache
sudo chgrp -R www-data bootstrap/cache
공식 Laravel 설치 가이드에서 제안한대로 웹 서버가 services.json 및 compile.php를 만들 수 있도록합니다. 그룹 고정 비트를 설정한다는 것은 생성자가 www-data 그룹을 소유한다는 것을 의미합니다.
find storage -type d -exec sudo chmod 2775 {} \;
find storage -type f -exec sudo chmod 664 {} \;
sudo chgrp -R www-data storage
캐시, 로그, 세션 및보기 파일을 만들 수 있도록 스토리지 폴더와 동일한 작업을 수행합니다. find는 디렉토리와 파일에 대해 디렉토리 권한을 명시 적으로 다르게 설정하기 위해 사용합니다. 하위 디렉토리가 없기 때문에 부트 스트랩 / 캐시 에서이 작업을 수행 할 필요가 없습니다.
phpunit 등의 링크를 재생성하기 위해 실행 가능한 플래그를 다시 적용하고 공급 업체 / *를 삭제하고 작성기 종속성을 다시 설치해야 할 수도 있습니다.
chmod +x .git/hooks/*
rm vendor/*
composer install -o
그게 다야. 위에서 설명한 Apache의 umask를 제외하고, 이는 www-data에서 전체 프로젝트 루트를 쓰기 가능하게하지 않고도 필요한 모든 것입니다. 이는 다른 솔루션에서 발생합니다. 따라서 www-data로 실행되는 침입자가 쓰기 액세스가 더 제한적이라는 점에서이 방법이 조금 더 안전합니다.
편집 종료
시스템 변경
이것은 php-fpm의 사용에도 적용되지만 다른 것들에도 적용됩니다.
표준 시스템 서비스를 재정의하고 override.conf 파일에 umask를 설정 한 다음 서비스를 다시 시작해야합니다.
sudo systemctl edit php7.0-fpm.service
Use:
[Service]
UMask=0002
Then:
sudo systemctl daemon-reload
sudo systemctl restart php7.0-fpm.service
777
모든 사람에 대한 모든 권한을 포함하기 때문에 너무 많은 자유 라고 생각 합니다.