1. ホーム
  2. php

[解決済み] Laravelのファイルパーミッションを設定する方法は?

2022-03-15 10:09:19

質問

Apache Web Server を使用していますが、所有者が _www:_www . 例えば、Laravel 5の新しいプロジェクトを作成するとき、ファイルのパーミッションについて何がベストプラクティスなのかがわかりません。

Laravel5では /storage フォルダーを書き込み可能にする必要があります。私はこれを動作させるために様々なアプローチを見つけましたが、大抵の場合、それを 777 chmodを再帰的に実行します。でも、これがベストなアイデアでないことは分かっています。

公式ドキュメントによると

Laravelは、いくつかのパーミッションを設定する必要がある場合があります。 storagevendor は、ウェブサーバーによる書き込みアクセスを必要とします。

ウェブサーバーがアクセスする必要があるということでしょうか? storagevendor フォルダ自体もですか、それとも現在の内容だけですか?

私は、より良い方法は、以下のように変更することだと思います。 所有者 パーミッションの代わりに Laravelのすべてのファイルのパーミッションを再帰的に変更し _www:_www に変更すると、サイトが正しく動作するようになりました。 777 . 問題は、テキストエディタでファイルを保存するたびにパスワードを要求され、Finderで何かを変更しようとすると、例えばファイルをコピーしようとすると、同じことが起こるということです。

これらの問題を解決する正しい方法は何でしょうか?

  1. 変更 chmod
  2. ファイルの所有者を変更する。 ウェブサーバを起動し、テキストエディタ(とFinder? パスワードを要求する、あるいは sudo
  3. ウェブサーバーのオーナーをOSのユーザーに合わせて変更する(私は知らない その結果を知っている)
  4. その他

解決方法は?

このディスカッションをご覧になっている方のために明白にしておきますが、もしあなたがフォルダのいずれかに777のパーミッションを与えた場合、あなたは誰でもそのディレクトリ内の任意のファイルを読み、書き、実行することを許可したことになります...これはつまり、誰でも(全世界のあらゆるハッカーや悪意のある人)任意のファイル、ウイルスまたはその他のファイルをアップロードし、そのファイルを実行する権限を与えたことになるのです......。

<ブロッククオート

フォルダのパーミッションを777に設定している場合、そのフォルダは そのディレクトリを見つけることができれば、誰でもサーバーを利用することができます。 十分理解できましたか?)

所有権とパーミッションの設定には、基本的に2つの方法があります。自分自身に所有権を与えるか、ウェブサーバーを全ファイルの所有者にするかです。

ウェブサーバーを所有者にする(ほとんどの人がやっている方法であり、Laravelのドキュメントの方法でもある)。

www-data (他の可能性もあります) をウェブサーバのユーザと仮定します。

sudo chown -R www-data:www-data /path/to/your/laravel/root/directory

FTP クライアントはウェブサーバーではなく、あなたとしてログインするため、あなたのユーザーをウェブサーバーユーザーグループに追加してください。

sudo usermod -a -G www-data ubuntu

もちろん、これはあなたのウェブサーバーがwww-data(Homesteadのデフォルト)として実行されており、あなたのユーザーがubuntu(Homesteadを使用している場合はvagrantです)であると仮定しています。

そして、すべてのディレクトリを755に、ファイルを644に設定する...。 ファイルのパーミッションの設定

sudo find /path/to/your/laravel/root/directory -type f -exec chmod 644 {}. \;    

ディレクトリのパーミッションの設定

sudo find /path/to/your/laravel/root/directory -type d -exec chmod 755 {}. \;

あなたのユーザーをオーナーに

私はすべてのディレクトリとファイルを所有することを好みます(その方がすべての作業がずっと楽になります)ので、laravelのルートディレクトリに移動します。

cd /var/www/html/laravel >> assuming this is your current root directory

sudo chown -R $USER:www-data .

そして、自分とウェブサーバーの両方にパーミッションを与えます。

sudo find . -type f -exec chmod 664 {} . \;   
sudo find . -type d -exec chmod 775 {}. \;

次に、ウェブサーバーにストレージとキャッシュの読み取りと書き込みの権限を与えます。

どのように設定するにしても、ストレージ、キャッシュ、その他ウェブサーバーがアップロードまたは書き込みを行う必要があるディレクトリについて、ウェブサーバーに読み取り権限と書き込み権限を与える必要があります(あなたの状況に応じて)ので、上記のbashyからのコマンドを実行してください。

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

これで、安全が確保され、ウェブサイトが動作し、ファイルを簡単に操作できるようになりました。