広告

検索

RSS RSSフィード

カレンダー

2009年4月
« 3月   5月 »
 12345
6789101112
13141516171819
20212223242526
27282930  

カテゴリー

最新のコメント

リンク

自宅サーバー再構築 その17 WordPressのセキュリティ対策

投稿者:yasu 更新日時:2009年4月4日 23時47分00秒
カテゴリCentOS, Linux, WordPress, 自宅サーバー

今回はこちらのサイトを参考にWordPressのセキュリティ対策を実施していきます。

MySQLのwordpress用ユーザ権限修正

ログイン後、rootユーザにスイッチします
[centos@centos ~]$ su -
パスワード: rootユーザーのパスワード

MySQLにログインします
[root@centos ~]# mysql -u root -p
Enter password: rootユーザのパスワードを入力
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 25
Server version: x.x.xx Source distribution

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

wordpress用ユーザの権限を確認します
mysql> show grants for wordpress@localhost;
+-----------------------------------------------------------------------------------------+
| Grants for wordpress@localhost |
+-----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wordpress'@'localhost' IDENTIFIED BY PASSWORD 'xxxxxxxxxxxxxxxx' |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpress'@'localhost' |
+-----------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

[ALL PRIVILEGES](すべての)権限が付与されているので、ブログを書くのに必要なSELECT、INSERT、UPDATE、DELETEのみに変更します
mysql> revoke ALL PRIVILEGES on wordpress.* from wordpress@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> grant SELECT, INSERT, UPDATE, DELETE on wordpress.* to wordpress@localhost;
Query OK, 0 rows affected (0.04 sec)

mysql> show grants for wordpress@localhost;
+-----------------------------------------------------------------------------------------+
| Grants for wordpress@localhost |
+-----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wordpress'@'localhost' IDENTIFIED BY PASSWORD 'xxxxxxxxxxxxxxxx' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `wordpress`.* TO 'wordpress'@'localhost' |
+-----------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> exit
Bye

wp-config.phpの設定変更

wp-config.phpに以下2つの設定を追加・変更します。
 1.管理画面アクセス時にはhttpプロトコルでアクセスしても自動でhttpsプロトコルに変更
 2.ユーザの Cookie に格納される情報をより強固な暗号化によって守る為の設定値をランダムな文字列に変更してセキュリティを向上
2.の設定については認証用ユニークキー自動生成のサイト利用するとランダムな文字列を自動生成してくれるので、それをwp-config.phpに張り付けます。

[root@centos ~]# vi /var/www/html/blog/wp-config.php
viエディタが起動するのでWordPress設定ファイルを修正します

<?php
/**
* WordPress 基本設定
*
* このファイルは、MySQL、テーブル接頭辞、秘密鍵、言語、ABSPATH の設定を含みます。
* より詳しい情報は {@link http://wpdocs.sourceforge.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86
* wp-config.php の編集} を参照してください。MySQL の設定情報はホスティング先より入手できます。
*
* このファイルはインストール時に wp-config.php 作成ウィザードが利用します。
* ウィザードを介さず、このファイルを "wp-config.php" という名前でコピーして直接編集し値を
* 入力しても構いません。
*
* @package WordPress
*/

// 注意:
// Windows の "メモ帳" でこのファイルを編集しないでください !
// 問題なく使えるテキストエディタ
// (http://wpdocs.sourceforge.jp/Codex:%E8%AB%87%E8%A9%B1%E5%AE%A4 参照)
// を使用し必ず UTF-8 の BOM なし (UTF-8N) で保存してください。

// ** MySQL 設定 - こちらの情報はホスティング先から入手してください。 ** //
/** WordPress のデータベース名 */
define('DB_NAME', 'xxxxx');

/** MySQL のユーザー名 */
define('DB_USER', 'xxxxx');

/** MySQL のパスワード */
define('DB_PASSWORD', 'xxxxx');

/** MySQL のホスト名 (ほとんどの場合変更する必要はありません。) */
define('DB_HOST', 'localhost');

/** データベーステーブルのキャラクターセット (ほとんどの場合変更する必要はありません。) */
define('DB_CHARSET', 'utf8');

/** データベースの照合順序 (ほとんどの場合変更する必要はありません。) */
define('DB_COLLATE', '');

管理画面アクセス時にはhttpプロトコルでアクセスしても自動でhttpsプロトコルに変更
define('FORCE_SSL_ADMIN', true);

