1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelをデプロイしたときに出るPermission denied

Last updated at Posted at 2024-11-20

Laravelで開発したことある人はよく見かける下記のエラー

error.log
The stream or file "/hogehoge/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied

起こる度に
あれ?どうやるんだっけ?と検索しており備忘録として残します。

まずはじめに

よくサイトでsudo chmod 777にすれば解決!
と見かけるのですが辞めましょう。
実際にエラーは解決されますが別の問題が発生します。
777は全てのユーザーに「読み取り」「書き込み」「実行」の権限を渡すということになります。
不正に侵入できたりファイルの編集や実行されてしまいます。

じゃどうしたらいいの?

問題ないであろう権限付与が下記になります。

今回はEC2にデプロイしWebサーバをapacheを使用した想定で書いています。
各々でnginx(もしくはwww-data)に変更してください。

bash
#該当のディレクトリに移動
$ cd /var/www/[プロジェクト名]

#任意のユーザーをApacheグループに追加
$ sudo usermod -a -G apache ec2-user(任意のユーザー)

#ディレクトリの所有者を任意のユーザー、グループをapacheに変更
$ sudo chown -R ec2-user(任意のユーザー):apache .
  • usermod
    ユーザーの情報を変更するコマンドです。

  • -a
    既存のグループを維持しながら、ユーザーを新しいグループに追加します。

  • -G apache
    該当ユーザーを apache グループに追加します。

  • ec2-user(任意のユーザー)
    対象のユーザー名です。
    現在ログインしているユーザーをグループに追加したい場合は
    $USERもしくは上記のように直接指定してください。

-a を省略すると、ユーザー(今回だとec2-user) の既存グループ情報が上書きされ、apache グループ以外のグループから外れてしまいます。

bash
# プロジェクトの権限を設定
$ sudo find . -type f -exec chmod 664 {} \;
$ sudo find . -type d -exec chmod 775 {} \;
  • find .
    現在のディレクトリ「.」以下の全てのファイルやディレクトリを検索します。

  • -type f
    検索結果をファイルのみに限定します。

  • -exec chmod 664 {} ;
    見つかったファイルに対して、chmod 664 コマンドを実行します。
    {} は、find コマンドで見つかった各ファイル名を指します。
    ; は、-exec オプションの終了を意味します。

  • 664
    所有者とグループは読み取りと書き込みが可能になり、その他のユーザーは読み取りのみが可能となります。

bash
# ストレージとキャッシュへの読み取りと書き込みの権限を設定
$ sudo chgrp -R apache storage bootstrap/cache
$ sudo chmod -R 770 storage bootstrap/cache
  • chgrp
    ファイルやディレクトリのグループ所有権を変更するコマンドです。
  • -R
    再帰的に操作を行い、指定したファイルやディレクトリが対象になります。
  • 770
    所有者とグループにフルのアクセスを許可しますが、その他のユーザーはアクセスできません。

コマンドまとめ

bash
#該当のディレクトリに移動
$ cd /var/www/[プロジェクト名]

#任意のユーザーをApacheグループに追加
$ sudo usermod -a -G apache ec2-user(任意のユーザー)

#ディレクトリの所有者を任意のユーザー、グループをapacheに変更
$ sudo chown -R ec2-user(任意のユーザー):apache .

# プロジェクトの権限を設定
$ sudo find . -type f -exec chmod 664 {} \;
$ sudo find . -type d -exec chmod 775 {} \;

# ストレージとキャッシュへの読み取りと書き込みの権限を設定
$ sudo chgrp -R apache storage bootstrap/cache
$ sudo chmod -R 770 storage bootstrap/cache

最後に

権限周りの知見が浅いので
「こうした方がいいよ!」「ここ間違っているよ!」等ありましたら
ご指摘いただけると助かります。

追記 2024/11/21

composer install前に上記を行うとPermission deniedが発生します。
後に行ってください。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?