本サイトはアフィリエイト広告(PR)を含みます。広告ポリシー

レンタルサーバーで秘密情報を置くファイル権限|wp-config.phpは600にできるか、.json・.envが読める危険

公開

本記事はアフィリエイト広告(PR)を含みます。社名のリンクには広告リンクを含む場合があります。成約の有無で本記事の数値と結論は変えません。

本記事は 2026-10-31 に当社が契約しているアカウントから測った値だけで書いています。

結論

  • PHP が契約アカウント本人のユーザーで動くサーバーなら、設定ファイルを 600(本人だけ読み書き)にしても PHP は動きます。
  • 拡張子が .php でないファイル(.json・.bak・.prev・.env・.log)は、公開ディレクトリに置くと Web から素のテキストで読めてしまいます。置き場所を変えるか、権限と設定で止めてください。
  • まず、自分のサーバーで PHP がどのユーザーで動いているかを確かめます。

1. PHP の実行ユーザーを確かめる

公開ディレクトリに、次の1行だけのファイルを置いて開き、確認したらすぐ削除してください。

<?php echo posix_geteuid(), ' / ', fileowner(__FILE__);

2つの数字が同じなら、PHP はファイルの所有者と同じユーザー(あなた自身)で動いています。この場合、設定ファイルは 600 にできます。違う場合(PHP が apache や www-data などの共通のユーザーで動いている)は、600 にすると PHP がファイルを読めなくなります。サーバー会社が案内する権限に従い、秘密情報は公開ディレクトリの外に置くことを優先してください。何も表示されないときは posix 関数が無効なので、サーバー会社の案内で確かめます。

2. 実測: 当社の6つのサーバー

当社が契約している XREA 3つと CORESERVER 3つで、2026-10-31(JST)に確かめました。6つとも、PHP は契約アカウント本人のユーザーで動く FastCGI で、ファイルを 600 にしても PHP は動きました。 公開ディレクトリは 705、ディレクトリを 711 にしても、PHP は動いて Web からのアクセスも通りました。

測定の注記: 自分の契約領域に読み取り専用のファイルを一度だけ置いて値を読み、すぐ削除しました。書き込み・攻撃・他の利用者の領域への操作はしていません。

3. .php でないファイルは素のテキストで読める

Web サーバーは、拡張子が PHP のファイルだけを PHP として実行します。それ以外は、サーバー側で拒否する設定になっていなければ、中身をそのまま返します。

ファイル 公開ディレクトリに置くと
config.php 実行される。何も出力しない作りなら、直接開いても中身は見えない
config.php.bak・config.php.prev テキストとして中身が見える
state.json・.env・debug.log テキストとして中身が見える
backup.sql・backup.zip ダウンロードできる

4. 当社の実例

当社が共用サーバーに置いていた中継用ファイルの一部で、状態ファイルとバックアップ用のファイルが、HTTP で読める状態になっていました。2026-10-31 に、ファイルを 600、ディレクトリを 711 にして、外から読めない(403)状態にしました。事前に試験ファイルで、PHP が本人のユーザーで動くことを確かめてから変更しています。ディレクトリ名・ファイルの用途・中身はここには書きません。

教訓は2つです。

  • バックアップや状態ファイルは、気づかないうちに公開ディレクトリに残ります。
  • 設定を変えたあとは、外から実際に開いて確かめてください。

5. 置き方のチェックリスト

  1. 公開ディレクトリの外に置く(置けるなら、これが最善)
  2. やむを得ず中に置くなら、拡張子を .php にして、直接開いても何も返さない作りにする
  3. ファイルは 600、ディレクトリは 711 に(本人 uid で動くサーバーの場合。上の確認を先に)
  4. バックアップ・ログ・.env を公開ディレクトリに残さない
  5. .htaccess が使えるサーバーなら、拒否を書く(下の例)
  6. 最後に、ブラウザで該当 URL を開いて 403 か 404 になることを確かめる

.htaccess の例(Apache 2.4 の書き方):

<FilesMatch "\.(json|bak|prev|env|log|sql)$">
  Require all denied
</FilesMatch>

6. WordPress の場合

  • wp-config.php は、PHP が本人のユーザーで動くサーバーなら 600 にできます。WordPress を公開ディレクトリの直下に入れている場合は、wp-config.php を1つ上のディレクトリに置くことも、WordPress は標準で許しています。
  • デバッグログ(debug.log)は、既定では wp-content/ の中に作られ、素のテキストで読めます。define('WP_DEBUG_LOG', '/公開ディレクトリの外のパス/debug.log'); のように外へ出してください。
  • プラグインが作る .log・.json・バックアップも、同じ観点で見ます。

まとめ

PHP の実行ユーザーを確かめる → 設定ファイルを 600 に → .php でないファイルを公開ディレクトリから外す、の3つです。VPS と共用サーバーで分かれ方がどう違うかは 隔離の違い、メモリや CPU の見え方は 共用サーバーのスペック表記 を参照してください。


本記事の数値は当社が契約しているアカウントでの実測で、測定日を本文に記しました。当社は計測用サーバーを契約しており、リンク先との契約でアフィリエイト収入を得る場合があります。