오류 : laravel.log를 열 수 없습니다?


186

나는 laravel에서 아주 새롭고 사실 첫 프로젝트를 만들려고합니다. 어떤 이유로 든이 오류가 계속 발생합니다 (아직 코딩을 시작하지 않았습니다)

Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423

나는 이것이 권한과 관련이 있지만 chmod -R 775 storage전혀 도움이되지 않는다는 것을 읽었습니다 .

권한


chmod 명령을 실행할 때 올바른 디렉토리에 있습니까? chmod -R 755 / var / www / laravel / app / storage를 사용해보십시오. 또한 사용자와 그룹은 무엇으로 설정되어 있습니까? ls -al / var / www / laravel / app / storage 시도
Ryan

동일한 결과 (폴더의 권한을 표시하기 위해 원래 게시물을 업데이트했습니다)
FRR

: / 어떤 이유로 든 여전히 작동하지 않습니다. 전에는 언급하지 않았지만 방랑자를 사용하고 있습니다. 그래서 내 www 폴더는 VM에 있습니다 (apache, php 및 기타 모든 것이 실행되고 있습니다). 그것이 그와 관련이 있는지 확실하지 않지만 경우에 대비하여 언급 할 것이라고 생각했습니다. (작곡가를 사용하여 vm을 사용하여 프로젝트를 만들고 있습니다)
FRR

13
777을 제안하는 사람들은 Google에 다음 문구를 입력하십시오. "production db_password filetype : env inurl : com"
Tarasovych

1
SELINUX를 비활성화하면 나를 위해 일했습니다.
Prakash P

답변:


307

디렉토리를 777로 설정하지 마십시오 . 디렉토리 소유권을 변경해야합니다. 소유자로 로그인 한 현재 사용자와 웹 서버 사용자 (www-data, apache, ...)를 그룹으로 설정하십시오. 당신은 이것을 시도 할 수 있습니다 :

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache

그런 다음 디렉토리 권한을 설정하려면 다음을 시도하십시오.

chmod -R 775 storage
chmod -R 775 bootstrap/cache

최신 정보:

웹 서버 사용자 및 그룹은 웹 서버 및 OS에 따라 다릅니다. 웹 서버 사용자 및 그룹이 무엇인지 파악하려면 다음 명령을 사용하십시오. nginx 사용의 경우 :

ps aux|grep nginx|grep -v grep

아파치 사용 :

ps aux | egrep '(apache|httpd)'


4
감사! 간단히 말해 당신은 또한 할 수 있습니다 :sudo chown -R {your current user}:www-data storage bootstrap/cache
Ramesh Pareek

2
@RameshPareek 당신 말이 맞지만 좀 더 명확
해지기를

1
이것은 나를 위해 작동하지 않습니다. 나는 단지 얻는다 chown: www-data: illegal group name. 디렉토리를 777로 설정하는 것이 작동합니다.
Matt D

3
@MattD Mac의 아파치 그룹 _www이 이것을 시도 하는 것 같아요 sudo chgrp -R _www bootstrap/cache. 이 게시물을 살펴보고 도움이 될 것입니다 : stackoverflow.com/a/6419695/2125114
하미드 Parchami

3
이것은 정답입니다. 100 %는 sysadmins가 실제 문제를 해결하기 위해 모든 것에 대한 액세스를 허용해서는 안된다는 것에 동의합니다.
HyperionX

134

라이브 서버의 디렉토리에는 777을 사용하지 말고 자신의 컴퓨터에서는 775 이상을 수행해야합니다.

chmod -R 775 storage

방법

7 - Owner can write
7 - Group can write
5 - Others cannot write!

웹 서버가 Vagrant로 실행되지 않으면 웹 서버에 쓸 수 없으므로 두 가지 옵션이 있습니다.

chmod -R 777 storage

또는 그룹을 웹 서버 사용자로 변경하십시오 www-data.

chown -R vagrant:www-data storage

이미 괜찮 chown -R apache:apache laravelproject
았기

삼바 / vagrant를 통해 폴더를 마운트하는 데 문제가있었습니다 chown -R vagrant:www-data storage. 감사합니다.
Lewis

1
chmod -R 777 스토리지가 나를 위해 일했습니다. 나는 그룹을 바꾸려고 노력했지만 계속 www-data: illegal group name
Matt D

57

