別の記事(パーマリンク、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″とする。
『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サーバープロセスによって書込み可能である必要がある。(今まで使用した事がなかったので、私は現状は付与していません。)
・.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サーバーのプロセスが書き込む事が出来ずエラーとなっているようです。
①ディレクトリの権限を変更
/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
その後、管理画面で手動でサイトマップを再構築すると、エラー表示がなくなりました。
- VPSサーバーでスナップショットを取得
- ~障害に備え、リカバリーポイントを作成。
- VPSサーバーにログインして、設定内容を確認
- ~グローバルIPアドレス確認、SSHキーを作成。
- VPSサーバーにSSHでログイン
- ~Tera Term、SSH、公開鍵認証方式
- yumコマンドで最新のパッケージにアップデート
- ~全パッケージを最新にアップデート
- Apacheのインストール
- ~yumコマンドでApacheインストール、iptablesでファイアウォールの設定
- PHPとMySQLをインストール
- ~yumコマンドでPHP、MySQLインストール
- WinSCPを使ってWordPressをアップロード
- ~WinSCPをクライアントPCにインストール、ファイルアップロード方法
- WordPressをインストール
- ~MySQLでWordPress用データベース作成、wp-config.phpファイルの設定
- CentOSのファイアウォール設定
- ~iptablesを使ってネットワークフィルタリング設定を一から行う
- OpenSSHの設定をよりセキュアに
- ~ログイン制限、ポート変更、認証方式
- ApacheでTCPのTraceメソッドを無効にする
- ~Apacheの設定変更、Telnetで動作確認
- ヘッダーにApacheバージョンが表示されないようにする
- ~Apacheの設定変更、Telnetで動作確認
- Apacheでディレクトリ内一覧表示を無効にする
- ~autoindex_moduleのロードを無効にする
- セキュリティを考慮し、MySQLの匿名ユーザーにパスワードを設定、または削除
- ~MySQLの匿名ユーザーにパスワードを設定、または削除
- PHPのバージョンが表示されないようにする
- ~php.iniの設定変更
- WordPressディレクトリのパーミッションをセキュアに
- ~WordPress用ディレクトリの所有グループ、ユーザー、パーミッション設定
- パーマリンク設定時のApache設定
- ~WordPressパーマリンクの設定、Apache .htaccessの設定
- WordPressテーマの選定
- ~テーマ追加の特徴フィルターの項目、テンプレートキング
- WordPressで画像のアップロード、サイズ調整、リンクを設定
- ~アップロード画像の画像サイズ、サムネイル、画像編集、リンク設定
- 更新可能なRPMパッケージのリストをメールで送信する
- ~yumコマンド、Bashスクリプト、Cron
- Linuxでディスク使用量が多いディレクトリを調べる方法(1)
- ~du --max-depth
- Linuxでディスク使用量が多いディレクトリを調べる方法(2)
- ~duコマンド、sortコマンド
- WordPressデータベースのバックアップとリストア
- ~コマンドラインでバックアップ、リストア
- WordPressのバージョンアップと旧バージョンへの戻し
- ~データベースとディレクトリのバックアップ、リストア
- BashスクリプトでWordPressデータベースを自動バックアップ
- ~MySQLデータベースをBash、Cronを使って自動バックアップ、メール通知
- BashスクリプトでDos攻撃など大量アクセスのログを検知
- ~Apacheアクセスログ、Dos、Cron、メール通知
テーマ作成
- ブートストラップ3を使って自作テーマ作成
- (1)全体概要
- (2)ブートストラップのサンプルを使ってindex.phpを作成
- (3)header.php、sidebar.php、footer.php、index.phpのテンプレートファイル作成
- (4)JavaScriptインクルードの設定
- (5)投稿本文表示用のテンプレートファイルを作成
- (6)単一投稿用(single.php)のテンプレートファイル作成
- (7)固定ページ用(page.php)のテンプレートファイル作成
- (8)検索結果表示用(search.php)のテンプレートファイル作成
- (9)アーカイブ表示用(archive.php)のテンプレートファイル作成
- (10)カテゴリー表示用(category.php)のテンプレートファイル作成
- (11)WordPressのメニュー画面でナビゲーションメニューを設定
- (12)サイトタイトル、キャッチフレーズを表示できるようにheader.phpを修正
- (13)カスタムヘッダー画像を使えるようにheader.phpを修正
- (14)404.phpテンプレートファイルを作成
- (15)記事タイトル部分のCSS設定
- (16)記事メタデータ部分のCSS設定
- (17)記事本文部分のCSS設定
- (18)前後のページへのリンクのCSS設定
- (19)前後の投稿へのリンクのCSS設定
- (20)コメント投稿フォーム、コメント表示部のCSS設定
- (21)ウィジェット部のCSS設定
- (22)アーカイブページのCSS設定
- (23)画面を左右にスライドさせるボタンのCSS設定
- ~Bootstrap3、自作テーマ作成、TwentyFourteen
- Bootstrapのフリーのテーマを使ってデザインを簡単にカスタマイズ
- ~Bootstrap3のスタイルをカスタマイズ
- 簡単なショートコードを作ってみる
- ~ショートコードの作り方
- ショートコードを使って関連記事のリンクを自動で挿入
- ~ショートコードの簡単なサンプル
- ショートコードを使ってディレクトリ内のファイル名を取得し、投稿内にリンクを挿入
- ~カスタムフィールド利用、PHPで日本語文字列検索などのコーディング
- WordPress投稿内でAngularJSを使用
- ~AngularJS、Bootstrap、アコーディオン
- Bootstrap3で作成したナビゲーションメニューをAngularJSに変更
- ~AngularJS、Bootstrap、自作テーマheder.php
- WordPressでAngularJSを使ったGoogleマップを使えるようにする
- ~AngularJSを使って投稿内にGoogleマップ
WordPresssショートコード
AJAX、AngularJSなどその他応用
- Ruby on Rails(他サイト)
- ~構築、CMS、Bootstrap、AngularJS
-
WordPress設定
- WordPressリファレンス、メモ
- パーマリンク設定時のApache設定
- WordPressテーマの選定
- WordPressで画像のアップロード、サイズ調整、リンクを設定
- マルチサイト化に伴う制約、デメリット
- WordPressのwp-config.phpでテーブルプレフィックスを変更
- WordPress投稿のリビジョン管理と自動保存
- WordPressディレクトリのパーミッションをセキュアに
- WordPressの認証用ユニークキーをセキュアに
- WordPressのバージョン情報を表示しないようにする
- WordPressでGoogleの2段階認証プロセスを使用する手順
- WordPressの更新情報・要件、各バージョンの新機能
- WordPressデータベースのバックアップとリストア
- WordPress用データベースバックアップをbashスクリプトとcronで定期実行
- WordPressのバージョンアップと旧バージョンへの戻し
- WordPressの記事をサイト間でコピーする方法
- WordPressのアップデート方法の種類、注意点
- WordPressのメンテナンスモード、カスタムメンテナンスページ
- WordPressでデバッグを有効にする方法
- WordPressの投稿内でJavaScriptを使う方法
- WordPressでJavaScriptを使って折りたたみリンクメニューを作成
- 自ブログ動作確認時にGoogleアドセンスの広告を表示しない
- WordPressでAngularJSを使ったGoogleマップを使えるようにする
- WordPressの投稿にAngularJSのディレクティブを記述する方法
セキュリティ
メンテナンス
その他、応用
「WordPressディレクトリのパーミッションをセキュアに」への1件のフィードバック