ユーザのCookieに保存する情報を暗号化するためのキーを設定してセキュリティを向上
/**#@+
* 認証用ユニークキー
*
* それぞれを異なるユニーク (一意) な文字列に変更してください。
* {@link https://api.wordpress.org/secret-key/1.1/ WordPress.org の秘密鍵サービス}
* で自動生成することもできます。
*
* @since 2.6.0
*/
define('AUTH_KEY', '+0?s|ld0K4]4|8mWdR!44LEJjP}`q2e} e+Sx5wP4ymY8n4d?vAJ~8WVwc-V+FXB');
define('SECURE_AUTH_KEY', '2C+$H_8.QbP>6)O1==,K>t/=mcuE@9v:f=ZRXLd5Z&hFGtRHN+]D)KI|P{2+@X|+');
define('LOGGED_IN_KEY', 'PFd[(.E|Qk#* VUs|J9N?o18$i)c>/}&;nQXs9b{%0w&4KP*^9+BnL.dqgexsc15');
define('NONCE_KEY', '%KDc<wf&~?YV5r&/|=KcVB#y/+p8OtS6l)}@a5rMH(/dB*ZTQ-<q<FGwF;VSyHF/');
/**#@-*/

/**
* WordPress データベーステーブルの接頭辞
*
* それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
* インストールすることができます。半角英数字と下線のみを使用してください。
*/
$table_prefix = 'xxxxx_';

/**
* ローカル言語 - このパッケージでは初期値として 'ja' (日本語 UTF-8) が設定されています。
*
* WordPress のローカル言語を設定します。設定した言語に対応する MO ファイルが
* wp-content/languages にインストールされている必要があります。例えば de.mo を
* wp-content/languages にインストールし WPLANG を 'de' に設定することでドイツ語がサポートされます。
*/
define ('WPLANG', 'ja');

// 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。

/** WordPress absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
?>

内容を保存しviエディタを終了します

WordPressデフォルト管理者「Admin」削除

WordPressをインストールすると「Admin」という管理者ユーザが自動作成されますので無差別ログイン施行されないように「Admin」を削除します。
管理者ユーザ「Admin」でログインした状態では削除できませんので、別の管理者ユーザを作成後、別の管理者ユーザでログインしなおしてから管理者ユーザ「Admin」を削除します。
なお別の管理者ユーザのパスワードは複雑なものにします。

WordPress用ディレクトリのファイル一覧非表示設定

yasuはApacheの環境構築時に対応しているので問題ありませんがWordPressのディレクトリにアクセスした時にファイル一覧表示されないようにしてください。
ちなみにyasuのApache設定ファイル(httpd.conf)の設定はApacheの設定した時にOptionsのIndexesを外しているので大丈夫です。

wp-adminディレクトリ保護

WordPressのwp-adminディレクトリ(/var/www/html/blog/wp-admin/)は管理者しか使用しないので.htaccessでIPアドレス制限をかけます。
ただしローカルネットワークだけアクセス許可をすると外部からブログの更新ができなくなってしまうので、一部外部からのアクセスも許可します。
※設定しているIPアドレスはyasuの環境になりますので、ご自身の環境にあわせて設定をしてください。

WordPressのwp-adminディレクトリに.htaccessファイルを作成
[root@centos ~]# vi /var/www/html/blog/wp-admin/.htaccess
viエディタが起動するので設定を記入します
Order deny,allow
Allow from 192.168.0. ローカルネットワークからのアクセスを許可します
Allow from xx.xx.xx.xx 外部からのアクセスを許可します
Deny from all

内容を保存しviエディタを終了します

.htaccessファイルの所有者を変更します
[root@centos ~]# chown apache.apache /var/www/html/blog/wp-admin/.htaccess
[root@centos ~]# ls -l /var/www/html/blog/wp-admin/.htaccess
-rw-r--r-- 1 apache apache 72 3月 18 22:31 /var/www/html/blog/wp-admin/.htaccess

wp-contentディレクトリ保護

WordPressのwp-adminディレクトリ(/var/www/html/blog/wp-content/)のファイルに一般ユーザーがアクセスするのは使用しているテーマとプラグインだけなので、.htaccessでアクセス可能なファイルの拡張子を制限します。

WordPressのwp-adminディレクトリに.htaccessファイルを作成
[root@centos ~]# vi /var/www/html/blog/wp-content/.htaccess
viエディタが起動するので設定を記入します
Order allow,deny
Deny from all
<Files ~ ".(jpg|gif|png|js|css)$">
  Allow from all
</Files>

内容を保存しviエディタを終了します

.htaccessファイルの所有者を変更します
[root@centos ~]# ls -l /var/www/html/blog/wp-content/.htaccess
-rw-r--r-- 1 apache apache 95 3月 19 09:14 /var/www/html/blog/wp-content/.htaccess

WordPressのバージョン隠蔽

ページのソースに表示されているWordPressのバージョンを隠します。

使っているテーマのfunctions.phpファイルを修正します
[root@centos ~]# vi /var/www/html/blog/wp-content/themes/自分が設定しているテーマディレクトリ/functions.php
viエディタが起動するので修正します
<?php


       // Widgets
 if(function_exists('register_sidebar')) {
       register_sidebar(array(
               'name' => __('Sidebar'),

               'before_widget' => '<li id="%1$s" class="widget %2$s">',
       'after_widget' => '</li>',
       'before_title' => '<h3>',
       'after_title' => '</h3>',

       ));

}

remove_action('wp_head', 'wp_generator');

?>

内容を保存しviエディタを終了します

※もしfunctions.phpファイルがない場合は新規でfunctions.phpファイルを作成して以下の処理を記載します
<?php remove_action('wp_head', 'wp_generator'); ?>

管理者ログインページのIPアドレス制限

管理者ログインページのwp-login.phpにIPアドレス制限を追加します。
ただしローカルネットワークだけアクセス許可をすると外部からブログの更新ができなくなってしまうので、一部外部からのアクセスも許可します。
※設定しているIPアドレスはyasuの環境になりますので、ご自身の環境にあわせて設定をしてください。

wp-login.phpファイルの冒頭にIPアドレス制限を追加します
[root@centos ~]# vi /var/www/html/blog/wp-login.php

viエディタが起動するので修正します
<?php
$admin_allowip = '192.168.0.|xx.xx.xx.xx'; ローカルネットワーク|外部からのアクセスを許可します
$currentRip = $_SERVER['REMOTE_ADDR'];
eregi($admin_allowip,$currentRip) or die();

/**
* WordPress User Page
*
* Handles authentication, registering, resetting passwords, forgot password,
* and other user handling.
*
* @package WordPress
*/