이 문제를 해결하려면 디렉토리의 소유권을 웹 서버가 사용하는 unix 사용자로 변경해야합니다.

  1. VM에서 나가
  2. 콘솔을 사용하여 동기화 된 폴더로 이동하십시오 (방랑자)
  3. sudo chown -R $ USER : www-data 스토리지
  4. chmod -R 775 저장

VM 사용자를 사용하여 VM 내에서 프로젝트를 만들었지 만 폴더는 실제 컴퓨터의 사용자에게 속합니다. 그래서 시도 할 때

이제 작동합니다.

이걸 알아내는 데 도움이 된 모든 사람들에게 감사합니다.

편집하다:

실제로, 그것은 여전히 ​​작동하지 않고, 여전히 "허가 거부"문제를 주었다.

여기 내가 한 일이 있습니다. Vagrantfile을 다음과 같이 수정했습니다.

config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]

내가 그랬어 그리고 난 그 루트입니다! 여전히 작동하지 않습니다 ... laravel 5 ... 로그 파일의 이름을 바꾸었고 laravel은 새 파일을 만들었습니다 ... 같은 오류
ied3vil

1
농가를 사용하고 있기 때문에 config.vm.synced_folder가 없습니다.이 문제를 어떻게 해결할 수 있습니까?
oleynikd

21
윌리 닐리 777을 사용해서는 안됩니다.
IIllIIll

안에 무엇이 있는지 정확히 알고있는 폴더에서 777을 사용할 때 문제가 발생하지 않습니다 (더미 샘플 프로젝트)
FRR

2
이것은 절대로 받아 들여지는 대답이되어서는 안됩니다. 끔찍하다. 절대 777을 설정하지 마십시오.
CGriffin

39

SELinux 일 수도 있습니다. (Centos, RedHat)

터미널에서 SElinux의 상태를 확인하십시오.

$ sestatus

상태가 활성화되면 SElinux를 비활성화하는 명령을 작성하십시오.

$ setenforce Permissive

또는이 명령을 실행할 수 있습니다

$ sudo setenforce 0


6
이것이 효과가있는 유일한 방법입니다. 어떻게하는지 설명해 주시겠습니까?
hack4mer

2
@ hack4mer에서 seLinux에 대한 자세한 정보를 읽을 수 있습니다. en.wikipedia.org/wiki/Security-Enhanced_Linux
Turan Zamanlı

내가 본 이상한 것들, 왜 6 시간 이상을 검색 한 후에 도대체 작동하는지
Muhamad Yulianto

1
나를 위해 일한 유일한 솔루션 .. 감사합니다. 그러나 서버가 다시 시작될 때마다 문제가 다시 발생합니다. 서버가 다시 시작된 경우에도 적용 방법을 알고 있습니까?
Juan Angel

1
@ JuanAngel 당신은 서비스를 영구적으로 비활성화해야합니다. vim / etc / sysconfig / selinux 편집기로 연 다음 SELinux =
enforcecing

32

storage및 의 권한을 조정해야합니다 bootstrap/cache.

  • cd 라 라벨 프로젝트에
  • sudo chmod -R 755 storage
  • sudo chmod -R 755 bootstrap/cache

755가 작동하지 않으면 777을 시도 할 수 있습니다. 777은 안전하지 않습니다!

웹 서버 설정 방법에 따라 권한을 더 구체적으로 지정할 수 있으며 웹 서버 사용자에게만 권한을 부여 할 수 있습니다. WEB SERVER NAME Laravel file permissions자세한 내용은 Google 을 참조하십시오.

글을 쓰는 시점에서 이것은 Laravel 5.4 용입니다.


14

추가 composer.json

"scripts": {
    "post-install-cmd": [
          "chgrp -R www-data storage bootstrap/cache",
          "chmod -R ug+rwx storage bootstrap/cache"
     ]
}

composer install


12

다음 명령을 실행하면 sudo시스템 시작에 따라 명령을 시작할 때 추가 할 수 있습니다 .

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 

1
777을 사용하지 마십시오. 777 권한을 사용하면 연결 권한이있는 모든 사용자에게 해당 권한이있는 파일 또는 디렉토리에 대한 전체 액세스 권한을 부여합니다. 악의를 포함하여 원하는 방식으로 변경할 수 있습니다. 많은 계정 해킹 사고는 777 권한에서 비롯됩니다.
Odyssee

8

Laravel 컨텍스트의 모든 Centos 7 사용자의 경우 Selinux를 비활성화 할 필요가 없으며 다음 명령을 실행하십시오.

