2010年9月22日水曜日

さくらのVPS Ubuntu 10.04 セカンダリDNSサーバとNTPの設定

Ubuntu 10.04 をインストールしてきた、さくらのVPS ですが、OSそのものの設定についてはあとちょっとだけ残っている部分があります。

セカンダリDNSサーバを設定する


標準のCentOSの時に控えてきた情報の中で、まだ設定していない項目があります。セカンダリ(2つ目)で使用する DNS サーバと、 NTP サーバです。まずは DNS リゾルバの設定です。設定ファイルは /etc/resolv.conf ですので、このファイルを root 権限で編集します。インストールしたそのままの状態では
search (インストール時に設定したDNSサーチドメイン名)
nameserver (インストール時に設定したDNSサーバ)
という状態で、DNSサーバは1個設定されている状態だと思います。すくなくとも1個設定してあり、このDNSサーバが稼働していれば特に問題はありませんが、CentOSでの設定に合わせる形で
search (インストール時に設定したDNSサーチドメイン名)
nameserver (インストール時に設定したDNSサーバ)
nameserver (設定を控えておいたセカンダリDNSサーバ)
と1行追加しておきましょう。ファイルを変更したら一般ユーザでDNSでの名前解決ができることを確認しておきましょう。
ubuntu@foobar$ dig google.com

; <<>> DiG 9.7.0-P1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22486
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 128 IN A 66.249.89.99
google.com. 128 IN A 66.249.89.104

;; Query time: 14 msec
;; SERVER: (ここに /etc/resolv.conf で設定した nameserver のIPアドレスが表示されます)
;; WHEN: Wed Sep 22 15:21:48 2010
;; MSG SIZE rcvd: 60
このようにIPアドレスが検索できれば大丈夫です。

Ubuntu は生き物だ ( apt-get によるアップデート)


ここまで設定して、さくらのVPS からインターネット上のリソースを利用できるようになりました( 逆に、さくらのVPSマシンはサービスをインストールしていないのでまだコンソールからしか操作できません )。 ここで、Ubuntu システムのアップデートをしておきましょう。ログインすると
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/

(途中略)

8 packages can be updated.
8 updates are security updates.

ubuntu@foobar$
などと表示されるかと思います。ここで重要なのは最後の 2 行の部分で、この例では 8 個のパッケージがアップデート可能で、そのうち 8 個が ( この場合は全部ですね ) がセキュリティ関連のものだという意味になります。インストール時にはこういったアップデートは手動で行うように設定したので、自動的にアップデートしたり再起動したりすることはありませんが、Windows Update のように折を見て更新しておく必要があります。アップデートするためには
ubuntu@foobar$ sudo apt-get update
[sudo] password for ubuntu: (ログインパスワードを入力します)
Hit http://jp.archive.ubuntu.com lucid Release.gpg
Hit http://jp.archive.ubuntu.com lucid-updates Release.gpg

(途中略)

