Web公開時のファイル権限の一括置換

投稿者: | 2025年8月25日

Webサイトを公開する際、静的ファイルをサーバーにアップロードして展開(解凍)する作業は頻繁に行われます。しかし、この際に思わぬ落とし穴にハマることがあります。それが、ファイルやディレクトリの権限設定です。

tar.gzなどのアーカイブファイルをローカルで作成し、サーバーにアップロードしてtar -zxvfコマンドなどで展開すると、ファイルやディレクトリの権限がWebサーバー(ApacheやNginxなど)がアクセスするのに適していない値になっていることが少なくありません。

このような不適切な権限のままでは、サイトが正しく表示されなかったり、最悪の場合、セキュリティリスクにさらされたりします。今回は、この問題を解決するためのLinuxコマンドについて、Amazon Linux 2023を例に詳しく解説します。

ページコンテンツ

なぜ不適切な権限になるのか?

アーカイブファイルを展開した際に、なぜファイル権限がWeb公開に適さない値になってしまうのでしょうか。その理由はいくつか考えられます。

ローカル環境とサーバー環境の差異

ローカルマシンでアーカイブを作成した際、その時点でのファイル権限がそのまま保存されます。多くの場合、ローカル環境では厳密な権限管理は行わないため、所有者しかアクセスできない設定(600など)になっていることがあります。このファイルをサーバーにアップロードし、Webサーバーのユーザー(通常はapachenginxなど)がアクセスしようとしても、権限がないためエラーになります。

セキュリティ上の問題

tarコマンドなどでアーカイブを作成する際、ユーザーの意図しないパーミッションが付与されることがあります。特に、777のように誰でも書き込み可能な権限は、悪意のある第三者による不正なファイルのアップロードや改ざんのリスクを高めます。

umask値の影響

Linuxシステムには、新しくファイルやディレクトリを作成したときにデフォルトで付与される権限を決定する**umask**(ユーザーマスク)という設定があります。ローカル環境とサーバー環境でこのumask値が異なる場合、同じ操作をしても異なるパーミッションのファイルが作成されることがあります。

Web公開用の静的ファイルには、以下のような権限が推奨されます。

  • ディレクトリ(フォルダ): 755
    • 所有者は読み書き実行可能
    • グループとその他は読み込みと実行のみ可能
  • ファイル: 644
    • 所有者は読み書き可能
    • グループとその他は読み込みのみ可能

この権限設定であれば、Webサーバーはディレクトリをたどり、ファイルを読み込むことができます。同時に、不要な書き込み権限を制限することでセキュリティを向上させることができます。

解決策:findコマンドで一括置換

では、不適切な権限になってしまったファイルを、一括で適切な値に変更するにはどうすれば良いでしょうか。ファイルが数個程度なら手動でchmodコマンドを使っても良いですが、数が多いと非効率的です。

こで活躍するのが、findコマンドです。findコマンドは、指定したディレクトリ以下のファイルやディレクトリを検索する強力なツールです。これとchmodコマンドを組み合わせることで、ディレクトリは755に、ファイルは644に一括で変更することができます。

ディレクトリの権限を一括変更するコマンド

find path/ -type d -exec chmod 755 {} +

このコマンドを分解して見てみましょう。

  • find path/: 検索を開始するパスを指定します。path/の部分は、Webサイトのルートディレクトリや、変更したいファイルがあるディレクトリのパスに置き換えてください。
  • -type d: 検索対象をディレクトリd)に限定します。
  • -exec chmod 755 {} +: 検索で見つかったすべてのディレクトリに対して、chmod 755コマンドを実行します。
    • {}: findコマンドが見つけたファイル(ここではディレクトリ)のパスが入ります。
    • +: findコマンドで見つかった複数のファイルをまとめて一度にchmodコマンドの引数として渡します。これにより、コマンドの実行回数を減らし、処理を高速化できます。もし+の代わりに;を使うと、見つかったファイルごとにchmodコマンドが実行されるため、処理が遅くなります。

ファイルの権限を一括変更するコマンド

find path/ -type f -exec chmod 644 {} +

こちらも同様に分解して解説します。

  • find path/: 検索を開始するパスを指定します。
  • -type f: 検索対象をファイルf)に限定します。
  • -exec chmod 644 {} +: 検索で見つかったすべてのファイルに対して、chmod 644コマンドを実行します。

これらのコマンドをWebサイトのルートディレクトリで実行することで、すべてのディレクトリが755に、すべてのファイルが644に一括で設定されます。

コマンド実行の前に確認すべきこと

これらのコマンドは非常に強力ですが、実行する前にいくつかの注意点があります。

path/を正しく指定する

コマンドを実行する際は、必ずカレントディレクトリ絶対パスを正しく指定してください。例えば、WordPressのテーマディレクトリ内であれば、find wp-content/themes/your-theme-name/ ...のようにパスを指定します。誤ったパスを指定すると、意図しないファイルまで権限が変更されてしまう可能性があります。

権限の意味を理解する

755644といった数値は、ユーザー、グループ、その他のユーザーに対する**読み込み(4)、書き込み(2)、実行(1)**の権限を表しています。これらの意味を理解しておくことで、状況に応じて適切な権限を設定できるようになります。

所有者とグループを確認する

chmodコマンドは権限を変更しますが、ファイルの所有者グループは変更しません。Webサーバーがファイルにアクセスできるようにするには、chownコマンドで所有者やグループも設定する必要があります。

# 所有者をapacheユーザー、グループをapacheグループに変更
chown -R apache:apache path/

Amazon Linux 2023における補足

Amazon Linux 2023は、Amazon Web Services(AWS)が提供する最新のLinuxディストリビューションです。多くのAWSユーザーがWebサーバーとして利用しています。

Amazon Linux 2023では、ApacheやNginxが一般的なWebサーバーとして使用されます。これらのWebサーバープロセスは、apachenginxといった特定のユーザーとグループで動作することが多いです。

したがって、Webサイトを公開する際は、今回紹介したchmodコマンドに加えて、chownコマンドでこれらのユーザー・グループに所有権を付与してあげることも重要です。これにより、Webサーバーがファイルの読み書き(※必要に応じて)を正しく行えるようになります。

まとめ

Webサイトの静的ファイルをサーバーにアップロードする際は、ファイル権限の問題に注意が必要です。tar.gzなどのアーカイブを展開した際に、意図しない権限になっていないか必ず確認しましょう。

もし不適切な権限になっていても、今回ご紹介したfindコマンドとchmodコマンドを組み合わせることで、ディレクトリは755に、ファイルは644に一括で設定し直すことができます。

対象

ディレクトリ

ファイル

コマンド

find path/ -type d -exec chmod 755 {} +

find path/ -type f -exec chmod 644 {} +

これらのコマンドを使いこなすことで、Webサイトのデプロイ作業をスムーズに行うことができ、不要なトラブルを未然に防ぐことができます。皆さんのWeb開発ライフに役立てば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)