/** Make sure that the WordPress bootstrap has ran before continuing. */
require( dirname(__FILE__) . '/wp-load.php' );
:
:
:

内容を保存しviエディタを終了します

WordPressを運営する上での最低限の設定だと思いますのでWordPressをご利用のみなさん、ぜひともこのセキュリティ設定を実施してみてください。

■ 参考サイト ■
WordPressのセキュリティをアップする11のポイント | コリス
MySQLクイック・リファレンス
権限の追加と削除 - ユーザーの作成 - MySQLの使い方
wp-config.php の編集 - WordPress Codex 日本語版

■関連記事
自宅サーバー再構築 その1 導入を検討する
自宅サーバー再構築 その2 CentOS 5.2 をインストールする
自宅サーバー再構築 その3 インストールしたCentOS 5.2 にリモート接続準備
自宅サーバー再構築 その4 CentOS 5.2 インストール後の初期設定
自宅サーバー再構築 その5 CentOS 5.2 ファイル転送準備
自宅サーバー再構築 その6 CentOS 5.2 にアンチウィルスソフトを導入する
自宅サーバー再構築 その7 CentOS 5.2 にファイル改竄検知システムを導入する
自宅サーバー再構築 その8 CentOS 5.2 にrootkit検知ツールを導入する
自宅サーバー再構築 その9 CentOS 5.2 にバッファオーバーフロー攻撃対策を行う
自宅サーバー再構築 その10 CentOS 5.2 SSHサーバーを構築して外部からリモート接続&リモートファイル転送
自宅サーバー再構築 その11 CentOS 5.2 にDNSサーバーを導入して名前解決(設定編)
自宅サーバー再構築 その12 CentOS 5.2 にDNSサーバーを導入して名前解決(確認編)
自宅サーバー再構築 その13 CentOS 5.2 にLAMP環境構築(Apache、PHP編)
自宅サーバー再構築 その14 CentOS 5.2 にLAMP環境構築(MySQL編)
自宅サーバー再構築 その15 Apacheにサーバー証明書を導入する
自宅サーバー再構築 その16 CentOS 5.2 にWordPressを導入してブログサイトを構築する
自宅サーバー再構築 その17 WordPressのセキュリティ対策
自宅サーバー再構築 その18 CentOS 5.3 にNTPサーバーを導入して自動時間合わせ
自宅サーバー再構築 その19 CentOS 5.3 アンチウィルスソフトのバージョンアップ
自宅サーバー再構築 その20 CentOS 5.3 メールサーバー構築(Postfix設定編)
自宅サーバー再構築 その21 CentOS 5.3 メールサーバー構築(Dovecot設定編)
自宅サーバー再構築 その22 CentOS 5.3 メールサーバー構築(公開編)
自宅サーバー再構築 その23 CentOS 5.3 メールサーバー構築(SSL導入編)
自宅サーバー再構築 その24 CentOS 5.3 メールサーバー構築(メールアカウント作成編)
自宅サーバー再構築 その25 CentOS 5.3 メールサーバー構築(Thunderbird設定編)
自宅サーバー再構築 番外編その1 CentOS 5.3 のリリースと導入済みソフトウェアのアップデート


“自宅サーバー再構築 その17 WordPressのセキュリティ対策”に1件のコメントがあります

通りすがりさんのコメント
投稿日時 2009年12月20日 02:40

すばらしいです。

コメントする