【お名前.com】WordPressを共用SDサーバーからVPS(KVM)へ乗り換える その6

CentOS + Nginx でのサーバ構築。1から始める初心者向けです。
なお、筆者もばりばりの初心者です。

<その5>ではリポジトリの追加と優先度設定、アップデートの通知設定などを行いました。

<その6>では「VSFTPD」と「phpMyAdmin」を導入します。

この2つは必ずしも必要なものではありませんので、お好みで導入して下さい。
サーバを狙う攻撃者にとって、攻撃対象として狙われやすい部分でもありますので使わなくて済むのであれば使わないほうが良いかもしれません。


VSFTPDのインストールと設定

FTPソフトとして「VSFTPD」をサーバへインストールし、「FFFTP」をクライアントにしてデスクトップなどから接続を行います。

私はVPSに触れるまでコンソールでコマンドを打って操作をした経験がありませんでしたので、「FFFTP」でVPSの内部の階層構造を視覚的に確認できたのはずいぶん助かりました。理解度がグッと増した気がします。

設定とログインまでにかなりハマりましたので、長くなりますが記録を残しておきます。

「yum」で「VSFTPD」インストールします。

sudo yum install vsftpd

早速起動させ、自動起動も設定します。

sudo service vsftpd start
sudo chkconfig vsftpd on

自動起動の確認もしておきます。

sudo chkconfig --list vsftpd
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

2~5 が「on」になっていればOKです。
ポートは「20番,21番」を使用しますので、iptablesも確認しておきましょう。

sudo vi /etc/sysconfig/iptables
# FTP用
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

続いて設定を編集します。

sudo vi /etc/vsftpd/vsftpd.conf

下記を編集していきます。
ひとまず全文を載せて、変更点はその後にまとめて説明しています。

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO ←匿名でのログインを禁止
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=002 ←パーミッションを022から002へ変更
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog
#
# Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES ←コメントアウトを解除
ascii_download_enable=YES ←コメントアウトを解除
#
# You may fully customise the login banner string:
ftpd_banner=Welcome to blah FTP service. ←コメントアウトを解除
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES ←コメントアウトを解除
chroot_list_enable=YES ←コメントアウトを解除
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list ←コメントアウトを解除
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES ←コメントアウトを解除
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
↓以下を追記します
local_root=/var/www/vhosts/default
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
use_localtime=YES
pasv_promiscuous=YES
pasv_min_port=50000
pasv_max_port=50030
force_dot_files=YES

変更した部分だけを抜き出しました。

匿名でのログインを禁止
anonymous_enable=NO

パーミッションを「022」から「002」へ変更し、グループでの書き込みを許可
local_umask=002

アスキーモードのアップロードとダウンロードを許可
ascii_upload_enable=YES ←コメントアウトを解除
ascii_download_enable=YES ←コメントアウトを解除

FTPログイン時のバージョン表示を出さない
ftpd_banner=Welcome to blah FTP service. ←コメントアウトを解除

ホームディレクトリより上位に移動できるユーザの設定用
chroot_local_user=YES ←コメントアウトを解除
chroot_list_enable=YES ←コメントアウトを解除
chroot_list_file=/etc/vsftpd/chroot_list ←コメントアウトを解除

ディレクトリごと削除できるようにする
ls_recurse_enable=YES ←コメントアウトを解除

FTPクライアントでのログイン時の初期位置です
下記はお名前.comのVPS(KVM)で<nginx + wordpress>をテンプレートで
インストールした場合の<WordPress>の位置ですので、環境に合わせて変更して下さい
サーバが<apache>であれば「/var/www/html」にしておけば大丈夫だと思われます
local_root=/var/www/vhosts/default

数行上にある「userlist_enable=YES」と組み合わせることで<user_list>内に登録した
ユーザのみを接続許可します。「userlist_enable=YES」が無い場合は追記して下さい
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

タイムスタンプの時間を日本時間にする
use_localtime=YES

パッシブモードの利用と使用するポート
pasv_promiscuous=YES
pasv_min_port=50000
pasv_max_port=50030

「.htaccess」のようなドットで始まるファイルを表示
force_dot_files=YES

「パッシブモード」で使うポート番号は任意で決定する事ができます。
今回は例として「50000 ~ 50030」までのポートを使用します。

「パッシブモード」で使用するポート番号「50000:50030」がiptablesで開いているかどうか確認します。無ければ追加しiptablesを再起動して反映しておきます。

反映されていなければ「FFFTP」でログインする時にエラーが出ます。

