※2016年11月に、別のブログで書いた記事を移行したものです。
"mokuo's tech blog"は、WordPressを使っています。インターンをしていた時に、WordPressのサーバー構築・サイト作成・カスタマイズまで行っていたので、慣れているということもあります。
そこで今回は、WordPressのセキュリティ対策について、実際の設定の仕方も含めて見ていきたいと思います。
以下のサイトを参考にしました。徳丸 浩さんは、体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践を執筆された方です。
それぞれのサイトで色々なことが書かれている中でも、信憑性が高いと思い、参考にさせていただきました。
(他にも、昔インターンでセキュリティ対策を実施した時の知識もありますが、どこのサイトを参照していたのか覚えていません・・・。)
## ソフトウェアを最新に保つ
古いものには脆弱性が存在している可能性が高く、最新のものを使用することで脆弱性対策になるようです。
(逆に、脆弱性が見つかったから、対策を施したバージョンをリリースするとも言える?)
以下のものは、常に最新のものを使いましょう。
- WordPress本体
- WordPressのテーマ
- WordPressのプラグイン
- OS
- ミドルウェア(WordPress関連では、以下のもの)
* Apache
* PHP
* MySQL
また、使わないプラグインは、無効化ではなく、削除 しましょう。
脆弱性が存在するプラグインは、無効化していても、利用されるケースがあるようです。
ここからは、常に最新のものを使うための具体的なやり方を見ていきたいと思います。
### 自動バックアップ
この後、自動アップデートの設定をしますが、自動でアップデートを行うと、不具合が発生することもあります。万が一に備えて、自動バックアップの設定をしておきましょう。
攻撃されたとしても、バックアップを取っておけば復旧もしやすくなります。
自動バックアップには、BackWPUpプラグインがオススメです。
以下のサイトがわかりやすいので、参考に設定してください。
### WordPress本体・テーマ・プラグインを自動更新
デフォルトでは、本体のマイナー更新と翻訳ファイルのみ、自動更新されるようです。
今回は、さらに設定を追加します。
外観 > テーマの編集 から、
functions.phpに以下を追記します。
functions.phpは、編集を間違えると画面が真っ白になることもあるので、必ずバックアップを取ってから行ってください。
// *******************************************************
// 本体メジャーアップグレードの自動更新
// *******************************************************
add_filter( 'allow_major_auto_core_updates', '__return_true' );
// *******************************************************
// テーマ・プラグインの自動更新
// *******************************************************
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
*参考*
### Apache, PHP, MySQLなどのアップデート
以下のコマンドを実行
$ sudo yum check-update
最新版があれば、アップデート
$ sudo yum update
## パスワードを強固なものにする
長め(12文字以上)のランダム文字列(英数字+記号)がいいと思います。
WordPressの管理画面に加えて、phpMyAdminの管理画面もですね。
以下のサイトなどで、ランダム文字列を生成できます。
## ファイルのパーミッションを設定する
### WordPressを置いてあるディレクトリの所有者をec2-user、グループをapacheにしておく
※ec2-userは、AWSのデフォルトユーザーです。適宜、置き換えてください。
$ chown -R ec2-user:apache /var/www/html/◯◯
### パーミッションの設定
以下のサイトを参考に設定する
- WordPressディレクトリのパーミッションをセキュアに | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで
- ファイルやディレクトリのパーミッションを一括で変更する方法 - 指導員日記::ブログ
### 追加のパーミッション設定
#### ① SiteGuard画像認証
後述しますが、SiteGuard WP Pluginのログイン画面での画像認証で、画像が表示されなくなってしまいました。
修正前のパーミッション
$ pwd
/var/www/html/mokuo.yokohama/wp-content/plugins/siteguard/really-simple-captcha
$ ls -la
合計 36
drwxr-x--- 5 ec2-user apache 4096 11月 28 12:11 .
drwxr-x--- 9 ec2-user apache 4096 11月 28 12:11 ..
drwxr-x--- 2 ec2-user apache 4096 11月 28 12:09 gentium
drwxr-x--- 2 ec2-user apache 4096 11月 28 12:09 mplus-TESTFLIGHT-058
-rw-r----- 1 ec2-user apache 14697 11月 28 12:09 siteguard-really-simple-captcha.php
drwxr-x--- 2 ec2-user apache 4096 11月 29 11:16 tmp
$ ls -la tmp/
合計 48
drwxr-x--- 2 ec2-user apache 4096 11月 29 11:16 .
drwxr-x--- 5 ec2-user apache 4096 11月 28 12:11 ..
-rw-rw---- 1 ec2-user apache 118 11月 28 12:12 .htaccess
-rw-r----- 1 ec2-user apache 1448 11月 29 10:38 1136737313.png
-rw-r----- 1 ec2-user apache 97 11月 29 10:38 1136737313.txt
-rw-r----- 1 ec2-user apache 1307 11月 29 10:51 1350422043.png
-rw-r----- 1 ec2-user apache 97 11月 29 10:51 1350422043.txt
-rw-r----- 1 ec2-user apache 1606 11月 29 11:08 1587730570.png
-rw-r----- 1 ec2-user apache 97 11月 29 11:08 1587730570.txt
-rw-r----- 1 ec2-user apache 1351 11月 29 11:16 826994820.png
-rw-r----- 1 ec2-user apache 97 11月 29 11:16 826994820.txt
-rw-r----- 1 ec2-user apache 102 11月 28 12:11 dummy.png
以下の対策を実行すると、直った。
$ chmod 770 tmp/
$ ls -la
合計 36
drwxr-x--- 5 ec2-user apache 4096 11月 28 12:11 .
drwxr-x--- 9 ec2-user apache 4096 11月 28 12:11 ..
drwxr-x--- 2 ec2-user apache 4096 11月 28 12:09 gentium
drwxr-x--- 2 ec2-user apache 4096 11月 28 12:09 mplus-TESTFLIGHT-058
-rw-r----- 1 ec2-user apache 14697 11月 28 12:09 siteguard-really-simple-captcha.php
drwxrwx--- 2 ec2-user apache 4096 11月 29 11:16 tmp
#### ② BackWPup
BackWPupプラグインが、バックアップを取る際に、書き込み宣言が必要になる。
$ find /var/www/html/mokuo.yokohama/wp-content/uploads/ -type d -exec chmod 770 {} \;
#### ③ FTP接続情報の対策
テーマのアップデートや、プラグインのインストールで、FTP接続情報を聞かれることがある。
wp-config.phpに、以下の行を追加
define('FS_METHOD','direct');
#### ④ プラグインのインストール
プラグインのインストール時に、「ディレクトリを作成できませんでした。」と出て、インストールに失敗する。
パーミッションの問題だと推測される。
$ chmod 770 wp-content/plugins/
### ログファイルの場所
パーミッションでエラーが起きた場合、ログを見ると原因がわかる。
ログは、以下のディレクトリにあるはず。
/var/log/httpd/
ない場合は、httpd.confに場所が書いてある。(/etc/httpd/conf/httpd.conf)
## SiteGuard WP Plugin
基本的に導入するだけで、いくつかのセキュリティ対策をしてくれます。
以上になります。
ここまでやると、ある程度のセキュリティ対策にはなるかと思います。
ご意見・つっこみ等あれば、よろしくお願いいたします。