仮想サーバひとつの管理権限をまるごともらえるさくらVPSが便利そうだったので契約してみた.これならレンタルサーバでは動かせないような高負荷のサービスも運用できそうだ.
デフォルトのOSはCentOS 5.5 x86_64だったけど,カスタムOSとしてUbuntu 10.04 LTS amd64が利用可能だったのでそちらに切り替えて運用している.
備忘録として,Ubuntuのインストール手順とセキュリティ設定などについてまとめておく.
構成や設定について
- サーバ版Ubuntu 10.04を使う
- sshサーバのみ立ち上がった状態にする
- sshサーバのポート番号を変更する (例では22から12345に変更している)
- sshサーバは公開鍵認証のみ許可する
- ufwを使ってファイヤーウォールを設定し,sshのポートのみ開く
- ロケールをja_JP.UTF-8にする
- デフォルトエディタを変更する
Ubuntu 10.04のインストール
以下のさくらVPSのカスタムOSインストールガイドを参考に入れる.
インストールされるUbuntuはサーバ版で,デフォルトではGNOMEのデスクトップ環境はインストールされない.
ここで注意点がひとつ.
カスタムOSのインストールを開始すると,ブラウザ上でJavaによるVNCコンソールが立ち上がってインストール画面が表示されるが,Google Chrome 10 for Mac (dev版)ではVNCコンソールの画面が一向に表示されず,インストールを進めることができなかった.Safariなどの別のブラウザで再度インストールを試したら大丈夫だった.
以下の画面が出たまま進まなくなった場合はVNCコンソールの起動に失敗している可能性があるので,再度他のブラウザで試してみると解決するかもしれない.
sshの公開鍵の設置
セキュリティ対策として,sshでサーバにログインする際はパスワード認証ではなく公開鍵認証を使うようにする.
まず,VPSサーバのログイン元として使うマシン上で秘密鍵と公開鍵のペアを作成する.ログイン元のマシンに~/.sshのディレクトリが存在しない場合は,以下のようにあらかじめmkdirしておく.~/.sshのパーミッションは700にし,他のユーザから見えないようにする.
local$ mkdir -m 700 ~/.ssh
ssh-keygenを使うと簡単に鍵のペアを作れる.
local$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/mickey/.ssh/id_rsa): .ssh/id_rsa_sakura Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in .ssh/id_rsa_sakura. Your public key has been saved in .ssh/id_rsa_sakura.pub. The key fingerprint is: 01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef mickey@local The key's randomart image is: +--[ RSA 2048]----+ | | | o o | | ** ** | | * * * * | | * * * * | | * * * * | | * o * | | o o | | | +-----------------+
拡張子が.pubの方が公開鍵.ちなみに上のrandomart imageは適当なので気にしないように.
各鍵ファイルのパーミッションを設定して他のユーザから見えないようにし,公開鍵ファイルの中身を確認する.
local$ chmod 600 ~/id_rsa_sakura ~/id_rsa_sakura.pub local$ cat ~/id_rsa_sakura.pub
公開鍵の中身をコピーしておく.
一度sshでVPSサーバ上にログインし,公開鍵の中身をVPSサーバの~/.ssh/authorized_keysに登録する.パーミッションも設定しておく.
sakura$ mkdir -m 700 ~/.ssh sakura$ echo 公開鍵ファイルの中身 > ~/.ssh/authorized_keys sakura$ chmod 600 ~/.ssh/authorized_keys
手元のマシンの別のターミナルから公開鍵認証でsshログインできるかどうかを確認する.
local$ ssh -i ~/.ssh/id_rsa_sakura username@www12345a.sakura.ne.jp
ログインできればOK.
sshサーバの設定
以降のコマンド作業はVPSサーバ上で行う.
デフォルトのsshサーバの設定はお世辞にもセキュリティ的によいとは言えないので,変更する.
VPSサーバのsshd_configを書き換え,以下の設定変更を行う.
- sshのポート番号を22から他の番号に変える (10000〜65535あたりが良いらしい)
- ssh経由でrootログインできないようにする
- パスワードによる認証を不可にする (公開鍵認証のみ許可)
$ sudo vi /etc/ssh/sshd_config - Port 22 + Port 12345 - PermitRootLogin yes + PermitRootLogin no - #PasswordAuthentication yes + PasswordAuthentication no
/etc/serviceに登録されているsshのポート番号を変更する.
$ sudo vi /etc/services - ssh 22/tcp # SSH Remote Login Protocol - ssh 22/udp + ssh 12345/tcp # SSH Remote Login Protocol + ssh 12345/udp
sshd_configの設定が正しく書けているかチェックする.何も出力されなければOK.
$ sudo sshd -t
sshdを再起動する.
$ sudo service ssh restart
念のため現在sshでログインしているセッションは残したまま,別のターミナルからsshでVPSのサーバにログインし,設定が反映されていることを確認する.問題がある場合はsshd_configの設定を見直す.
ufwによるファイヤーウォールの設定
Ubuntuにデフォルトで入っているファイヤーウォールの「ufw」を使い,不要なポートに対する外部アクセスを制限する.ここではsshのポートのみ開いた状態にする.
まず,現在のufwの状況を確認する.
$ sudo ufw status Status: inactive
デフォルトでは動いていない.
全てのポートへのアクセスを遮断するようにルールを変更する.この設定はufwを有効にするまでは反映されない.
$ sudo ufw default deny Default incoming policy changed to 'deny' (be sure to update your rules accordingly)
sshのポートのみ開ける.
$ sudo ufw allow 12345 Rules updated
ufwを有効にする.
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
ufwが動いていることを確認する.
$ sudo ufw status Status: active To Action From -- ------ ---- 12345 ALLOW Anywhere
ufwの設定を間違えてsshログインできなくなってしまった場合でも,VNCコンソールからはログインできるので焦らなくても大丈夫.
ロケールの変更 (ja_JP.UTF-8)
システムのロケールをデフォルトのen_US.UTF-8からja_JP.UTF-8に変更する.
$ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= $ sudo locale-gen ja_JP.UTF-8 Generating locales... ja_JP.UTF-8... done Generation complete. $ sudo update-locale LANG=ja_JP.UTF-8
再ログインすると設定が反映される.
$ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
パッケージのアップデートとインストール
パッケージを最新のものにアップデートする.
$ sudo apt-get update $ sudo apt-get upgrade
好みで運用に必要なパッケージをインストールする.
$ sudo apt-get install build-essential $ sudo apt-get install zsh $ sudo apt-get install screen $ sudo apt-get install vim $ sudo apt-get install curl $ sudo apt-get install git-svn
デフォルトエディタの変更
Ubuntuではデフォルトのエディタはnanoになっている.これを他のエディタに変える場合はupdate-alternativesコマンドを使えばOK.
$ sudo update-alternatives --config editor There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press enter to keep the current choice[*], or type selection number: 3 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode.
edの優先度が-100になってるのには笑った.
これでcrontab -eなどのコマンドでお好みのエディタが立ち上がるようになる.