最近はイントラネットだけでなく,インターネットから直接アクセス可能なセグメントに置くサーバーとして Linuxを採用するケースが増えている。そこで問題になるのが,やはり“セキュリティ”である。ディストリビューションによっては,デフォルト・インストールしたままの状態では,ぜい弱性が未解決になっているものもあり,このままでインターネット上に置くのは大変危険である。

 セキュアなサーバーにするには,(1)セキュリティ・ホールをふさぐ,(2)不要なサービスを停止する,(3)適切に設定(アクセス・コントロールなど)を行う ---などの対策が不可欠である。このコラムでは,これらを総称して「要塞(ようさい)化」と呼んでいる。そこで今回は,Linuxの要塞化について取り上げる。要塞化については,このコラムでも何度か取り上げているが,今回はLinuxサーバーの要塞化に焦点を当てる。実際にLinuxサーバーの管理をされている読者はぜひ参考にしてほしい。

最小構成でインストールする

 まず第一に,最小構成(コア)でインストールを行い,必要なサービス・パッケージなどを後から追加する方法を選びたい。セットアップに多少手間はかかるが,Linuxのプログラムにぜい弱性が見つかる頻度が高いことを考えれば,結果的にはメンテナンスの労力が少なくて済む。不必要なプログラムまでインストールしていると,使用していないにもかかわらず,それらにぜい弱性が見つかればパッチを適用するなどして対策を施す必要が生じるからだ。

 しかしながら,ディストリビューションによっては,インストール時に最小構成(コア)が選べないものもある。将来的には改善されるかもしれないが,この場合も可能な限り少ない構成でインストールし,さらに不要なものは取り除いておきたい。ただし,この“不要なもの”の判断には注意が必要だ。試行錯誤で取り除くと,必要なサービスが立ち上がらなくなる場合もあるからだ。

基本的な設定は商用UNIXと同じ

 基本的にはLinuxが抱えているぜい弱性の問題は,商用UNIXが抱えるそれと共通する部分が多い。したがって基本的な要塞化作業は同じである。

 基本的な要塞化作業には,次のようなものが挙げられる。

  • OS(カーネル)やサーバー・プログラムを最新のものに更新する
  • 不要なサービスを停止する(/etc/rc* 以下のサービスの停止)
  • 必要なサービスに対しては,適切なアクセス・コントロールをかけておく
  • 不要なユーザ・グループを削除する

 プログラムなどの更新に関しては,パッケージ形式などのパッケージが便利だ。ただし,ぜい弱性が見つかってからパッケージが出るまでの時間がかかる場合には,ソースからのビルド・インストールも検討してみてほしい。

 上記の基本的な要塞化でサーバーは十分セキュアになる。しかし,さらに進んだ設定をしたい場合は,以下の設定をお勧めする。

パーミッションをチェック

 次に示すように,パーミッション(権限)などを適切に設定することでサーバーはよりセキュアになる。

SUID/SGIDビット
 SUIDビットが立っているグループに属するユーザーは,ファイルの所有者と同じ権限を持つことができるので危険な場合がある。不要なグループに対してはSUIDビットをとったほうがよい。

 具体的な手順を示す。以下の例では,(1)どのファイルにSUID/SGIDビットが立っているのかを調べ,(2)そのうち,「/bin/mount」コマンドのパーミッションをその他のメンバーが実行できないように変更し,(3)所有者とグループを「root」と「admin」にそれぞれ変更している *1

(1)# find  /  \( -perm -2000 -o -perm -4000 \) -exec   -ls -lad {} \;
   -rwsr-xr-x  1 root root   55420  /bin/mount
       ・・・・・・・・・・・
(2)# chmod  4550  /bin/mount
(3)# chown root.admin /bin/mount

*1:特定のユーザー(rootとadminグループに属するメンバ)以外から /bin/mount 実行されて,予期せぬファイル・システムをマウントされるのを防ぐように設定している。

マウントオプション
 インストール時に,/tmp や /home などのディレクトリを別スライス(パーティション)にした場合には,/etc/fstab *2 等で オプションが“defaults”になっている場合がある。“defaults”のままだと“rw,suid,dev,exec,auto,nouser,async”を指定した場合と同じなので *3,/tmp に実行可能なプログラムなどを置かれる恐れがある。それを防ぐには,オプションを “noexec”*4 や“nosuid”,“nodev”などへ変更する必要がある。

*2:mountコマンドを実行する際の設定ファイル
*3:オプションの詳細については,mountコマンドのmanページなどを参照してほしい
*4:マウントされたファイルシステム上のファイル実行を禁止するオプション

その他
 /etc/ 以下の設定ファイルや suidビットのない /bin あるいは /usr/sbin/以下のプログラムについても,一般ユーザーにパーミッションを与える必要があるかどうか検討してほしい。また,変更を禁止したい設定ファイル(/etc/services や /etc/inetd.conf など)には,例えば/ext2ファイルシステムであれば,ファイルの属性を変えるchattrコマンドを用いてImmutableモード *5 を設定しておくという手もあるだろう。

*5:Immutableモードに設定すると,ファイルの属性を変更できなくなる

その他の設定

 サーバーをセキュアに設定する方法は上記以外にもたくさん存在する。簡単に紹介する。まず,/proc 以下にあるスペシャルファイルの設定を行うことで,ソース・ルーティングやIPフォワード,デフラグおよびspoofingなどを禁止できる。この設定は,/etc/ 以下の設定ファイル(例えば,/etc/sysctl.conf)を編集することで,/proc 以下のファイルを直接編集しなくても設定できる場合もある。/proc ファイルシステムの詳細については,「www.linux.or.jp 管理グループ (Webmasters) 」による「/proc ファイルシステム」などが参考になる。

 PAM(Pluggable Authentication Modules)を利用するのも効果がある。PAMとは商用UNIX(例えば Solaris)やLinuxディストリビューションの多くが採用している認証用のフレームワークである。PAMのモジュールが利用できるLinuxの場合は,/etc/pam.d/以下のファイルを編集することで,以下のようなことが可能となる。

  • パスワードの強化(DES以外の暗号を用いる)
  • マシンリソースの保護(ユーザが使用できるプロセス数やメモリサイズを制限)
  • ログインの制限(コンソールからのみ許可,あるいはsuでrootになるグループの制限など)

 PAMの詳細については,「The Linux Kernel Archives」の「Linux-PAM」などを参照してほしい。

 上記以外の検討したい項目として,以下を挙げておく。

  • BIOSの設定
     FDからのブートを禁止(悪意のあるユーザに勝手にFDから起動するのを防ぐ)
     パスワードの設定
  • LILOのパスワードを設定
  • OSのバナーを隠す(起動スクリプトで,/etc/issue に関する部分を編集)
  • CTRL+ALT+DELETEの禁止(/etc/inittab を編集)

◇ ◇ ◇ ◇ ◇

 非常に駆け足ではあったが,Linuxサーバーの要塞化についてざっと紹介した。記載した内容すべてを実践する必要はない。「どのくらい手間(コスト)をかけられるのか」と「サーバーをどの程度セキュアにする必要があるのか」をはかりにかけて,実践してほしい。ただし,インターネットに接続する場合には,最低でも基本的な要塞化は行わなければならない。インターネット・サーバーを運用する上での“義務”と心得てほしい。


斎藤松彦(SAITO Matsuhiko)
株式会社ラック 不正アクセス対策事業本部
m_saitoh@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。