CentOSにnginxとfastcgiを入れてWordPressを動かすまでのメモ:その1

その2,3はこちらです。
http://nskw-style.com/2011/server/centos-nginx-fastcgi-wordpress-2.html
http://nskw-style.com/2011/server/centos-nginx-fastcgi-wordpress-3.html

借りたサーバの環境は、さくらのVPSサーバです。
素の状態なので、CentOS 5.5 x86_64が入っています。

ローカル環境はMacですので、ターミナルで操作します。

セキュリティ設定も書いていますが、責任は持てないです。

参考にしたウェブ上の資料

ターミナルからログインする

ターミナルからログインすることをリモートログインというようです。
ターミナルを開いて、下記のように打つことで、サーバに入る事ができます。

ssh root@www12345abc.sakura.ne.jp

ssh:ログイン方法の指定
root:ログインしたいアカウント名
www12345abc.sakura.ne.jp:さくらのVPSから知らされたサーバのアドレス。ここではダミー。

セキュリティ設定1:rootログインを無効にして別のユーザを作る

rootとは違うユーザを発行、パスワード作成します。

useradd exuser
passwd exuser
Changing password for user hogehoge 
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.

rootユーザというのは、そのサーバを扱うアカウントの中で一番偉くて何でもできるユーザです。それをこれから無効にするので、今作ったexuserというアカウントでrootと同じことができるようにしておかなければなりません。

usermod -G wheel exuser

これで、exuserユーザをwheelという特殊なグループに属させました。
次に、rootと同じ権限を持たせるのを、wheelというグループに限定させます。

そのためにまず、/etc/pam.d/にあるsuというファイルを編集します。
編集方法などは、こちらから確認できます。

viの使い方

ざっくり書けば、「/auth」と押すとauthを含む文字を検索できて、nを押すと次のマッチが探せます。また、Shift + nで戻れます。

vi /etc/pam.d/su
 :
#auth required	pam_wheel.so use_uid   
	↓ 行頭の "#" を消す 
auth required pam_wheel.so use_uid

消したら保存します。escキーを押してから:wqと押すと「保存して閉じる」です。ターミナルでのふるまい方です。

上記により、exuserでログイン後、

su -

と入力することで、rootに成り代わることが可能になります。

最後にrootでのログインを禁止します。

vi /etc/ssh/sshd_config 
:
#PermitRootLogin yes
   ↓ 以下のように変更 
PermitRootLogin no

読んだままなので分かりやすいですね:)

そして最後に、今設定したsshdの設定をサーバに反映させるために、sshdを再起動します。

service sshd restart 
Stopping sshd: [ OK ] 
Starting sshd: [ OK ]

ここまでの設定で、rootでのログインができなくなり、exuserでしかログインできなくなりました。ターミナルのウィンドウをもう一つ開いて確認が必要です。

ssh root@www12345abc.sakura.ne.jpではログイン出来ないことを確認します。
パスワードは聞かれますが、ログイン出来ないはずです。

次に、ssh exuser@www12345abc.sakura.ne.jpでログインしてみましょう。パスワードはさっき作った方になります。

ログインが出来たら、su -と打ちます。そうすると、rootのパスワードを聞かれるので入力します。それで、exuser@~と表示されていた所がroot@~に変われば、ここまでの設定は成功です。

セキュリティ設定2:パスワードでのログインをやめて公開鍵認証にする

パスワードはいつか破られますので、公開鍵認証というもっとすごい方法による認証方法に変更します。この方法を使うことで、限られたパソコンからしかサーバにログイン出来ないようになります。

公開鍵と秘密鍵のペアが必要です。WindowsではPuTTYというので作れるそうです。Macでは、ターミナルを開いて(どこのサーバにもログインしていない状態で)、ssh-keygenコマンドを入力すると、id_rsaファイル(秘密鍵)とid_rsa.pubファイル(公開鍵)が作成できます。

2つのファイルは、Macのユーザ直下/.sshフォルダにできます。ファインダーでお家アイコンがあるところのしたです。
.sshファイルのように.から始まるファイルは通常見えない不可視ファイルなので、MacのFinderで不可視ファイルを見えるようにする方法 | 頭ん中で確認しましょう。

