さくらVPSの初期セットアップからWordPressの引っ越しとメールサーバをGmail(GoogleApps)に任せてしまうところまで。

まずはじめにボクはCUIを延々避け続けてきた人間で、
今回の手順を事細かに勉強しながらメモって行ったおかげで、くっそ長いです。ごめんなさい。

経緯

3年前にサーバを借りたんですが(安さと簡単そうって理由だけでlolipopだった気がする)、
今のサーバではできない、どうしてもやりたいことがいくつか出て来てしまったので
今回CUIやサーバ周りの勉強も兼ねて、さくらのVPSに乗り換えてみました。

ちなみにCUIどころかviも何それうまいの?っていうレベルですのであしからず..
また、これはマズいっていう間違いあったら教えて頂けると泣いて喜びます(´;ω;`) ブワッ

とりあえず環境は Mac OSX 10.6.8 で、さくらのVPS 512で行います!
すたーと!

1.さくらVPS コントロールパネル リモートコンソールからroot権限でログインする。

https://secure.sakura.ad.jp/vpscontrol/main/vnc

2.ますはUser/Passを設定

adduser yourUserName
passwd yourUserName
でpassword何にするん?って聞かれるので2回答える。
そすれば、passwd: all authentication tokens updated successfully.
で設定完了。実際のやり取りは以下。

[root@localhost ~]# adduser hogehoge
[root@localhost ~]# passwd hogehoge
Changing password for user hogehoge.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

このついでにrootのpasswdもデフォルトでもらったものから変更しておく。

[root@localhost ~]# passwd

sudoの実行権限をwheelグループに追加することで得るようにする。
rootってのは基本使わずに、ユーザを追加してそいつで操作するらしい。
なのでその為にそいつに権限渡してあげるって感じかね。?
su - とか、sudo コマンドを使う!

$ su -		←root権限での実行が必要なのでsuコマンドでrootに変身!
Password:
# usermod -G wheel XXXX (CentOSでは-aオプションつけなくても大丈夫!)

# id XXXX
uid=500(XXXX) gid=500(XXXX) groups=500(XXXX),10(wheel)	←追加されてるのを確認

# visudo
/usr/sbin/visudo 実行

ここでviエディタなるものを使って編集する。
なるほど、はじめてFFFFOUND!とかのh,j,k,l の意味が分かったよ。。汗

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL	←コメントアウトを外す

これ以降 sudo でroot権限になれる(Passwordはuserのもの)
su – でrootに変身する場合はPasswordはrootのものを使用する。
後から理解したんだけどこの方法にしておけばユーザを追加する時にも
wheelグループに追加するだけでおkってことなんね!(・∀・)

3.セキュリティのためSSHのデフォルト接続ポートを変更する

SSHはデフォルトでは22番ポートで接続を待っているらしいので、これを通常使用されない
1024以上の番号に変更しておく。(入口を分かりにくくする。1024~65535の値で。)
でもずっと後で、結局簡単に調べるコマンドあるらしいから気休め程度ってどこかで見た。。orz

$ sudo vi /etc/ssh/sshd_config

#Port 22	ここの下に追加
Port 1024~65535

4.公開認証鍵で SSH 接続できるようにする

基本Passでログインするのではなく、公開認証鍵使ってログインするように変更する。
さっき作った作業用IDでログイン

cd ~/ ← (ユーザーディレクトリに移動)
mkdir ~/.ssh ← (.sshディレクトリを作成)
chmod 700 ~/.ssh ← (.sshディレクトリの権限を所有者だけに限定)
chown -R sakura:sakura .ssh ← (所有者をrootからユーザに変更)
vi ~/.ssh/authorized_keys ← (公開鍵ファイルを作成、編集)

ちなみに別PCからも鍵認証でログインしたい時は、
別途そのPCで鍵ファイル作って、

cat id_rsa.pub >> .ssh/authorized_keys

みたいな感じで、鍵追記すればおk。
ちなみにこの公開鍵をGUIとかで選択しようとすると不可視ファイルで
探せないのだけれど、選択ウィンドウで
「Command」+「Shift」+「 . 」で表示できるようになる。(知らなかった!)

5.その他諸々セッティング

sudo vi /etc/ssh/sshd_config

#PermitRootLogin yes
PermitRootLogin no ← rootのログイン禁止(=rootは狙われやすいので)

#RSAAuthentication yes
RSAAuthentication yes ← RSA鍵方式のログインOK(=秘密鍵を持ってる人のみOK)

#PubkeyAuthentication yes
PubkeyAuthentication yes ← 公開鍵方式のログインOK(=秘密鍵を持ってる人のみOK)

#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys ← 公開鍵の置き場

#RhostsRSAAuthentication no
RhostsRSAAuthentication no ← リモートホスト(信頼できるホスト名とユーザー名のリスト)によるログイン禁止

#PasswordAuthentication yes
PasswordAuthentication no ← パスワード方式のログイン禁止(=総当りの阻止)

#PermitEmptyPasswords no
PermitEmptyPasswords no ← 空のパスワード禁止

#UsePAM yes
UsePAM no ← PAM(一括認証)の禁止

で保存してからssh再起動。

sudo /etc/init.d/sshd restart

ここでログアウトする前に、別のターミナルウィンドウ立ち上げてそこからログインなしで入れるか試しておく。(そこミスってるとコンパネから入らないといけない or OS再インストールからやらないといけないらしいよ。。激汗)

さくら VPS(CentOS)でシステムの文字コードを日本語にしておく(ただし、error文言とかをググっても引っかかる率が格段に下がるので自己判断でいいよ!)

sudo vi /etc/sysconfig/i18n で、
LANG="ja_JP.UTF-8" にする。

6.システムアップデートして一旦休憩!

sudo yum update で、だーっと文字が流れて、しばらくすると
Install      ** Package(s)
Upgrade      ** Package(s)

Total download size: 999 M
Is this ok [y/N]: y

みたいな感じでこんだけあったぜみたいに聞かれるので、
yes,yesと答えていればいつの間にかダウンロード初めてインスコ完了。

7.SSH接続する時のログイン方法を記録しておく。

ローカルファイルにある、/Users/***/.ssh/config に以下を書いておけば、これまでのようにいちいち
ssh -p 99999 user@host.name みたいに書かなくて済む!!!

Host sakura
	HostName **.***.***.***
	User user
	Port 9999
	IdentityFile ~/.ssh/id_rsa

これで、ssh sakura でログインできるようになった!素敵!(・∀・)
ちなみにhostがいろいろ出てくるようになると以下みたいな対応で複数持たせれるらしい!!

test.orgの場合、「id_rsa.test.org」
hoge.inの場合、「id_rsa.hoge.in」とかで保存して、configは

Host test
    HostName        test.org
    IdentityFile    ~/.ssh/id_rsa.test.org
    User            test_user
Host hoge
    HostName        hoge.in
    IdentityFile    ~/.ssh/id_rsa.hoge.in
    User            hoge_user

とか。

まーこの辺りは自分のローカル環境にバーチャルホスト切る感じと同じやね。
公開鍵の名前って別になんでもいいんね。へー(・∀・)

で、この辺りからGUIでSFTP接続試してみた。
今回はTransmit使って、SFTP接続で、ユーザ名は作業用ユーザ名入れて、
パスワードなしで、横の鍵マークから公開鍵ファイル(id_rsa)の置き場指定して、
ポートをssh用の任意で決めたやつに変更して、接続!
初回だけパスワード聞かれて、公開鍵作った時のパスワード答えて、とーった!!
これでパス使わない(使えない)&このPCからしかssh接続できない!!(`・ω・´)キリッ

