システムを本番サーバーへアップロードした際、「エラーが出て動かない」「画像がアップロードできない」といったトラブルの多くは、パーミッション(権限)や所有者の設定ミスが原因です。
とりあえずで 777 に設定するのは非常に危険です。この記事では、セキュリティを保ちつつシステムを正常に動かすための「正しい設定」を解説します。
サーバー運用の鉄則は、「必要最小限の権限しか与えない」ことです。基本的には以下の構成を目指します。
www-data や nginx など)まず、ファイルの「持ち主」をWebサーバーの実行ユーザーに変更します。これにより、Webサーバーがファイルを読み取れるようになります。
# 一般的なWebサーバーユーザーに変更する例(Ubuntu/Debian系の場合)
sudo chown -R www-data:www-data /var/www/html/project-name
注意: 自分のユーザー名(例:
ec2-userやsftp-user)が所有者でないと、FTPでのアップロードができなくなる場合があります。その場合は、Webサーバーのグループに自分を追加するなどの対応が必要です。
ファイルの種類によって、以下の数値を設定するのが一般的かつ安全です。
| 対象 | 推奨値 | 理由 |
|---|---|---|
| ディレクトリ | 755 |
所有者は全操作可能、他人は読み取りと移動のみ。 |
| ファイル | 644 |
所有者は読み書き可能、他人は読み取りのみ。 |
| 書き込みが必要なフォルダ | 775 / 700 |
ログ保存先や画像アップロード先など。 |
一つずつ設定するのは大変なので、find コマンドを使って一気に変更するのが効率的です。
# ディレクトリをすべて 755 に
find /var/www/html/project-name -type d -exec chmod 755 {} \;
# ファイルをすべて 644 に
find /var/www/html/project-name -type f -exec chmod 644 {} \;
Laravelなどのモダンなフレームワークでは、システムがログを書いたりキャッシュを生成したりするために、特定のディレクトリだけ書き込み権限を与える必要があります。
# Laravelの場合の例
chmod -R 775 storage
chmod -R 775 bootstrap/cache
もしこれでもエラーが出る場合は、所有者が www-data になっているかを再確認してください。777 にするのは最後の手段(かつ一時的)に留めましょう。
chmod 777 は、「そのサーバーにアクセスできる人なら誰でも、ファイルを書き換えたり、悪意のあるプログラムを実行したりできる」状態を指します。
といったリスクをゼロにするためにも、適切な権限管理は必須です。
本番環境の設定は、以下の3ステップをルーチンにしましょう。
755、ファイルを 644 にする775 にするこれだけで、あなたのシステムのセキュリティと安定性は格段に向上します。