HOKYPOKY.BLOG

Rackspace!! (1) – CentOSを入れ初期設定を行う

英語の電話は済みましたか?おつかれ様でした。英語の電話が終わりしばらくするとアクティベートされます。
まだ契約していないという人は、今後の参考にしてください。

使用するOSはサーバーがCentOS 5.5、クライアントはMac OS X 10.6 (Snow Leopard)です。

とても長いので目次をつけました。

  1. Rackspace Cloud ServersにCentOSをインストール
  2. CentOSの初期設定 – SSHの設定
    1. CentOSの初期設定 – SSHの設定
    2. さらに強固な設定にする
      1. 新しいユーザーを作る
      2. 作成したユーザーに認証鍵を登録する
      3. ルートユーザーではログインできないようにする
      4. パスワードではログインできないようにする
      5. 認証鍵でログインできるようにする
  3. CentOS初期設定 – その他の設定
    1. HOSTNAME= の内容をFQDNに書き換える
    2. サーバのグローバルIPアドレスに対応する行のホスト名をFQDNに書き換える
    3. ロケールの変更
    4. タイムゾーンの変更
  4. 再起動する
  5. バックアップをとる
  6. まとめ

Rackspace Cloud ServersにCentOSをインストール

アクティベートしたら早速管理画面に入ります。

Rackspace 管理画面 ログイン

スマートな管理画面です。左メニューよりHosting > Cloud Servers を選択してください。

Rackspace 管理画面 サーバー一覧

サーバー一覧が表示されます。ボクの場合はすでにサーバーインスタンスを1つ作ってあります。そのままAdd Serverをクリックします。

Rackspace 管理画面 OS選択

選べるOSがいっぱいありますね。タブからWindowsを選択するとWindowsサーバーを選択することもできます。今回は愛しのCentOS5.5を使うことにします。今後このブログではCentOSを使っての設定方法になります。
Red Hat Linux(REHL)、FedoraはCentOSと同系列ディストリビューションですので、流用は効くと思いますが自分は触ったことありません。CentOSはREHLのクローンで商用サポートのないOS。古臭いですが、枯れた確かなパッケージを使っています。FedoraもREHLからの派生ですが、最新の技術を積極的に取り込むディストリビューションです。

Rackspace 管理画面 名前 スペック選択

サーバーの名前を付けてスペックを選択しましょう。256MBのプランにします。HDDは10GBです。CPUはインスタンスに比例するらしいですがコンパイルなどを見る限り遅くはありません。EC2の2倍速いらしいです。
名前はFQDN(サブドメインを含むドメイン名)にしておくのがいいですよ。サブドメインなしで運用する場合はドメイン名で。

CentOSの初期設定 – SSHの設定

しばらくすると申請完了メールがとどきます。IPとrootのパスワードが書いてあります。
危険ですので早速rootのパスワードを変更しましょう。ターミナルからSSHを使ってのリモートで設定していきますのでクライアントでの作業とします。

メールに書いてあるIPと危険なrootパスワードをつかってログインします。
ターミナル(Macだとターミナル.app)を開きます。

$ ssh root@xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxはメールに付いていたIPアドレスに置き換えてください。
また、Enterを押すとなにやらyes/noを聞かれます。これはサーバー側から証明書が送られてくるので記憶するかどうかという質問です。今後、パスワードログインをしない方向で考えていますのでyesとしておきましょう。

rootでログインできました。怖いので早速パスワードを変更します。

# passwd
(current) UNIX password:
New UNIX password:
Retype new UNIX password: 

現在のパスワードを聞かれ、新しいパスワードを二回入力するとパスワードが変更されます。
今後、メールに記載されているパスワードは何の意味もありませんし、今回入力したパスワードは再入手できませんので大切に保管してください。

次にポートをチェックしましょう。初期設定では22番(SSH)以外閉じられています。
また、Webサービスを展開することを考えていますので、HTTPの80番ポートを開けておきましょう。
別にこれはあとででもいいです。

# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*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
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

80番ポート(HTTP)を開けたい場合は太字を追加してください。
変更した場合はファイアーウォールを再起動します。

# service iptables restart

さらに強固な設定にする