8.ファイアーウォール(iptablesでパケットフィルタリング)の設定

sudo iptables -L

で現在のiptablesの設定を確認。何も設定されてないのを確認。うす。

まずiptablesがないのでつくる。

sudo vi /etc/sysconfig/iptables

で、中身は以下。
未設定の状態からSSH、HTTP、FTP、MySQLだけにポート解放する。
SSHは任意の変更したポート、
HTTP → 80、
FTP → 20,21、
MySQL → 3306 を使用。

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:SERVICE – [0:0]

-A INPUT -j SERVICE
-A FORWARD -j SERVICE
-A SERVICE -i lo -j ACCEPT
-A SERVICE -p icmp –icmp-type any -j ACCEPT
-A SERVICE -p 50 -j ACCEPT
-A SERVICE -p 51 -j ACCEPT
-A SERVICE -p udp –dport 5353 -d 224.0.0.251 -j ACCEPT
-A SERVICE -p udp -m udp –dport 631 -j ACCEPT
-A SERVICE -p tcp -m tcp –dport 631 -j ACCEPT
-A SERVICE -m state –state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, FTP1, FTP2, MySQL
-A SERVICE -m state --state NEW -m tcp -p tcp --dport ****  -j ACCEPT
-A SERVICE -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A SERVICE -m state --state NEW -m tcp -p tcp --dport 20    -j ACCEPT
-A SERVICE -m state --state NEW -m tcp -p tcp --dport 21    -j ACCEPT
-A SERVICE -m state --state NEW -m tcp -p tcp --dport 3306  -j ACCEPT