次に、サーバにFTPなどでログインします。
一番上の階層から、/home/exuser/というディレクトリに.sshというフォルダを作り、その中に、authorized_keysというファイルを作成して、公開鍵の中身をコピペします。

この時、.sshのパーミッションを700に、authorized_keysのパーミッションを600にしないとログインできません。
(読めないと認証できないし、開かれすぎてると警告が出て進めません。)

オーナーとグループの両方をexuserにするのも忘れずに。(なんでなの??)

次に、サーバにログインしているrootアカウントで、sshd_configを修正してsshdを再起動(前述)します。

sudo vi /etc/ssh/sshd_config
 :
#PubkeyAuthentication yes   
↓ 行頭の "#" を消して、公開鍵認証でログインできるように設定 
PubkeyAuthentication yes
: 
#PasswordAuthentication yes   
↓ 以下のように書き換えて、パスワードログインを禁止 
PasswordAuthentication no

セキュリティ設定3:ログの監視

サーバにどういう人たちがアクセスしてきたのかを監視します。そのためのソフトをインストールして、毎日メールが届くようにするための設定です。

ここは、WordPants Summer Vol.2 ビアガーデンを見てください。

この設定を行うと毎日メールが届きますので、読むようにします。
最初はわけがわからないですが、自分がやったことがそれなりの英語で書かれているのでなんとなく分かりそうです。
いつもと違う数字や異常があれば気がつけそうですが、この辺も勉強して詳しくなっていきたいと思います。

セキュリティ設定4:SSHのポート番号の変更

ポート番号というのは、僕の(あくまで僕のm(_ _)m)ざっくり言うとサーバへのドアの番号のようなものです。サーバにはウェブサーバやメールサーバとしての役割があるけど、それぞれの役割には個別の入り口からじゃないと入れません。

ウェブは80番、メール送信なら25番、FTPは21番とだいたい決まっています。SSHの場合には22番です。
この22番というのを変更することで、世界中のサーバの22番ポートに無差別攻撃をしている悪い人から、そもそもサーバを守ろうということです。
変更しても、変更した本人(あなた)がポート番号を覚えていれば問題ない、ということです。

vi /etc/ssh/sshd_config
 :
#Port 22   
	↓ 以下のように変更することで ssh 接続する時は 10022 番ポートへのアクセスが必要になる 
Port 10022

このあと、sshdの再起動です。このあたりも前述のWordPantsに書かれている通りです。

この設定を行ったあとでは、ssh exuser@www12345abc.sakura.ne.jpではログインできなくなります。ログインするためには、ssh exuser@www12345abc.sakura.ne.jp -p 10022と入力します。

セキュリティ設定5:denyhost

僕の環境では、これをインストールすると、ログインができなくなりました。何度もログインに失敗していたからでしょうか?よくわかりませんが、僕はこれを入れていません。

特定のipアドレスから、何度も接続を試みて失敗している場合にそのipアドレスを覚えて、アクセスを禁止してくれるそうです。

やり方は、WordPantsの記載通りですが、PDFで改行が入っている箇所をコピペするとスペースが空いたりして上手くいかないので、下記をコピペしてください。

sudo rpm --import http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
sudo rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
sudo yum -y install denyhosts
sudo /etc/init.d/denyhosts start
sudo /sbin/chkconfig denyhosts on

セキュリティ設定6:ファイヤーウォール

必要なポート以外を閉じることで、別の入口からのアクセスという攻撃機会を減らします。

必要なインストールや手順はWordPants通りですが、コピペをするとエラーが出るので、下記を使ってください。
(余計なスペースが入るのが問題のようです。環境によっては分かりません。。)

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# HTTP, FTP1, FTP2, SSH
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-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
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22222 -j ACCEPT
# MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

nginxをインストールする

ここからは、WordPants Vol.4 ひまわりをベースにしています。
まずは、rpmビルドです。
RPMはRedHat Package Managerの略で、サーバに必要なソフトをインストールするための仕組みの一つです。
何かをインストールしているということは、どこかからインストーラを持ってきているわけですが、それをディストリビュート(配布する・流通させる)しているしくみがあるはずで、それのことです。ありがたいことです:)。

