WordPressをDebianにインストール その4: さらにセキュリティの強化

Use the 8% OFF coupon "GBvalentine", Grab the Best Valentine’s Day Gifts Best Deals from Just $25 @GearBest! Ends: 1/23/2017.
鍵

前回は、WordPressのセキュリティで気になる2点、

  1. WordPressの管理画面にログインするとき
  2. WordPressの管理画面でテーマやプラグインをインストールするとき

のうち、1を改善しました。今回は2です。

この設定には下記のサイトが参考になりました。

テーマやプラグインをインストール処理の強化(SSH化)

WordPressの管理画面で、プラグインをインストールしたりする場合、VPS側にファイルを展開しなければなりません。

このためにはFTPを使用したりできるのですが、SSHを使うとログインを全自動化できてとても楽です。セキュリティもSSHのほうが断然強いのでファイル転送にはSSHを使用するようにしましょう。

SSHのライブラリのインストール

この機能を有効にするためにはPHP(WordPressが使用している言語)からsshの機能を呼び出せるようにする必要があります。下記のコマンドで必要なライブラリを入れます。

sudo aptitude install libssh2-php

必要ないかもしれませんが、Apache2を再起動しておきます。

sudo /etc/init.d/apache2 reload

SSH用のユーザと認証鍵の作成

WordPressのプラグインのインストール等で使用する専用のアカウントを作成します。自分のアカウントをそのまま使ってもよいのですが、いまいち気持ち悪いので専用のアカウントを作ります。このユーザ名をwpとしておきます。

sudo adduser wordpress

このユーザはwww-dataグループに入れておきます。

sudo adduser wordpress www-data

このユーザ用にSSHのキーを作成します。プラグインのインストール時に入力するのは面倒なので、パスフレーズは入力せずにリターンを押します。

sudo -u wp ssh-keygen

これで/home/wp/.sshに公開鍵id_rsa.pubと秘密鍵id_rsaができます。
この鍵のペアでログインできるようにします。

sudo cat id_rsa.pub >> authorized_keys
sudo chown wp.wp authorized_keys

所有グループを調整します。

sudo chgrp www-data /home/wp/.ssh
sudo chmod 750 /home/wp/.ssh
sudo chgrp www-data /home/wp/.ssh/*
sudo chmod 640 /home/wp/.ssh/*
所有グループをwww-dataにし、グループ読み取り化とするのがポイントです。
通常は.sshディレクトリはグループ読み込みでできない設定ですが、www-dataグループが読み込めるようにすることで、WordPress(Apache)がこの鍵を使用することができます。

WordPressの設定の変更

/etc/wordpress/config-サイト名.phpに下記の行を追加します。

define('FS_METHOD', 'ssh2');
define('FTP_BASE', '/usr/share/wordpress/');
define('FTP_CONTENT_DIR', '/usr/share/wordpress/wp-content/');
define('FTP_PLUGIN_DIR', '/usr/share/wordpress/wp-content/plugins/');
define('FTP_PUBKEY', '/home/wp/.ssh/id_rsa.pub'); ←公開鍵があるディレクトリ
define('FTP_PRIKEY', '/home/wp/.ssh/id_rsa'); ←秘密鍵があるディレクトリ
define('FTP_USER', 'wp');  ← 作成したアカウント
define('FTP_HOST', '127.0.0.1:ポート番号');  ← SSHでログインするホスト名とポート番号。同じサーバ上の処理なので127.0.0.1でもOK。
define('FTP_SSL', false);  ←FTPSは使用しない
SSHの鍵認証を行うので、FTP_PASSの設定は不要です。

Apache2を再起動しておきます。

sudo /etc/init.d/apache2 reload
wordpressの設定ファイルを書き換えたときに、グループ所有権が変わってしまわないように注意しましょう。
グループ所有権がwww-dataでないとうまく動きません。

プラグインインストール用のディレクトリを作成する

プラグインのインストール時に作業用としてupgradeというディレクトリを使用するので作っておきます。所有者はroot, グループはwww-data, グループは読み書き可にしておきます。

sudo mkdir /usr/share/wordpress/wp-content/upgrade
sudo chown root.www-data /usr/share/wordpress/wp-content/upgrade
sudo chmod 770  /usr/share/wordpress/wp-content/upgrade
sudo chmod g+s  /usr/share/wordpress/wp-content/upgrade

プラグイン・テーマ用ディレクトリの調整。

所有者をroot, グループはwww-data, グループは読み書き可にしておきます。

sudo chown -R root.www-data  /usr/share/wordpress/wp-content/plugins
sudo chmod 770  /usr/share/wordpress/wp-content/plugins
sudo chmod g+s  /usr/share/wordpress/wp-content/plugins
sudo chown -R root.www-data  /usr/share/wordpress/wp-content/themes
sudo chmod 770  /usr/share/wordpress/wp-content/themes
sudo chmod g+s  /usr/share/wordpress/wp-content/themes

まとめ

これでパスワードも何も入れずに、クリックするだけでプラグインやテーマをインストールできるようになるはずです。

これにてDebianへのWordPressのインストールは完了です。あとは記事を充実させるだけです!