-A SERVICE -j REJECT --reject-with icmp-host-prohibited
COMMIT

で、

sudo /etc/rc.d/init.d/iptables restart

でiptablesを再起動。

再度iptablesを確認してみる。

sudo iptables -L

できてるぽい。(・∀・)

9.デーモン止めてパフォーマンスあっぷ。

もうこのレベルのことは初回でやる必要ないんじゃないかと思いつつ
記事を見つけてしまったので、とりあえずやっておこうか。(オイ

/sbin/chkconfig --list | grep ":on"

で、起動してるデーモンの状態を確認できるみたい。

acpid          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
ip6tables      	0:off	1:off	2:on	3:on	4:on	5:on	6:off
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off
irqbalance     	0:off	1:off	2:on	3:on	4:on	5:on	6:off
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off
lvm2-monitor   	0:off	1:on	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off
readahead_early	0:off	1:off	2:on	3:on	4:on	5:on	6:off
readahead_later	0:off	1:off	2:off	3:off	4:off	5:on	6:off
sendmail       	0:off	1:off	2:on	3:on	4:on	5:on	6:off
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off
syslog         	0:off	1:off	2:on	3:on	4:on	5:on	6:off

で、さくらVPS 512 での仮想ドライブは1台なのでlvm2-monitorって監視するやつがいらない?
みたいなのでoffっとくことに。

/sbin/chkconfig --level 0123456 lvm2-monitor off

こうやってランレベルを明示的に指定してoffってやらないと生き返ってくるみたい。
ちなみにランレベルってのはシステムの動作モードを表す言葉らしくて
0 : シャットダウン ( システム停止中 )
1 : シングル ユーザー モード ( root のみ )
2 : マルチ ユーザー モード ( ネットワークなし )
3 : マルチ ユーザー モード ( テキスト )
4 : 未使用
5 : マルチ ユーザー モード ( グラフィカル )
6 : システム再起動
なんだって。ランレベル3ではCUIでサーバの設定が、ランレベル5ではGUIを使ったデスクトップマシンとして使える(!)。
このあたりでほんの少しだけサーバーに近づけた気がしたお(・∀・)

10.Apache(httpd)インストール

remiリポジトリの設定

cd /etc/yum.repos.d
sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
sudo wget http://rpms.famillecollet.com/remi-enterprise.repo

Apache・PHP・MySQLをインストール

sudo yum --enablerepo=remi install httpd httpd-devel
sudo yum --enablerepo=remi install mysql-server
sudo yum --enablerepo=remi install php php-devel php-mbstring php-mysql php-pdo php-mcrypt php-pear php-xml  php-gd pcre-devel

Apache,MySQLを起動する。

sudo service httpd start
sudo service mysqld start

自動起動ONにする。

sudo chkconfig mysqld on
sudo chkconfig httpd on

MySQLのrootパスワードを変更する

mysql -u root
UPDATE mysql.user SET Password = PASSWORD('設定するパスワード')  WHERE User = 'root';
FLUSH PRIVILEGES;
quit	← quitでByeって言われてmysql抜けられる。かわいい。(・∀・)
sudo /etc/init.d/mysqld restart	← んでリスタート!

11.MySQLの設定もろもろ

MySQLの文字コードを修正。 /etc/my.cnf に以下を追記。
ただし、MySQL5.5からMySQLサーバの文字コードの指定方法が変わってるみたいで、

default-character-set=utf8 → character-set-server=utf8

に変更しないと(再)起動で引っかかる。エラーログにそんなんねーよって怒られる。
(エラーログの見方 sudo tail /var/log/mysqld.log)
で、MySQLのクライアント側での指定はそのまま。これかなりハマった。。

# character-set
character-set-server=utf8
skip-character-set-client-handshake

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8
sudo /etc/rc.d/init.d/mysqld restart
mysqld を停止中:      [  OK  ]
mysqld を起動中:      [  OK  ]

さっきrootのパスワードかけたけど、
一応ちゃんと有効になってるかを確認。

mysql -u root -p

でパスを聞かれるのでそのままEnter!
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)

