エラーの修正方法:laravel.logを開けませんでしたか?


184

私は実際には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 LaB

同じ結果(元の投稿を更新してフォルダーのアクセス許可を表示しました)
FRR

:/何らかの理由でまだ動作しません。以前は触れなかったが、浮浪者を使っている。したがって、私のwwwフォルダーはVM(apache、php、その他すべてが実行されている)にあります。それが何かと関係があるかどうかはわかりませんが、念のため言っておきたいと思います。(私はcomposerを使用してvmでプロジェクトを作成しています)
FRR

13
777を提案する人は、次のフレーズをググってみてください: "production db_password filetype:env inurl:com"
Tarasovych

1
SELINUXを無効にするとうまくいきました。
Prakash P

回答:


306

ディレクトリを777に設定しないでください。ディレクトリの所有権を変更する必要があります。そのため、所有者としてログインしている現在のユーザーと、グループとしてWebサーバーユーザー(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によって異なります。Webサーバーのユーザーとグループを特定するには、次のコマンドを使用します。nginxを使用する場合:

ps aux|grep nginx|grep -v grep

Apacheを使用する場合:

ps aux | egrep '(apache|httpd)'


4
ありがとう!要するに、あなたも行うことができます:sudo chown -R {your current user}:www-data storage bootstrap/cache
ラメシュPareek

2
@RameshPareekその通りですが、もっと明確にしたかっただけです;)
Hamid Parchami

1
これは私にはうまくいきません。ただchown: www-data: illegal group name。ディレクトリを777に設定するだけで機能します
Matt D

3
@MattD Macのapacheグループは_wwwこれを試してみていると思いsudo chgrp -R _www bootstrap/cacheます。この投稿を
ご覧

3
これが選択された答えである必要があります。システム管理者は、実際の問題の解決を避けるために、すべてへのアクセスを許可するだけではいけないことに100%同意します。
HyperionX

134

ライブサーバーのディレクトリには777を使用しないでください。自分のマシンでは、775を超えることが必要になる場合があります。

chmod -R 775 storage

手段

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

WebサーバーがVagrantとして実行されていない場合は、それに書き込むことができないため、2つのオプションがあります。

chmod -R 777 storage

または、グループをWebサーバーユーザーに変更しますwww-data

chown -R vagrant:www-data storage

:それはまだ大丈夫設定されたとして、それが必要しかし、Fedoraの20に、私の場合はchmodを必要としなかったchown -R apache:apache laravelproject
misterjaytee

samba / vagrantを介してフォルダをマウントする際に問題が発生chown -R vagrant:www-data storageしていました- 私にそれをしてくれてありがとう
ルイス

1
chmod -R 777 storageがうまくいきました。私はグループを変えようとしました、しかし私は続けましたwww-data: illegal group name
マットD

57

この問題を修正するには、ディレクトリの所有権をWebサーバーが使用するUNIXユーザーに変更する必要があります。

  1. VMから出る
  2. コンソールを使用して、同期フォルダーに移動します(vagrant)
  3. sudo chown -R $ USER:www-data storage
  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 2015

21
777 allyy nillyを使うべきではありません。
IIllIIll

中身を正確に知っているフォルダーで777を使用しても問題はありません(ダミーのサンプルプロジェクト)
FRR

2
これは絶対に受け入れられる答えではありません。それはひどいです。777を設定しないでください。
CGriffin

39

SELinuxの場合もあります。(Centos、RedHat)

端末のSElinuxのステータスを確認します。

$ sestatus

ステータスが有効な場合、SElinuxを無効にするコマンドを書き込みます

$ setenforce Permissive

または、このコマンドを実行することができます

$ sudo setenforce 0


6
これが機能した唯一のものです、それが何をするのか説明していただけますか?
hack4mer 2018年

2
@ hack4mer seLinuxに関する詳細情報を読むことができます。en.wikipedia.org/wiki/Security-Enhanced_Linux
TuranZamanlı2018年

私が今まで見たことのある奇妙なもの、なぜ6時間以上検索した後でそれが地獄に働くのか
Muhamad Yulianto

1
私のために働いた唯一の解決策..ありがとう しかし、サーバーが再起動するたびに問題が再発します。サーバーが再起動されても問題を適用する方法を知っていますか?
ファンエンジェル

1
@JuanAngelあなたは永久にサービスを無効にする必要があります。エディターvim / etc / sysconfig / selinuxで開き、ディレクティブSELinux =
enforcing

31