Hit http://security.ubuntu.com lucid-security/multiverse Sources
Reading package lists... Done
ubuntu@foobar$
として、(一応念のため) パッケージリストを最新状態にアップデートした上で、アップデート操作を行います( 以降、sudo の部分は # プロンプトで省略するので適宜読み替えてください)。
# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
bzip2 dpkg ... ( ここにアップデート対象のパッケージが列挙されます )
8 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 45.8MB of archives.
After this operation, 4096B of additional disk space will be used.
Do you want to continue [Y/n]?
ここで対象パッケージを確認したうえで、質問に "Y" と答えるとアップデート作業がはじまります。アップデート対象パッケージによっては再起動が必要になる場合がある ( その旨が表示されます ) ので、念のためブートローダ周りを確認して ( コンソール設定でスクリプトの内容も変更したので注意が必要です。grub 関連パッケージがアップデートされた場合には要注意です ) 再起動します。

システム時刻を同期させる


インストール時に控えていた項目で設定を入れていないのは NTP だけとなりました。現在の状況では、NTP サービスすらインストールされていないので、インストールします。パッケージ名は "ntp" なので、これをインストールするということで apt-get コマンドを使ってインストールします。
# apt-get install ntp
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
ntp-doc
The following NEW packages will be installed:
ntp
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 559kB of archives.
After this operation, 1450kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com/ubuntu/ lucid/main ntp 1:4.2.4p8+dfsg-1ubuntu
2 [559kB]
Fetched 559kB in 0s (790kB/s)
Selecting previously deselected package ntp.
(Reading database ... 41610 files and directories currently installed.)
Unpacking ntp (from .../ntp_1%3a4.2.4p8+dfsg-1ubuntu2_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up ntp (1:4.2.4p8+dfsg-1ubuntu2) ...
* Starting NTP server ntpd [ OK ]

今回は一つのパッケージでしたが、複数のパッケージを一度にインストールしたり、他のパッケージに依存しているものは必要なパッケージをリストアップして同時にインストールしれくれます。また、 ntp パッケージをはじめ、多くのパッケージでは、自動的にサーバサービスが起動されるようになっています。とはいえ、ntpサーバは ubuntu のサーバを参照するように設定されているので、ここは変更しておきましょう。設定ファイルは /etc/ntp.conf で
 14  
15 # You do need to talk to an NTP server or two (or three).
16 # server ntp.ubuntu.com ( デフォルト設定のサーバは # でコメントアウト )
17 server ( 控えておいた ntp サーバをここに記入 )
18
というふうに書き換えます。書き変えたら、ntpサーバを再起動します。
# service ntp restart
* Stopping NTP server ntpd [ OK ]
* Starting NTP server ntpd [ OK ]
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
(設定したサーバ).GPS. 1 u 2 64 1 0.406 2.388 0.001
#
ntp サービスを再起動したところで、 ntpq -p コマンドで設定したサーバが参照されていることを確認してください。このような形でサービスを追加していくのが今後の構築の流れになります。ただ、今回はセキュリティ面を特に気にせずにサービスの導入を行いましたが、設定もれなどがあるとそこが弱点になるので、ひとつひとつ段階を踏んでサービスを増やしていくと良いでしょう。なお、 Ubuntu 10.04 の ntp サービスでは、設定ファイルで特に明示しないかぎり外部からのntpサービスへの参照を拒否する設定となっています( 本当にそうなのか設定ファイルを確認してください )。

次回は


インターネット上でサービスを公開する上ではセキュリティは避けて通れない話題ですが、そのあたりを書いてみたいと思います。

2010年9月18日土曜日

さくらのVPS Ubuntu 10.04 コンソール環境の整備

さてみなさん、さくらのVPS に Ubuntu をインストールすることはできたでしょうか? 微妙に誰も読んでない気もしないではないのですが、気にせず続けていきたいと思います。前回の作業でインストールはしたけどサービスとしては何も稼働していない、純白の花嫁のような環境ができたのですが、インストーラでは設定しきれない部分について拾っておきたいところです。なお、この「何一つサービスを公開していない」という状況は裏を返せば「攻撃を受ける要素がない」という状況なので、このまましばらく設定を続けていきたいと思います。

コンソール環境の整備しよう


さくらのVPSでは、VPSのシリアルポートをコンソール端末として使用できる「リモートコンソール」と、ディスプレイとキーボード相当に相当する「VNCコンソール」が利用できますが(現在「VNCコンソール」はベータ版扱いでまだ公式なものではありません)、このコンソール環境についても標準OSである CentOS の時と同じようにブートローダーやログインできるように整備しておくと、いざというときに役にたちそうです。

「リモートコンソール」からログインできるようにしよう


ということで、VPSのシリアルポートに相当する「リモートコンソール」でログインできるようにしてみたいと思います。UNIX や Linuxマシンでは端末を監視するのに getty という仕組みを使い、 getty は OS が起動した直後に実行される init で実行されます。Ubuntu 10.04 では init の挙動を /etc/init ディレクトリの設定ファイル群で指示する形になっています。実際に /etc/init の中をのぞいてみると、tty1.conf や tty2.conf といったファイルがあるのが確認できるかと思います。この設定ファイルにならってシリアルコンソール用の設定を作ります。最初のシリアルポートは /dev/ttyS0 ですので、/etc/init/ttyS0.conf を以下の内容で作成します。
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -8 115200 ttyS0
といっても、デバイスと通信速度以外は tty1.conf と一緒なので、
# cd /etc/init
# cp tty1.conf ttyS0.conf
# vi ttyS0.conf
( 速度を 115200, デバイスを ttyS0 に変更するよう内容を編集 )
というふうにすると良いでしょう。ファイルの作成が終わったらVPSを再起動すると「リモートコンソール」にも Login: プロンプトが出現し、ログインして作業できるようになります。

「リモートコンソール」でブートローダも制御できるようにしよう


これで、「リモートコンソール」でログインできるようになりましたが、VPSの電源投入時や再起動時に VNC コンソール同様にリモートコンソールブートローダの制御も行えるようになるとさらに安心できそうです。これは Ubuntu が起動するまでの部分ですので、さきほどの getty や init ではなく、ブートローダの設定を変更することになります。VPSの標準OSの CentOS では grub v1 が採用されていましたが、 Ubuntu では grub も新バージョンの grub v2 が採用されています。 grub 2 になって様々な部分が拡張され、より複雑になってしまいましたが、設定は /etc/default/grub で指定し、各種スクリプトなどを使い、/usr/sbin/update-grub コマンドでそれらを反映させる仕組みとなっています。

今回は標準の CentOS と同じように、リモートコンソールとVNCコンソールの両方で制御を行うことを目標にしますが、現行の Ubuntu 10.04 のスクリプト群では複数のデバイス ( この場合はシリアルポートとディスプレイ ) を入出力デバイスをして使うことは想定されていない状況なので、スクリプトにも手を入れる必要があります。

さしあたり、設定ファイル /etc/default/grub の冒頭の部分を
# If you change this file, run 'update-grub' afterwards to update         
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
という内容から
# If you change this file, run 'update-grub' afterwards to update         
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
# GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="nosplash console=tty1 console=ttyS0,115200n8r"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
GRUB_TERMINAL_INPUT="serial console"
GRUB_TERMINAL_OUTPUT="serial console"
と書き換えてください。ポイントは
  • GRUB_HIDDEN_TIMEOUT をコメントアウト
  • GRUB_CMDLINE_LINUX_DEFAULT と GRUB_CMDLINE_LINUX を編集 ( console= は2か所あり、tty0 ではなくて tty1 を指定してください )
  • GRUB_SERIAL_COMMAND, GRUB_TERMINAL_INPUT, GRUB_TERMINAL_OUTPUT を新規に作成
  • これ以降の部分はそのままに
というところです。また、このようにGRUB_TERMINAL_OUTPUT を指定すると /usr/sbin/grub-mkconfig スクリプトの中のチェックに引っ掛かりエラーとなるので、/usr/sbin/grub-mkconfig の 145 行目をコメントアウトします。
141       fi
142     fi
143   ;;
144   xconsole | xserial | xofconsole) ;;
145 #   *) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1;;
146 esac
147
148 # check for terminals that require fonts
149 case ${GRUB_TERMINAL_OUTPUT} in 
また、この書き方をするとシリアルポートを使用しないものとみなされ、GRUB_SERIAL_COMMAND の設定内容が無視されてしまうので、/etc/grub.d/00_header の 68 行目について
67 case ${GRUB_TERMINAL_INPUT}:${GRUB_TERMINAL_OUTPUT} in
68   *serial*:* | *:*serial*)
69     if ! test -e ${grub_prefix}/serial.mod ; then
70       echo "Serial terminal not available on this platform." >&2 ; exit 1
71     fi
72
73     if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
74       grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
75       GRUB_SERIAL_COMMAND=serial
76     fi
77     echo "${GRUB_SERIAL_COMMAND}"
78   ;;
79 esac
と、serial:* | *:serial) から *serial*:* | *:*serial*) へと変更します(念のため各ファイルについてはオリジナルのものを保存して、元に戻せるようにしておきましょう)。