ここもWordPantsのPDFをコピペすると、いらないスペースが入るので、僕の成功したものを下記に貼ります。

yum install gcc rpm-build perl-ExtUtils-Embed
mkdir $HOME/rpm $HOME/rpm/SOURCES $HOME/rpm/SPECS $HOME/rpm/BUILD $HOME/rpm/SRPMS $HOME/rpm/RPMS $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

「rpm ビルド用のソースパッケージをインストール後、nginx 最新版(1.0.4)のソースを取得」の部分です。

wget http://download.fedora.redhat.com/pub/epel/5/SRPMS/nginx-0.8.54-1.el5.src.rpm
rpm -Uvh nginx-0.8.54-1.el5.src.rpm
cd ~/rpm/SOURCES/
wget http://nginx.org/download/nginx-1.0.4.tar.gz
cd ~/rpm/SPECS/
vi nginx.spec

以下は、nginx.specの書き換えの時に必要なものですが、PDFで激しくゴチャゴチャ担っているので(もしかしてWindowsだと平気なのかな?)、著者のwokamotoさんのブログも参考にしています(バージョンなどが古いので見比べてくっつけました)。

また、下記は、この記事を書いている2011年8月14日のものなので、バージョン番号などは自分で合わせて書きかえる必要があります。現在の最新バージョンがいくつなのかに気をつけてください。

%define _unpackaged_files_terminate_build 0
 :
Version:	1.0.4
 :
#Patch0: nginx-auto-cc-gcc.patch
 :
#%patch0 -p0
 :
%build
# nginx does not utilize a standard configure script.  It has its own
# and the standard configure options cause the nginx configure script
# to error out.  This is is also the reason for the DESTDIR environment
# variable.  The configure script(s) have been patched (Patch1 and
# Patch2) in order to support installing into a build environment.
export LANG='ja_JP.UTF-8'
export DESTDIR=%{buildroot}

次のrpmbuild -bb nginx.specをやるとインストールするのに必須なパッケージ(=ソフト?)の一覧が出ます。

rpmbuild -bb nginx.spec

僕のやったときは下記が出ました。

error: Failed build dependencies:
	pcre-devel is needed by nginx-1.0.4-1.x86_64
	zlib-devel is needed by nginx-1.0.4-1.x86_64
	openssl-devel is needed by nginx-1.0.4-1.x86_64
	libxslt-devel is needed by nginx-1.0.4-1.x86_64
	GeoIP-devel is needed by nginx-1.0.4-1.x86_64
	gd-devel is needed by nginx-1.0.4-1.x86_64

一つ一つ、yumコマンドでインストールしていきます。

yum install pcre-devel
yum install zlib-devel
yum install openssl-devel
yum install libxslt-devel
yum install GeoIP-devel
yum install gd-devel

これを行ってから再度、rpmbuild -bb nginx.specを行い、rpmビルドが完了します。

今回はかなり長く待ちます。1分くらい。
これで、パッケージがサーバに設置されたことになるのですが、ls -lコマンドでパッケージの名前を確認する必要があります。

cd ~/rpm/RPMS/x86_64/
ls -l

すると、今回は下の画像のような形になりました。

nginx-1.0.4-1.x86_64.rpmがパッケージの名前なので、sudo rpm -Uvh nginx-1.0.4-1.x86_64.rpmとして、コマンド入力します。

以上でnginxのインストールが完了です。

fastCGIの導入

Apacheでは、mod_phpというモジュールでphpが動いていました。
nginxでは、fastCGIでphpを動かします。これが速いそうです!嬉しい!

まず、spawn-fcgiをインストールします。

yum install spawn-fcgi

やってもエラーが。。。今日はここまで。
以下は出たエラー。

yum install spawn-fcgi
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.nara.wide.ad.jp
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
Setting up Install Process
No package spawn-fcgi available.
Nothing to do

↓ プラグインを作る方々への本、書きました。 ↓

“CentOSにnginxとfastcgiを入れてWordPressを動かすまでのメモ:その1” への 1 件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です