storageおよびの権限を調整する必要がありbootstrap/cacheます。

  • cd Laravelプロジェクトに。
  • sudo chmod -R 755 storage
  • sudo chmod -R 755 bootstrap/cache

755が機能しない場合は、777を試すことができます。777は安全ではありません!

Webサーバーの設定方法によっては、アクセス許可をより具体的にして、Webサーバーユーザーにのみ許可することができます。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の権限に起因しています。
オデッセイ18/07/31

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はrootユーザーにもアクセスを制限することを目的としているため、少なくともジェネラリストの概要では、必要なものだけがアクセスされる可能性があります。これは追加のセキュリティであり、無効にすることはお勧めしません。Selinuxを学ぶためのリンクがたくさんありますが、これには場合でも必要ありません。


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- レビューから
Patrick Mevzek

リンクは非常に明示的であり、そのようなメカニズムは必要ありません。LaravelSELinuxコンテキスト専用のセクションさえあります。あなたの意見は、単純な経験則よりも少し多くの論理に裏付けされているべきだと思います。それまでの間、Selinuxを無効にするなどの悪い習慣を守ることなく、99%が問題を解決する可能性が最も高い回答に反対票を投じました。
ダニエルサントス

明示的であるかどうかは問題ではありません。このサイトのアイデアは、関連するすべての情報が含まれているということです。そのため、回答を読むことで、すべてを得ることができます。外部リンクが腐敗する可能性があり、その答えは価値がなくなります。これについては、ヘルプセンターのstackoverflow.com/help/how-to-answerで説明されています。「外部リソースへのリンクが推奨されますが、リンクの前後にコンテキストを追加して、他のユーザーがそれが何であるか、なぜそこにあるのかを理解できるようにしてください。 。ターゲットサイトに到達できない、または永久にオフラインになる場合に備えて、重要なリンクの最も関連性の高い部分を常に引用してください。
Patrick Mevzek

あなたの質問はレビュー用にフラグが付けられました、それがすべてです。そして、私が引用したヘルプセンターの記述と矛盾しています。リンクのみで説明のないすべての回答は反対票が投じられ、削除されます。ここで説明の関連部分を提供するために、回答を自由に編集してください。そして、あなたは自分が悪いと思うすべての答えに反対票を投じる自由があります。レビューリンクから、回答を非公開にすることを推奨したのは私だけではないことがわかります。リンクが十分ではないからといって、技術的なメリットではありません。
Patrick Mevzek

説明のおかげで、私はそのような種類のガイドラインが存在することを知りませんでした、または登録プロセスでリソースを読むためのヒントを得ても、それを覚えていません。あなたが言ったことは本当かもしれません、リンクは腐敗するかもしれませんが、関係なく、私はそれを編集します、努力なしで答えに達することができます。
Daniel Santos、

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

5

Laravelでは、Webサーバーのユーザーがディレクトリで読み取り/書き込みができるように、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に固有です

いくつかのフォルダーへのアクセス許可を変更する必要があります:上記のフォルダー775または765のchmod -R -777 storage / logs chmod -R -777 storage / frameworkは、私のプロジェクトでは機能しませんでした

chmod -R 775 bootstrap/cache 

また、プロジェクトフォルダーの所有権は次のようになります(現在のユーザー):( Webサーバーユーザー)



1

フォルダーのアクセス許可を777に変更することにあまり熱心ではありませんでした。この問題を解決する方法を以下に示します。

まず、ローカルマシンでWebサーバーを実行しているユーザーを変更しました(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のユーザーを自分に設定し、フォルダーがたとえばrootによって所有されている場合、この問題が発生し続けます。これは、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再起動

これが何をするのか説明してもらえますか?
2018

1
使用するディレクトリを変更する必要はありませんsetenforceが、いずれの場合も、1つの権限の問題を修正するためだけにSELinuxを完全に無効にするのは誤りです。
Patrick Mevzek 2018

0

私の特定のケースでは、設定ファイルを生成してbootstrap/cache/ディレクトリにキャッシュしたので、私の手順は次のとおりです。

  1. 生成されたすべてのキャッシュファイルを削除します。 rm bootstrap/cache/*.php
  2. 新しいlaravel.logファイルを作成し、次を使用してファイルの権限の更新を適用します。

    • chmod -R 775 storage

0

Ubuntu):2つの簡単なステップで解決できます:

$ 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
本番
環境

-1

CentOS 7.6サーバーでのこのコマンドの問題を修正しました

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.