怒られたのでおk。で、パス入れたら入れた。おk。

次に不要なユーザ消す。まず以下でユーザ確認。

$ mysql -u root -p mysql
mysql> SELECT user, password, host FROM user;

なんか同じようなやついっぱいいるけど、
一番上のrootでパスワード持ってて、localhostのやつだけでいいみたいなので、以下で消去!

DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );

で、も1回確認。

SELECT user, password, host FROM user;

1匹になってる。おk。

12.phpMyAdmin入れる。

以下のverは古いので最新のものを使って、コード内も適宜修正してね。

めんどくさいのでsu -で。(この辺りになったらさすがにちょっと慣れてきてる)

su -
cd /var/lib
wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/2.11.11.1/phpMyAdmin-2.11.11.1-all-languages.tar.gz
tar zxvf phpMyAdmin-2.11.11.1-all-languages.tar.gz
rm -rf phpMyAdmin-2.11.11.1-all-languages.tar.gz
mv phpMyAdmin-2.11.11.1-all-languages /var/lib/phpmyadmin

セットアップ!

cd /var/lib/phpmyadmin
cp config.sample.inc.php config.inc.php
vi config.inc.php

13.ようやくhttpdアクセスでブラウザ確認!

httpd.confの設定

/etc/httpd/conf/httpd.conf

ServerNameの設定したり、DocumentRoot設定したり。
この辺りは各々自由にどうぞ。(無責任w)

いや、ここを端折ってる理由は実は、公開ディレクトリ持つ場所について
運用のしやすさとセキュリティ面でめちゃくちゃ悩んだんだけど、
この辺りはちょっと経験値がなさすぎて、まずは自分一人しか触らないので
運用のしやすさを取りますた。あと、ディレクトリのpermission問題でまた
めちゃめちゃ引っかかった。この辺りもどの程度までセキュリティ的におkとされてるのか
みたいなさじ加減がいまいちよく分からない。。むー。。

で、まー、リスタート!

service httpd restart

14.DNSの設定してー、mailサーバgoogleAppsにしてー、
wordpress引っ越ししてー、とかもろもろ。

この辺りは本当に人それぞれなので省略w
やったのはドメインとDNS紐づけて、メールサーバを全部googleAppsでGMailに任せちゃって(MXレコードの登録)とか、blogデータをMySQLとWordPress使って引っ越しさせてとか、
いろいろごにょごにょ。

このあたりでDNSの設定とか、IPアドレスのこととか、
ネームサーバのゾーン編集とかとかMXレコードやらサブドメインの解釈とか、
.htaccessでの細かいファイル指定とか、いろいろ分かってスッキリしたよ。:-)

これで一旦サーバ移行は終しまいー!!
あとはやりながら少しずつ慣れて行きますよっと。:-)

おし、ということでこれで好き勝手に自分のサーバいじれるようになったので
このサーバ用にサイト作り直したりとか、(今何も上げてないからリンク切ればっかりw)
lab作ったりとか、ネットワーク使ったアイデアに進めたりとか、
DB使ったアイデアとか枠組み広がってwktkしてきたよ!!(・∀・)