sudo vi /etc/sysconfig/iptables

「iptables」に下記を追記し、

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50000:50030 -j ACCEPT

再起動して反映させます。

sudo /etc/rc.d/init.d/iptables restart
FTPに接続可能なユーザの登録

FTPにログインできるユーザを登録します。

userlist_deny=NO」と設定しているところがポイントです。

「userlist_deny」とは「userlistに記入してあるユーザは拒否する」という意味ですが、これを更に「NO」とすることで二重否定で真逆の意味にしています。

ややこしいのですが、つまりこの設定にすると「userlistに載っているユーザはログインできる」ということになります。

sudo vi /etc/vsftpd/user_list

ここに記載されている項目は本来なら「ログイン拒否するリスト」なので、ずらっと書いてありますが

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

7行目以下をざっくり消して、ログインしたいユーザのみを記入します。
新しくここで登録するのではなく、すでに作成した作業用ユーザとを使います。
ここではユーザ名「mndangler」をログインできるユーザとして記入します。

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
mndangler

既存のユーザですので、FTPにログインする時のパスワードも既存のものになります。


この後、「FFFTP」などでログインすると「local_root=/var/www/vhosts/default」で決めたように、設定した初期位置でログインすることになります。

ですが、その初期位置から上位のディレクトリには移動できない設定になっています。
複数人で管理する際には必要な機能ですが、これでは困ります。

上位ディレクトリに移動できるようにするためには「chroot_list」にユーザ名を記入します。
chroot_list」に名前の無いユーザは初期位置より上位の階層に移動できません。

sudo vi /etc/vsftpd/chroot_list

このファイルは初期状態では存在しませんので上記コマンドで新規作成することになります。

「vi」で開いたエディタにユーザ名を記入していつものように「:wq + Enter」で保存してください。
今回の場合では「mndangler」と1行だけ記入して保存・終了します。

設定を反映させるために「VSFTPD」を再起動します。

sudo /etc/init.d/vsftpd restart
FFFTPでログインしてみる

「FFFTP」のインストールについては割愛します。
とはいえダウンロードしてインストールするだけの簡単な作業です。

FFFTP公式サイト

「FFFTP」を起動したら「ホスト一覧」から「新規ホスト」を選択します。

FFFTP新規接続

以下4つの項目を自身の環境に合わせて入力します。

■ ホストの設定名:VPS(ここはなんでもOKです。わかりやすい名前を任意で)
■ ホスト名   :IPアドレス or ドメイン名 (VPSのIPアドレスでOKです)
■ ユーザ名   :mndangler (userlist に追加したユーザ名)
■ パスワード  :abc123 (ユーザ登録の際に決めたパスワード)

残りは空欄。「anonymous」にチェックが入っている場合は外して、「OK」を押して接続してみましょう。
正常にログインでき、初期位置から上位のディレクトリにも移動できればひとまず完了です。

ファイルのダウン・アップロードはもちろん、パーミッションや所有権の確認にも重宝します。
またVPSの階層構造を視覚的に理解するのにも役立ちます。

phpMyAdmin

今回一番悩んだ部分です。
どうやってログイン画面に辿り着くのかすらわかりませんでした。

そしてものすごく簡単に解決しました。
解決すれば全ての合点がいくというか、拍子抜けする話です。

前提として、今回はお名前.comの「CentOS + WordPress テンプレート」をインストールしておりまして、OSインストール直後から「WordPress」が使用できる状態でした。

「WordPress」が使えるということは「PHP」や「MySQL」やその他もろもろも同時にインストールされており、その中に「phpMyAdmin」も含まれていました。

しかし「http://IPアドレス/phpMyAdmin」をブラウザに入力しても「エラー404」が返ってきます。

「404」はファイルが存在しないという意味のエラーなので、もの凄く悩みました。
頑張って検索してみても謎は深まるばかりです。

・phpMyAdmin本体は /usr/share の中にある
・/usr/share には phpMyAdmin 本体の他にシンボリックリンクもある
・/etc/nginx に phpmyadmin という拡張子の無いファイルがある
・/etc/nginx/conf.d の中には phpMyAdmin に関係するファイルは無い

ちなみに「シンボリックリンク」=「ショートカット」=「エイリアス」ということだそうです。
それぞれ「Linux」「Windows」「MacOS」での呼び方ということです。