ひとまず危険な状態を逃れることができました。ウミガメの子どもが海に入りカモメの群れから逃れた感じです。しかし海にはまだ危険がたくさんあります。いきなりルートユーザーでログインできることや、そもそもパスワードでログインできてしまうことの危険を考えると怖いです。

そこで以下のようなカッチカチの設定にしましょう。

  1. 新しいユーザーを作る
  2. 作成したユーザーに認証鍵を登録する
  3. ルートユーザーではログインできないようにする
  4. パスワードではログインできないようにする
  5. 認証鍵でログインできるようにする

カッチカチやぞ!

パソコンが盗まれ、ユーザー名がばれず、さらにルートユーザーパスワードがばれない限り安心です。絶対にパソコン内にユーザー名、パスワードを保存しないようにしましょう。
もしもパソコンが盗まれた場合にも、そのパソコンからアクセスされないようにすればいいわけです。
パソコンが壊れてしまった場合、二度とログインできなくなってしまうほどです。できれば二台設定しておきたいです。iPadやiPhoneのSSHクライアントソフトもありますのでそれらを使うのがいいでしょう。

以前もCentOSでのSSHの設定について書いたのであわせて読んでください。

サーバーつくった。その3 – SSHでログインするよ。

ただ、以下の手順で設定できますのでこのまま進めます。

新しいユーザーを作る

あたらしいユーザーは「pickles(ピクルス)」にします。適宜読み替えてください。また、推測されないユーザー名がいいですね。自分の名前やアカウント名は避けたほうがいいでしょう。

$ ssh root@xxx.xxx.xxx.xxx
# useradd pickles
# passwd pickles
New UNIX password:
Retype new UNIX password: 

もし間違えてしまった場合やユーザーを消したい場合は以下で削除できます。

# userdel pickles

作成したユーザーの権限を替えます。wheelグループに「pickles」を追加しましょう。

# usermod -G wheel pickles

以下を実行して「wheel:x:10:root,pickles」と書いてある行があればOKです。

# cat /etc/group

wheelグループ以外のユーザーはrootになれないように設定します。

# vi /etc/pam.d/su

#auth       required     pam_wheel.so use_uid // と書いてある行をさがす
auth       required     pam_wheel.so use_uid // 先頭の「#」を削除します

これで作成したユーザーのみがrootになれるようになりました。
SSHから抜け(Terminalを終了)、再度作成したユーザーでログインしてみます。
(この時きかれるパスワードはpicklesのパスワードとなります。)

$ ssh pickles@xxx.xxx.xxx.xxx

今ログインしているユーザーがだれか確かめます。

$ whoami
pickles

次にrootユーザーになれるか試してみます。このとき聞かれるパスワードはルートのパスワードとなります。

$ su -

ルートになったか確認します。と、その前に$が#に変わっていることに気が付きませんか?
#はルートユーザーであるということを示します。一応確認します。

# whoami
root

rootユーザーを終了し、picklesユーザーに戻ります。

# exit
作成したユーザーに認証鍵を登録する

これではパスワードログインのできるユーザーが増えてしまっただけなので、次にすすみます。
次は認証鍵とよばれるものを設定していきます。

認証鍵がなんなのかということはかわいいイラスト付きのこのブログを読んでみてください。
小悪魔女子大生のサーバエンジニア日記 » Blog Archive » 公開鍵暗号方式によるユーザー認証のしくみ

まずアクセス元するパソコンで鍵を作ります。
ボクはMacなのでMacでの説明となります。

その前に、既に鍵が作られていないかチェックします。

$ ls ~/.ssh/

ここにid_rsa.pubというファイルがある場合は以下をスキップしてください。
ない人のみ以下を進めてください。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usako/.ssh/id_rsa): // 空Enter
Enter passphrase (empty for no passphrase): // 空Enter
Enter same passphrase again: // 空Enter

これで認証鍵が設定されました。passphraseを設定しても構いません。もし設定する場合は8文字以上の大文字小文字数字を混ぜたものにしたほうがいいそうです。ただ、運用上パスワードがたくさんできてしまいヒューマンエラーが起きてしまうことやpassphraseがあまり意味を成さないことを考えるとそのまま空Enterでも問題ありません。

