VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

WordPressディレクトリのパーミッションをセキュアに

別の記事(パーマリンクFTP接続情報)に記載したようにテーマやプラグインのインストール時に”FTP接続情報”が表示されしまう、.htaccessファイルの自動更新ができないといった事象を回避するために、WordPressディレクトリとファイルの所有者をWebサーバ実行ユーザである”apache”にする、という方法があります。
 
しかし、オンラインマニュアルを見るとセキュリティ的にあまり望ましくないようです。オンラインマニュアルの推奨設定に従って設定した例を示します。

※目次をクリックすると目次の下部にコンテンツが表示されます。

パーミッション設定の指針
下記参考情報を基にパーミッション設定の指針をまとめました。
『Hardening WordPress File Permissions』
『Changing File Permissions』
『Securing a Linux Web Server』
 
①WordPress用ディレクトリ、ファイルの所有者をどのユーザーにするか?
 
私の環境では、Webサーバーの実行ユーザーは”apache”ですが、ディレクトリ、ファイルの所有者を”apache”にすると冒頭で記載したような問題が回避できるメリットがあります。
 
しかし、WebサーバーのプロセスにWordPressディレクトリ内のすべてのディレクトリ、ファイルに対して書込み権限を与えてしまう事になるので、セキュリティ的に望ましくないようです。
 
公式サイトもWebサーバー実行ユーザーではなく、FTPなどファイル転送に使う通常のユーザーを所有者とすることを推奨しているようです。
 
従って、WordPress用ディレクトリ、ファイルの所有者は、”apache”などのWebサーバ実行ユーザーではなく、ファイル転送に使う通常のユーザーアカウントにします。
 
②WordPress用ディレクトリ、ファイルの所有グループはどのグループにするか?
 
.htaccessの自動更新や一部のプラグインなどでWebサーバーを実行しているユーザーの書込み権限が必要になる事があります。
 
その場合、一部のファイルやディレクトリに対してファイル所有者以外のユーザーにも書込み権限を付与する必要があります。
 
すべてのユーザーに書込み権限を付与するのはセキュリティ的に問題があるので、WordPressディレクトリ、ファイルの所有グループを”Webサーバ実行ユーザー”にし、所有グループのみに書込み権限を付与すれば、すべてのユーザーに対しては書込み権限を付与する必要はなくなります。
 
以上より、所有グループは”Webサーバ実行ユーザー(apahce)”にします。
 
③ファイル、ディレクトリのパーミッションについて
 
・ディレクトリのパーミッションは、基本は”750″とし、Webサーバー実行ユーザーの書込み権限が必要なディレクトリのみ”770″とする。
 
・ファイルのパーミッションは、実行権限は不要かと思いますので、基本は”640″とし、Webサーバー実行ユーザーの書込み権限が必要なファイルのみ”660″とする。
Webサーバー実行ユーザーの書込み権限が必要なディレクトリ、ファイル
参考サイトによると下記があります。
 
・.htaccessファイル
パーマリンク設定などでWordPressから自動編集させたい場合は必要。(自動編集させたいので私は付与しました。)
 
・/wp-content/
ユーザーアップロードファイル、テーマ、プラグインなど。一部のプラグインなどで書込み権限が必要になる事がある。(公式サイトに必要とあったので私は付与しました)
 
・/wp-content/themes/
テーマファイル。WordPress管理画面のテーマエディタを使用する場合は、Webサーバープロセスによって書込み可能である必要がある。(今まで使用した事がなかったので、私は現状は付与していません。)
設定変更手順
ここでは、WordPress用ディレクトリが”/var/www/html/wp”として手順を記載します。
 
①ディレクトリの権限を変更
 
/var/www/html/配下の全ディレクトリの権限を”750″にします。
 
find /var/www/html/ -type d -exec chmod 750 {} \;
 
②ファイルの権限を変更
 
/var/www/html/配下の全ファイルの権限を”640″にします。
 
find /var/www/html/ -type f -exec chmod 640 {} \;
 
③ファイル、ディレクトリの所有者、所有グループを変更
 
ファイル所有者をファイル転送ユーザー、グループをWebサーバー実行ユーザーに修正します。
 
chown -R ftpuse:apache /var/www/html/wp/
 
④.htaccessファイルの権限を変更
 
グループに書き込み権限を付与します。
 
事前確認
find /var/www/html/wp/ -name .htaccess -exec ls -al {} \;
権限変更
find /var/www/html/wp/ -name .htaccess -exec chmod 660 {} \;
事後確認
find /var/www/html/wp/ -name .htaccess -exec ls -al {} \;
 
⑤wp-contentディレクトリの権限変更
 
グループに書き込み権限を付与します。
 
find /var/www/html/wp/ -type d -name wp-content -exec ls -ald {} \;
find /var/www/html/wp/ -type d -name wp-content -exec chmod 770 {} \;
find /var/www/html/wp/ -type d -name wp-content -exec ls -ald {} \;
 
⑥不要なファイル、ディレクトリに書込み権限が付与されていないか確認
 
念のため④、⑤で設定した以外に書込み権限が付与されていないか確認します。
 
その他ユーザーに書込み権限が付与されていないか
# find /var/www/html -type d -perm -002
# find /var/www/html -type f -perm -002
 
所有グループに不要な書込み権限が付与されていないか
# find /var/www/html -type d -perm -020
/var/www/html/test/wp-content
# find /var/www/html -type f -perm -020
/var/www/html/wp/.htaccess
 
当面はこの設定にしておき、問題が発生したら必要に応じて権限を追加しようと思っています。
 
(2013年11月2日追記) サイトマップファイルに書込権限必要
 
管理画面(左サイドメニューの「設定」→「XML-Sitemap」)のサイトマップの画面を見ると、
“Result of the last build processes・・”の欄に赤字で記載されていました。
 There was a problem writing your sitemap file.
 There was a problem writing your zipped sitemap file.
Webサーバーのプロセスが書き込む事が出来ずエラーとなっているようです。
# ls -al sitemap.xml*
-rw-r----- 1 ftpusr apache 44464 Nov 2 07:28 sitemap.xml
-rw-r----- 1 ftpusr apache 5182 Nov 2 07:28 sitemap.xml.gz

ファイルの所有グループであるapacheユーザーに書込権限を付与しました。
 
# chmod 660 sitemap.xml
 
その後、管理画面で手動でサイトマップを再構築すると、エラー表示がなくなりました。

モバイルバージョンを終了