これが初期状態でしたので、リンクが通っていないから「404」になっているのかもと思い、サーバのドキュメントルートに「phpMyAdmin」本体を移動させてみたり、シンボリックリンクを作ってみたり、「/etc/nginx」にある「phpmyadmin」というファイルを 「.conf」とリネームして「conf.dディレクトリ」に移動させてみたり中身を色々書き換えてみたりと3日間程奮闘しましたが解決しませんでした。

そして「 /etc/nginx/conf.d/default.conf」の50行目にこう書いてあることにやっと気が付きました。

# When you use phpMyAdmin, uncomment the line "include /etc/nginx/phpmyadmin;"
# and delete or comment out the below line "location ~* /(phpmyadmin|myadmin|pma) { }".
#
#include     /etc/nginx/phpmyadmin;
location ~* /(phpmyadmin|myadmin|pma) {
    access_log off;
    log_not_found off;
    return 404;
}

phpMyAdminを使うなら、この下にある “include /etc/nginx/phpmyadmin” の行のコメントアウトを解除して、その下の「location」の行は全てコメントアウトしてね』とはっきり書いてあったのです。

「404」が返ってくる理由が判明しました。

おそらくテンプレートでインストールした結果、セキュリティの関係上「nginx」の「default.conf」ファイルによって「phpMyAdmin」へのアクセスがあらかじめ制御されており「404」を返す様になっていたのです。なんとも間抜けな話ですが、書かれているとおりに変更します。

# When you use phpMyAdmin, uncomment the line "include /etc/nginx/phpmyadmin;"
# and delete or comment out the below line "location ~* /(phpmyadmin|myadmin|pma) { }".
#
include     /etc/nginx/phpmyadmin; ←コメントアウトを解除
#location ~* /(phpmyadmin|myadmin|pma) { ↓ここから
#    access_log off;
#    log_not_found off;
#    return 404;
#}                                                           ↑ここまでコメントアウト

これで「default.conf」読み込み時に「/etc/nginx/phpmyadmin」というファイルも同時に読み込まれます。
「phpmyadmin」というファイルの中身には

# phpMyAdmin
location /phpMyAdmin {
    alias /usr/share/phpMyAdmin;
    index index.php;
    include /etc/nginx/expires;
}
location ~ ^/phpMyAdmin/.+.php$ {
    alias /usr/share/phpMyAdmin;
    fastcgi_pass   phpfpm;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /usr/share$fastcgi_script_name;
    include        fastcgi_params;
}

と書かれています。

2行目の「location /phpMyAdmin」は<location>が「所在、位置、場所」というような意味なので、サーバにアクセスした時のドキュメントルート(初期位置)に「phpMyAdmin」が置かれているという意味です。こう書くなら本来はここに「phpMyAdmin」の本体が置かれていなければなりません。

しかし、実際にはドキュメントルートに「phpMyAdmin」は置いていません。

そこで、「/phpMyAdmin」に続く「{ }」の中に本体へのリンクを書いて擬似的に存在している同じ状態にしてあるようです。

3行目の「alias」という指定が本体の存在場所へのリンク指定です。
これによりドキュメントルートに存在しないはずの「phpMyAdmin本体」が

/etc/nginx/conf.d/default.conf

/etc/nginx/phpmyadmin

/usr/share/phpMyAdmin/index.php

と経由して読み込まれる状態となっています。

「http://IPアドレス or ドメイン/phpMyAdmin」にアクセスし、ログイン画面が出ればOKです。
これで「WordPress」のデータベースの引っ越しを行うことができます。

サーバの設定ばかりしていますが、あくまでも「WordPress」の引っ越しのために作業をしております。「WP-DBManager」などのデータベースを管理するプラグインを使って「エクスポート → インポート」すれば簡単に終わる作業なのですが、いざというときのために「phpMyAdmin」を使えるようにしておきたかったのでログインができて一安心です。

また、データの移行が終わったら普段使用することは無いので「nginx」の「default.conf」を再度編集して、コメントアウトを元通りに戻しておくと安心です。これはある意味怪我の功名と言えるかもしれません。

今回はここまでです。


<その7>ではとうとうWordPressを引っ越します。

その7 … WordPress本体とデータベースを引越しへ

コメント

 DISQUSコメントシステムとは?
DISQUSコメントシステムFacebook Twitter Google などのアカウントを使用してコメントを残すことができます。
また、それらを使いたくない場合でも メールアドレスのみ でコメントが可能で、その際のアドレスはもちろん非公開です。
YouTubeTweet などはURLを貼ると自動で埋め込み表示されますし、画像をアップすることもできます。
お気軽にコメント頂けると嬉しいです。

New Post



Random


CLOSE