今回はこちらのサイトを参考にWordPressのセキュリティ対策を実施していきます。
MySQLのwordpress用ユーザの権限を修正します
[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に張り付けます。
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の環境になりますので、ご自身の環境にあわせて設定をしてください。
[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でアクセス可能なファイルの拡張子を制限します。
[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のバージョンを隠します。
[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の環境になりますので、ご自身の環境にあわせて設定をしてください。
[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 日本語版
————————————————————————————————–
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 番外編その1 CentOS 5.3 のリリースと導入済みソフトウェアのアップデート
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その16 CentOS 5.2 にWordPressを導入してブログサイトを構築する
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その15 Apacheにサーバー証明書を導入する
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その14 CentOS 5.2 にLAMP環境構築(MySQL編)
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その13 CentOS 5.2 にLAMP環境構築(Apache、PHP編)
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その12 CentOS 5.2 にDNSサーバーを導入して名前解決(確認編)
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その11 CentOS 5.2 にDNSサーバーを導入して名前解決(設定編)
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その10 CentOS 5.2 SSHサーバーを構築して外部からリモート接続&リモートファイル転送
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その9 CentOS 5.2 にバッファオーバーフロー攻撃対策を行う
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その8 CentOS 5.2 にrootkit検知ツールを導入する
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その7 CentOS 5.2 にファイル改竄検知システムを導入する
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その6 CentOS 5.2 にアンチウィルスソフトを導入する
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その5 CentOS 5.2 ファイル転送準備
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その4 CentOS 5.2 インストール後の初期設定
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その3 インストールしたCentOS 5.2 にリモート接続準備
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その2 CentOS 5.2 をインストールする
flashcast:フリーで働くITエンジニア集団のブログ: 自宅サーバー再構築 その1 導入を検討する







すばらしいです。