yum install policycoreutils-python -y # might not be necessary, try the below first

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache

restorecon -Rv /var/www/html/ # this command is very important to, it's like a restart to apply the new rules

마지막으로, 호스트, IP 및 가상 호스트가 모두 원격 액세스에 올바른지 확인하십시오.

Selinux는 루트 사용자까지의 액세스를 제한하기 위해 적어도 일반 개요에서 필요한 것만 액세스 할 수 있습니다. 추가 보안이며 비활성화하지는 않습니다 .Selinux를 배울 수있는 많은 링크가 있습니다. 경우에도 필요하지 않습니다.


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다. - 검토에서
패트릭 Mevzek

링크는 매우 명시 적이며 이러한 메커니즘이 필요하지 않으며 Laravel SELinux 컨텍스트에 대한 섹션도 있습니다. 귀하의 의견은 단순한 경험 법칙보다 약간 더 많은 논리에 의해 뒷받침되어야한다고 생각합니다. 그동안 Selinux 비활성화와 같은 나쁜 관행을 따르지 않고 99 %의 문제를 해결할 수있는 답변을 다운 보트했습니다.
Daniel Santos

명시 적이든 아니든 문제가되지 않습니다. 이 사이트의 아이디어는 모든 관련 정보가 포함되어 있으므로 답을 읽으면 모든 정보를 얻을 수 있습니다. 외부 링크가 썩을 수 있으며 그에 대한 답은 쓸모가 없게됩니다. 이에 대한 설명은 stackoverflow.com/help/how-to-answer 의 도움말 센터에서 설명합니다 . "외부 리소스에 대한 링크를 권장하지만 링크 주위에 컨텍스트를 추가하여 동료 사용자가 그 내용과 이유를 알 수 있도록하십시오. . 항상 대상 사이트에 연결할 수 또는 영구적으로 오프라인이 경우, 중요한 링크의 대부분의 관련 부분을 인용. "
패트릭 Mevzek에게

귀하의 질문에 대한 검토가 완료되었습니다. 그리고 내가 인용 한 도움말 센터에 작성된 내용과 모순됩니다. 링크가 있고 설명이없는 모든 답변은 다운 투표 및 제거됩니다. 여기에 설명의 관련 부분을 제공하기 위해 답을 자유롭게 편집하십시오. 그리고 당신은 자신이 나쁘다고 생각하는 모든 답을 공감할 자유가 있습니다. 검토 링크에서 귀하의 답변을 닫을 것을 권장하는 데 혼자가 아님을 알 수 있습니다. 링크가 충분하지 않기 때문에 기술적 장점이 아닙니다.
Patrick Mevzek

설명 주셔서 감사합니다, 나는 그런 종류의 지침이 존재하는지 몰랐거나 등록 과정에서 리소스를 읽는 팁을 얻더라도 기억하지 않습니다. 당신이 말한 것은 사실 일 수 있습니다, 링크가 썩을 수는 있지만 아무런 노력없이 대답을 얻을 수 있습니다.
다니엘 산토스

6

cmd를 사용하는 경우

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache

GUI를 사용하는 경우

먼저 프로젝트로 이동하여 스토리지를 마우스 오른쪽 버튼으로 클릭하고 속성을 확인하고 권한 탭으로 이동하십시오.

여기에 이미지 설명을 입력하십시오

아래 코드를 사용하여 권한 변경

sudo chmod -R 777 storage

그러면 파일 속성이

여기에 이미지 설명을 입력하십시오

그런 다음 설정을 확인하고 laravel 명령을 실행하십시오 :)


yoouuuuuu 님
viniciussvl 18

5

Laravel에서는 웹 서버 사용자가 디렉토리에서 읽고 쓸 수 있도록 ACL storagecache디렉토리를 설정해야합니다 . 새 터미널을 열고 다음을 실행하십시오.

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/

참고 문헌 :

https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

https://linux.die.net/man/1/setfacl


5

늦었을 수도 있지만 디렉토리 권한을 변경하면 누군가에게 도움이 될 수 있습니다.

Laravel 프로젝트가 /var/www/html/디렉토리에 있다고 가정합니다 .

cd /var/www/html/

그런 다음 디렉토리 storage/및 권한을 변경하십시오 bootstrap/cache/.

sudo chmod -R gu+w storage/
sudo chmod -R guo+w storage/
sudo chmod -R gu+w bootstrap/cache/
sudo chmod -R guo+w bootstrap/cache/