次にこれをサーバーに転送します。

$ scp ~/.ssh/id_rsa.pub >> pickles@xxx.xxx.xxx.xxx:pickles.pub

SSHログインして、転送された鍵を登録します。注意するのはルートユーザーではなくpicklesでの作業となります。

$ ssh pickles@xxx.xxx.xxx.xxx
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ cat pickles.pub >> ~/.ssh/authorized_keys2
$ mv pickles.pub
$ cd ~/.ssh
$ chmod 600 authorized_keys2
ルートユーザーではログインできないようにする

SSHのコンフィグを行います。以下はまとめて設定できます。
ルートユーザーになり、コンフィグファイルを開きます。

$ su -
# vi /etc/sshd_config

rootでのSSHログインをOFFにします。

Before:

#PermitRootLogin yes

After:

PermitRootLogin no
パスワードではログインできないようにする

パスワードでのログインを無効にする。

Before:

#PasswordAuthentication yes

After:

PasswordAuthentication no

空パスワードでのログインを無効にする

Before:

#PermitEmptyPasswords no

After:

 PermitEmptyPasswords no
認証鍵でログインできるようにする

これはデフォルトでONになっているので何も設定しないでもOKです。
もし以下のようになっていたらyesまたはコメントアウトしてください。

Before:

PubkeyAuthentication no

After:

PubkeyAuthentication yes

または

#PubkeyAuthentication yes // 一応デフォルト値でコメントアウトする

最後に上の方にもどりログ出力のレベルを替えておきます。

Before:

#SyslogFacility AUTH

After:

SyslogFacility AUTHPRIV

以上でSSHの設定は終わりです。

CentOS初期設定 – その他の設定

その他やっておくといいことです。

HOSTNAME= の内容をFQDNに書き換える。

サーバーインスタンスを作る際にいれた名前がFQDNで設定していると思うので設定されていると思います。

# vi /etc/sysconfig/network
HOSTNAME=www.example.com

サーバのグローバルIPアドレスに対応する行のホスト名をFQDNに書き換える

これも設定されていると思います。

# vi /etc/hosts
127.0.0.1     localhost localhost.localdomain
xxx.xxx.xxx.xxx     www.example.com

ロケールの変更

日本にする場合は以下です。

# vi /etc/sysconfig/i18n
LANG="ja_JP.utf-8"

タイムゾーンの変更

サーバー時間を日本にする場合は以下です。

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/sysconfig/clock
ZONE="Asia/Tokyo"

ロケーションやタイムゾーンに関してはあくまでサーバーの設定ですので、アプリケーションでのロケーションやタイムゾーンはアプリ側できちんと設定、実装するようにしてください。

時刻同期の設定も行ないます。

# yum install ntp
# /sbin/chkconfig ntpd on
# /etc/init.d/ntpd start

参考文献
Rackspaceで借りたCentOSサーバで最初にする設定 | maeda.log

再起動する

以上でサーバーのコンフィグが終わりましたので再起動しましょう。
またこれから管理画面での作業となります。

管理画面左メニューより Cloud Servers に入ると先程作成したサーバーインスタンスが表示されています。これをクリックします。

以下のような画面になりますので、Rebootをクリックします。程なく再起動されます。

Rackspace 管理画面 サーバーインスタンス

ちなみにSSHからも再起動できます。

# reboot

バックアップをとる

再起動したら、先程の画面のタブよりImagesを選択します。以下のような画面が現れます。

「Daily Backup Window (GMT):」「Weekly Backup Window:」からバックアップの周期を選択できます。
Weeklyで水曜日のバックアップにしました。一応想定するユーザーが一番少なそうな日です。

まとめ

以上、とても長くなりましたがRackspaceの初期設定が完了しました。最後まで読んでくれてありがとうございます。
ここまでの設定はCentOSでのものとなりました。途中にも書きましたがREHLやFedoraも同様に設定できますし、サーバー用途としては一番使われているディストリビューションです。

またRackspaceに限らず、サーバーを運営する際のSSHの設定は細かく説明したつもりですので他のサービス、サーバーをセットアップする際も参考にしてみてください。