SSHでサーバに接続する
今までの作業はサーバを直接操作して行ってきましたが、ここからはSSHを使ってクライアントからサーバにリモート接続して作業します。普段使っている環境からサーバを操作できるので何かと便利です。サーバ専用にモニタとキーボードを貼り付けておかなくてよいのも素敵ですね。
既にサーバではSSHサーバが動いているはずですので、早速クライアントから接続してみましょう。WindowsからSSH接続するにはPuTTYがおすすめです*1。
PuTTYを起動して、接続設定を行います。
[セッション]ページでは、[ホスト名(またはIPアドレス)]の欄にサーバのIPアドレスを入力します。[接続タイプ]は[SSH]が選択され、[ポート]は22になっていることを確認してください。
[ウィンドウ > 変換]ページにて、文字コードの設定を行います。CentOSの文字コードはUTF-8ですから[文字コードの設定]欄に[UTF-8]を設定しましょう*2。そして、[CJK用の文字幅を使用する]のチェックを外してください。このチェックが入ったままだと、後で使うsetupコマンドの表示が乱れてしまいます。
もう一度[セッション]ページに戻って[セッション一覧]欄に好きな名前を入力して[保存]ボタンを押します。これで次回以降も同じ設定を呼び出せます。
[開く]ボタンを押すと現在の設定でサーバに接続します。うまくサーバに接続できたらユーザ名とパスワードを訊かれますので、まずはrootでログインしてください*3。プロンプトが表示されれば、無事ログイン成功です。
一般ユーザの作成
まず始めに行うのは一般ユーザの作成です。権限の強いrootで常に作業するのは危険*4ですから、作業用に一般ユーザを作成してそれを使うようにします。
ユーザの作成にはuseraddを使います。-gオプションを使ってusersグループに所属させましょう。-pオプションには作成するユーザのパスワードを与えてください。
# useradd -g users -m -p ******** ymkn
これで一般ユーザが作成できました。今後SSHで作業するときはこのユーザを使うようにし、強い権限が必要な作業の時だけsuでrootになるようにします。
exitでログアウトし、今作った一般ユーザで再ログインします。
# exit
SSHのログイン制限
誰でもSSHでサーバに接続できてしまうのは好ましくないので、SSHでログインできるユーザを制限しましょう。SSHの設定ファイル/etc/ssh/sshd_configを編集します。
一般ユーザでは設定ファイルを変更できないので、suコマンドでrootになります*5。
$ su -
うまくrootになれたら/etc/ssh/sshd_configをエディタで開きます*6。PermitRootLoginとAllowUsersを設定して、ymkn(先ほど作った一般ユーザ)以外でのログインを禁止します。
# vi /etc/ssh/sshd_config
# rootでログインできないようにする # デフォルトはyesになっているので、noに書き換える PermitRootLogin no # 指定したユーザ以外ログインできないようにする # 複数ユーザを指定する場合はスペースで区切って書く AllowUsers ymkn
設定ファイルの編集が終わったらSSHサーバを再起動します。
# /etc/init.d/sshd restart
設定の確認
正しくセキュリティ設定が完了したかどうか調べてみましょう。SSHでサーバに接続し、rootでログインできないことを確認します。
それが確認できたら、今度はAllowUsersで指定した一般ユーザでログインできることを確認します。
うまくいったらSSHの設定は完了です。今後全ての作業はSSH経由で行いますので、サーバに繋いでいたキーボードとモニタは外してしまいましょう。サーバ本体も目立たない場所にどかしてしまいます*7。
基本的なセキュリティの設定
次に、サーバに基本的なセキュリティ設定を施します。
セキュリティ設定は何をどこまでやったらいいのか悩ましいものです。勘所をつかむまでは、@ITのゼロから始めるLinuxセキュリティを参考に設定しましょう。
今回は記事で紹介されている内容の中から、特に私が設定したところをご紹介します。
不要なサービスを停止する
一般的に、サーバで動いているサービスの数は少ないほど好ましいです。攻撃の対象になりうる要素は少ない方がよいからです。CentOSにはsetupという便利な管理コマンドがあるので、このコマンドを使ってシステム起動時に起動させるサービスを必要最小限に絞り込みましょう。
# setup ダイアログが表示されたら[システムサービス]を選択*8
さて、問題は必要なサービスと不要なサービスをどう判断するかです。リストにずらっと並ぶサービスがそれぞれどんな役割を負っているのか知らないことには、必要か不要かなど判断できません。
本来ならばサービスひとつひとつについて調べることになると思うのですが、数が多いと正直やってられません。ここは先人の知恵に頼りましょう。私ははじめての自宅サーバ構築 Fedora/CentOS - サーバサービス一覧・自動起動の設定/停止*9や◇不要デーモンの停止(WBEL4)◇初心者のためのLinuxサーバー構築講座☆お便利.com☆などを参考にしました。
以下、私の環境で無効にしたサービスの一覧です(はじめから無効だったものは含まれていません)。サーバの用途や環境に応じて止めるべきサービス、動かすべきサービスは変わってきます。ここは面倒くさがらずにひとつひとつチェックしましょう。
- acpid
- atd
- auditd
- bluetooth
- cpuspeed
- firstboot
- gpm
- hidd
- ip6tables
- lvm2-monitor
- mdmonitor
- messagebus
- netfs
- netplugd
- nfslock
- pcscd
- readahead_early
- rpcgssd
- rpidmapd
- xfs
xinetdの設定
最小構成でCentOS 5をインストールした場合、そもそもxinetdはデフォルトで起動しない設定になっていますので、ここで改めて設定することはありません。念のため/etc/xinet.d/以下の全てのファイルについて[disable = yes]になっていることを確認しておきます。
rootになれるユーザの制限
悪意を持った攻撃者にroot権限を奪われることほど恐ろしいことはありません。少しでもその可能性を減らすために、rootになれるユーザを制限しましょう。
/etc/login.defsを編集して、wheelグループに所属するユーザのみがrootになれるようにします。
SU_WHEEL_ONLY yes
作業ユーザをwheelグループに追加します。これを忘れると誰もrootになれなくなってしまいますのでご注意を*10。
# usermod -G wheel ymkn
設定を有効にするために /etc/pam.d/su に以下の行を追加(コメントを外して有効に)します。
auth required pam_wheel.so use_uid
ファイアウォールの設定
不必要なポートは出来るだけ閉じておきましょう。現段階ではSSH(TCP22番)だけ開けておけばよいです。ファイアウォールの設定はsetupコマンドで変更できます。
# setup
[ファイヤーウォールの設定]を選択します。[カスタマイズ]ボタンを押して、SSH以外の全てのポートが閉じられていることを確認してください。ここで誤ってSSHのポートを閉じてしまうと、再びサーバの前まで走らないといけないのでご注意を。
おわりに
これでSSHの設定とOSの基本的なセキュリティ設定は終わりです。次回はNTPサーバのインストールを行います。
*1:私はPuTTYごった煮版を愛用しています。そのほかにPoderosaというソフトもあります
*2:UTF-8(CJK)やUTF-8(Non-CJK)というものもありますが、UTF-8と何が違うのか詳しくは知りません。ヘルプには文字幅を調節するようなことが書いてありますが……
*3:パスワードはインストール時に決めたものです。覚えていますか?
*4:rootは消してはいけないファイルも簡単に消せてしまいます。操作ミスでシステムを破壊してしまうことも……
*5:このとき「-」オプションをつけると、rootの環境設定を読み込むことが出来ます。rootの環境では/usr/sbinなどにパスが通っているので、管理系コマンドを実行するのが楽です
*6:ここではviを使っていますが、viの操作に慣れていない場合はnanoを使うとよいでしょう
*7:ちなみに筆者は机の下に寝かせています
*8:もしsetupの画面が乱れているようであれば、PuTTYの設定を見直してください。
*9:リンク先はFedora 6の情報ですが、CentOS 5のサービスも大半が同じなので十分に参考になるでしょう
*10:もし忘れてしまった場合はサーバを直に操作してrootでログインします