[解決済み] Laravelのファイルパーミッションを設定する方法は?
質問
Apache Web Server を使用していますが、所有者が
_www:_www
. 例えば、Laravel 5の新しいプロジェクトを作成するとき、ファイルのパーミッションについて何がベストプラクティスなのかがわかりません。
Laravel5では
/storage
フォルダーを書き込み可能にする必要があります。私はこれを動作させるために様々なアプローチを見つけましたが、大抵の場合、それを
777
chmodを再帰的に実行します。でも、これがベストなアイデアでないことは分かっています。
公式ドキュメントによると
Laravelは、いくつかのパーミッションを設定する必要がある場合があります。
storage
とvendor
は、ウェブサーバーによる書き込みアクセスを必要とします。
ウェブサーバーがアクセスする必要があるということでしょうか?
storage
と
vendor
フォルダ自体もですか、それとも現在の内容だけですか?
私は、より良い方法は、以下のように変更することだと思います。
所有者
パーミッションの代わりに Laravelのすべてのファイルのパーミッションを再帰的に変更し
_www:_www
に変更すると、サイトが正しく動作するようになりました。
777
. 問題は、テキストエディタでファイルを保存するたびにパスワードを要求され、Finderで何かを変更しようとすると、例えばファイルをコピーしようとすると、同じことが起こるということです。
これらの問題を解決する正しい方法は何でしょうか?
-
変更
chmod
-
ファイルの所有者を変更する。
ウェブサーバを起動し、テキストエディタ(とFinder?
パスワードを要求する、あるいは
sudo
- ウェブサーバーのオーナーをOSのユーザーに合わせて変更する(私は知らない その結果を知っている)
- その他
解決方法は?
このディスカッションをご覧になっている方のために明白にしておきますが、もしあなたがフォルダのいずれかに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
これで、安全が確保され、ウェブサイトが動作し、ファイルを簡単に操作できるようになりました。
関連
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み] 警告:mysqli_fetch_array()は、パラメータ1がmysqli_resultであることを期待する、オブジェクトはで指定された。
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み] [Solved] Fatal error: 非オブジェクトのメンバ関数fetch_assoc()の呼び出し [重複]。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] YouTube APIからYouTubeビデオのサムネイルを取得する方法を教えてください。
-
[解決済み] Laravelでカスタムヘルパー関数を作成する方法
-
[解決済み】laravelで「有効なキャッシュパスを指定してください」エラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] 致命的なエラーです。mysqli_result 型のオブジェクトを使用できません [終了] 。
-
[解決済み] [Solved] Error: laravel.log could not be openedを修正する方法は?
-
[解決済み] Laravelのデイリーログが間違ったパーミッションで作成される