2

이 솔루션은 laravel 5.5에만 해당됩니다

chmod -R -777 storage / logs 위 폴더 775 또는 765에 대한 chmod -R -777 스토리지 / 프레임 워크가 프로젝트에서 작동하지 않았습니다.

chmod -R 775 bootstrap/cache 

또한 프로젝트 폴더의 소유권은 다음과 같아야합니다 (현재 사용자) :( 웹 서버 사용자)



1

폴더 권한을 777로 변경하는 데 너무 열중하지 않았습니다.이 문제를 해결하는 방법은 다음과 같습니다.

먼저 로컬 컴퓨터에서 웹 서버를 실행하는 사용자를 변경했습니다 (nginx를 실행하지만 원칙은 모든 곳에서 적용됩니다).

$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload

그런 index.php다음 public/폴더 아래에 다른 파일을 만들어 내 php-fpm 버전을 실행중인 사람과 변경 위치를 확인하십시오.

<?php
phpinfo();
?>

페이지를 다시로드하면서 www-data사용자 (환경 섹션 아래) 임을 알았습니다 . 또한 PHP 7.1을 실행하고 있음을 알았습니다. 사용자를 계속 변경했습니다.

$> sudo vim /etc/php/7.0/fpm/pool.d/www.conf 
#Look for www-data or the following variables: user, group, listen.user, listen.group.

마지막으로 폴더에 다음 권한을 부여했습니다.

sudo chmod -R 775 ./storage/

이제 간단한 방법을 사용하여 폴더의 소유자임을 확인했습니다.

ls -al

서버 및 php-fpm 사용자를 자신으로 설정하고 폴더가 루트 등의 소유인 경우이 문제가 계속 발생합니다. sudo laravel new <project>루트로 작업 한 경우에 발생할 수 있습니다 . 이 경우 chown프로젝트에서 재귀 명령을 사용하여 user:group설정 을 변경하십시오 . 대부분의 경우 www-data서버와 PHP의 기본 설정입니다.이 경우 폴더가 아닌지 확인해야합니다www-data 도달 .

내 프로젝트는 내 홈 디렉토리에 설정되어 있습니다. Ubuntu 16.04 및 Laravel 5.5에서.


1

이 시도

  1. cd / var / www / html
  2. setenforce 0
  3. 서비스 httpd 재시작

이것이 무엇을하는지 설명해 주시겠습니까?
점점 이디 오틱

1
사용할 디렉토리를 변경할 필요는 setenforce없지만 어쨌든 하나의 권한 문제를 해결하기 위해 SELinux를 완전히 비활성화하는 것은 잘못되었습니다.
Patrick Mevzek

0

내 특별한 경우에는 구성 파일을 생성하고 bootstrap/cache/디렉토리에 캐시하여 다음 단계를 수행했습니다.

  1. 생성 된 모든 캐시 파일을 제거하십시오. rm bootstrap/cache/*.php
  2. 다음을 사용하여 새 laravel.log파일을 작성하고 파일에 대한 권한 업데이트를 적용하십시오.

    • chmod -R 775 storage

0

( 우분투에서 ) : 두 가지 간단한 단계로 해결할 수 있습니다.

$ sudo chmod -R 777 storage 

$ sudo service apache2 restart

3 단계 : 파일을 전세계에 공개했기 때문에 서버 및 / 또는 사용자를 해킹하십시오.
miken32

0

삭제 "/var/www/laravel/app/storage/logs/laravel.log"후 다시 시도하십시오.

rm storage/logs/laravel.log



-1

Linux를 비활성화하면이 오류를 해결할 수 있습니다.

활성화되어 있는지 확인

세 스타 투스

당신은 ..

setenforce 0


5
" Linux 를 비활성화하여 "? 그것은 너무 멀리 간다 :-)!
Patrick Mevzek

-1

이 오류의 경우 :

예외 처리기 오류 : 스트림 또는 파일 "/var/www/laravel/app/storage/logs/laravel.log"를 열 수 없습니다 : 스트림을 열지 못했습니다 : / var / www / laravel / bootstrap / compiled에서 권한이 거부되었습니다. .php : 8423

터미널에서이 명령을 사용하십시오.

sudo chmod -R 777 storage

2
생산 환경에 너무 나쁘다
Ariful Haque

-1

centos 7.6 Server에서이 명령으로 문제가 해결되었습니다.

chcon -R -t httpd_sys_content_t $SITE_PATH

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