4月
04

今回はこちらのサイトを参考に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 日本語版

————————————————————————————————–
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 導入を検討する

Trackback URL

※この記事へのトラックバック用 URL

1 Comment

コメントする

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

    2009年4月
    日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
    « 3月   5月 »
     1234
    567891011
    12131415161718
    19202122232425
    2627282930  
  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告