ここまできたら、update-grub コマンドを root 権限で実行します。
# /usr/sbin/update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-24-generic
Found initrd image: /boot/initrd.img-2.6.32-24-generic
Found memtest86+ image: /boot/memtest86+.bin
done
#
エラーが出ずに正常に更新されたようであれば、再起動してうまくいくかどうか確認します。うまく設定できたら、VNCコンソールの ALT + F1~F6 キーで切り替えられる仮想コンソールの設定について粛清します。tty1 と tty2 だけ残しておけば大丈夫だと思いますので、
# rm /etc/init/tty6
...
# rm /etc/init/tty3
と設定ファイルを消して資源の節約をはかっておきましょう。

今回のTips


これで標準のCentOSの時のようにコンソールが使えるようになったかと思いますが、作業についての小技を紹介しておきたいと思います。
  1. Ubuntu の標準では root ユーザのパスワードが利用できない
  2. Ubuntu の標準では root のパスワードが利用できない設定となっています。これはパスワードで特権ユーザである root ユーザの利用をするのではなく、資格のあるユーザが必要に応じて root 権限でコマンドを発行することにより事故を防ごうというものです。コマンド実行例ではその部分についてばっさり省略して、root 権限でコマンドを実行することを # プロンプトで示していますが、実際に作業を行う際には sudo コマンドを活用してください。sudo コマンドは
    $ whoami
    chonan
    $ sudo whoami
    [sudo] password for chonan: (ここでログイン時のパスワードを入力します)
    root
    $
    といったふうにroot権限でコマンドを実行するのに使います。なお、sudo コマンドの詳しい使用方法についてはマニュアルや他サイトの解説を参考にしてください。
  3. テキストエディタは何を?
  4. 今回はじめてテキストファイルを編集するシチュエーションが出てきましたが、テキストエディタについては詳しく触れませんでした。私はこういったオペレーションをよくやるので、vi や vim などの vi 系のエディタを愛用しています。vi はちょっと癖があってという人は、nano というエディタが Ubuntu の最小構成でも利用できるので、これを使うのが良いと思います。emacs 系のものは最小構成には入っていないので、nano か vi を使ってしばらくは凌いでください :)


次回予告


書きだすとどうしても分量が増えてしまいますが、次回は引き続きインストーラーでカバーされなかった内容の設定について書きたいと思います。