あとlolipopさんこれまでどうもありがとうございました!!!!泣
卒業だー(・∀・)ワーイ

以下 CUIとかvi の 使い方コマンドメモ。w

cd (カレントディレクトリを移動)
ls (ファイルリストを表示)
ls -la (所有権確認)
cp (ファイルをコピー)
mv (ファイルを移動、名前の変更)
rm (ファイルを削除)
mkdir (ディレクトリを作成)
chmod (パーミッションを変更)-Rでそのディレクトリ以下全部!
chown (所有者を変更)

whoami = ユーザー名を確認

/Users/<ユーザー名>(ホームディレクトリ)
pwd  = 現在地(カレントディレクトリ)

cd ~ = /Users/<ユーザー名>の略
cd	 = ホームディレクトリに移動

mkdir = ディレクトリ作成
mv    = ファイルの移動・リネーム
mv test test2	(test2フォルダがあれば移動、なければリネーム)

echo > test.txt = test.txtファイル作成

rm     = ファイル消去
rm -rf = ディレクトリ消去 ("-rf"オプションつける)

cp -r  = コピー
cp test test2 (testディレクトリをtest2ディレクトリにコピー)
cp test/ test2(testディレクトリの中身をtest2ディレクトリにコピー)

dig domain (現在紐づけられてるDNSとかMXレコードとか表示)
echo $PATH 環境変数の確認

man コマンド (マニュアル読める!!-h とか --help オプションもある!)
tail /var/log/mysqld.log (エラーログの確認)

以下も始めに読みましたw
http://homepage.mac.com/notex/osx/02/index.html
シェルとは
これでかなりターミナルでの作業が効率的になったと思います。さて、先程からシェルというキーワードが出てきていますが、このシェルとはなんなんでしょうか。 シェルとは、ユーザーが入力したコマンド行を読み込み、解釈し、実行までを導くプログラムです。例えばユーザーが”ls<リターン>“と入力した時、”ls”コマンドを実行し、結果(ファイルのリスト)をターミナル画面に表示させているのはシェルが行っているのです。ターミナルというアプリケーション自体は、キー入力とウィンドウへのテキスト表示を行っているだけにすぎないとでも思って下さい。実際はシェルがユーザーインターフェイス(CUI)を提供しているのです。ターミナル意外のアプリケーションでも、シェルを実行できれば、ターミナル同様にファイル操作などを行えます。

http://homepage.mac.com/notex/osx/02/img/02.png
図2 ターミナルとシェルの関係
シェルの最も重要な機能は、文字の入出力(標準入出力、エラー出力)の制御です。通常はキー入力が標準入力、画面への出力が標準出力となり、これらをシェルが制御しています。この機能をうまく利用すると、標準入出力をファイルに割り当てることができます。前回、空のテキストファイルを作成するのに、”echo > test.txt”としましたが、これは”echo”(何も出力しない)を”test.txt”に標準出力せよ、ということです。”>”をリダイレクションと言い、標準出力をファイルに切り替えます。結果として空のテキストファイル”test.txt”が作成されます。

参考サイト

ちなみにアカベコマイリさんに超絶親切丁寧に書かれてるのでこちらを読んだ方がいいよ!!(遅
本当に他にもたくさん皆様の情報を助けに頑張れました、ありがとうございました。。m(_ _)m

以下、覚えている限りですが、、(●が特に初心者の自分にも分かりやすかったです。:-)

はじめてのさくら VPS + CentOS の初期設定からチューニングなどの作業まとめ | ウェブル
CentOSをサーバーとして活用するための基本的な設定 – さくらインターネット創業日記
さくらのVPS インストールまとめ:浜村拓夫の世界
さくらインターネットVPSの初期設定をまとめてみた | まったりプログラミングしたい><
さくらの格安VPSを借りたらいつもやっている設定いろいろ | IDEA*IDEA
さくらVPSを借りたら絶対にやるべき11のタスク
さくらのVPS入門
さくらのVPS « mimumemo

you