本ドキュメントでは, Linux システムをより安全にするための方法と, よく使われるソフトウェアについて解説します. 具体的な内容に入る前に, 基本的な概念について議論し, セキュリティの基礎を押えておくことにしましょう.
常に変化し続ける, グローバルなデータ通信, 安価なインターネット接続, 速いペースのソフトウェア開発の世界の中で, セキュリティはより重要になりつつあります. グローバルコンピューティングは本質的に危険なので, セキュリティは今や基本的な要件です. 例えばデータが A 地点から B 地点までインターネット上で送られる場合を考えると, データは経路の途中で他の地点を通るので, 他人がデータを傍受や改竄さえしてしまう可能性があります. 同じシステム上のユーザでさえ, あなたのデータを悪意を持って意図しないようなものに変えてしまうかもしれません. 「クラッカー」として知られる侵入者に, システムのアクセス権を不正に得られてしまうかもしれません. クラッカーはあなたになりすますために高度な知識を用い, あなたからデータを盗んだり, あなたが自分自身のデータにアクセスできないようにしてしまいます. あなたが「ハッカー」と「クラッカー」の違いが分かっていないようであれば, Eric Raymond 氏の書かれた「ハッカーになる方法(How to Become A Hacker)」 をご覧ください. ( http://www.netaxs.com/~esr/faqs/hacker-howto.html で入手できます)
訳注: 「ハッカーになる方法 (How to Become A Hacker)」の日本語訳は http://www.linux.or.jp/JF/JFdocs/hacker.txt または http://www.post1.com/home/hiyori13/freeware/hacker.html で入手できます.
最初に, 完全に安全なコンピュータシステムは存在しないことを覚えておいてください. できるのは, 何者かがシステムを悪用するのをより困難にすることだけです. 普通の Linux のホームユーザならば, 偶然やってくるクラッカーを防ぐのはそれほど大変ではありません. とはいえ, Linux を重要な仕事に使っている場合(銀行, 通信業者など)には, ずっと多くの作業が必要になるでしょう.
考慮に入れるべき別の要素として, セキュリティを高めれば高めるほど, セキュリティが邪魔になることが挙げられます. そこで, 目的に対して十分使いやすくかつ安全なシステムとなるよう バランスをとってやらなければなりません. 例えば, あなたのシステムに電話回線で接続してくるユーザ全てに コールバックモデムを使ってもらい, 彼らの家にコールバックするようにすることができます. これにより安全な運用をおこなえますが, ユーザが家にいないようなケースではログインが困難になってしまいます. Linux システムをネットワークやインターネットに繋がない設定も可能ですが, これでは便利さも損なわれてしまいます.
中〜大規模のサイトならば, サイトがどの程度のセキュリティを必要としていて, これをチェックするためどんな監査を行うのかという セキュリティポリシーを決めるべきです. 有名なセキュリティポリシーの例は http://core.ring.gr.jp/pub/doc/rfc/rfc2196.txtです. これは最近改定されており, 会社のセキュリティポリシーを作る際の良い枠組になります.
訳注: 日本語訳が http://www.ipa.go.jp/SECURITY/rfc/RFC2196-00JA.html にあります.
システムを安全にしようとする前に, まず, どの程度のレベルの脅威から自身を守るのか, どの程度のリスクを冒すべきなのか (あるいは冒すべきでないのか), 結果的にシステムはどの程度脆弱なままにするのかを決めなくてはなりません. 何を守るのか, なぜそれを守るのか, それにどんな価値があるのか, データや他の財産に対しての責任は誰が負うのかを知るために, システムを解析すべきです.
加えて, 安全でないアカウントがシステム上にひとつあれば,
結果的にネットワーク全体が悪用される可能性があります.
.rhost
ファイルを使ったログインを許可しているユーザがいたり,
tftp
のような安全でないサービスを使っている場合,
侵入者がこれらを利用して「ドアの中に足を踏み入れる」危険を背負うことになります.
いったん侵入者があなたや他の誰かのシステムのアカウントを手に入れれば,
それは他のシステムや他のアカウントにアクセスするために利用されるかもしれません.
侵入者にはいくつかのタイプがあります. その特徴を知っておくと, システムを安全にするのに役立つでしょう.
何者かがシステムに侵入した場合, 何が問題となるのでしょうか? 当然ながら, 家庭から PPP でダイアルアップ接続しているユーザの問題と, 会社のマシンをインターネットや他の大規模ネットワークに 繋いでいる人々の問題は異なります.
失ったデータを復旧あるいは再び作成するのにどれくらいの時間が必要でしょうか? ちゃんと初期投資をしておけば, 後で失ったデータを再作成するはめになったときにかかる時間は 10 分の 1 に節約できます. バックアップの計画をチェックし, あとでデータの検証をしていますか?
ユーザが容易に理解して守ることができる, 簡単で一般的な方針を決めましょう. この方針は大切なデータやユーザのプライバシーを守ってくれるでしょう. これに加えて考えるべきことは, 誰がシステムにアクセスできるのか (自分の友人に自分のアカウントを使わせていいのでしょうか?), 誰がシステムにソフトウェアをインストールすることができるのか, 誰がどのデータを所有するのか, それから事故時の復旧やシステムの適切な使いかたについてです.
一般に受け入れられているセキュリティポリシーは次の言葉から始まります.
"許されていないことは禁止されている"
これは, あるサービスをユーザに対して認めていない場合, 許可を出すまではユーザはそのサービスを使うべきではないということです. 正規ユーザアカウントに適用するポリシーを確認しましょう. 「えっと, パーミッションの問題がわからないので, root で実行しよう」 などと言うことは, 明らかなセキュリティホールになりますし, 今まで不正使用されたことのないセキュリティホールにさえなるかもしれません.
rfc1244 は独自のネットワークセキュリティポリシーを作るための指針が 書かれたドキュメントです.
rfc1281 はセキュリティポリシーの例を示したドキュメントであり, 各ステップの詳細な説明が付いています.
最後に, ftp://coast.cs.purdue.edu/pub/doc/policy にある COAST ポリシーアーカイブを調べ, 実生活でのセキュリティポリシーがどのようなものかを見ると良いでしょう.
本ドキュメントでは, あなたが作ってきた貴重な財産 (ローカルマシン, データ, ユーザ, ネットワーク, あなたの評判) を守るための方法を議論します. 侵入者があなたのユーザのデータを消してしまったら, あなたの評判はどうなるでしょう? あなたのウェブページに落書きをされてしまったらどうなるでしょう? また, あなたの会社の次の四半期の計画をばらされてしまったら? ネットワークのインストールを考えているならば, 1 台のマシンをネットワークにつなぐ前に, 考慮すべき要素はたくさんあります.
あなたがダイアルアップ PPP アカウントを使っていたり, ごく小規模なサイトを運営している場合であっても, 侵入者があなたのシステムに興味を持たないとは限りません. 標的にされるのは, 大規模で有名なサイトだけではありません. 多くの侵入者は規模に関係なくできるだけ多くのサイトを不正使用しようとします. 加えて, 侵入者はあなたが接続する先のサイトにアクセスするため, あなたのサイトのセキュリティホールを突くかもしれません.
侵入者は時間を持て余しており, あなたがどんなにシステムを隠蔽しても, 推測するのではなく, 単に全ての可能性を試してしまいます. 侵入者があなたのシステムに興味を持つ理由は他にもたくさんありますが, それについては後で議論します.
管理者が最も集中するセキュリティの分野は, おそらく個々のホストに基づく部分でしょう. これは基本的に, 自分自身のシステムの安全を確保し, 自分のネットワーク上の他のホストも同様であろうと期待することです. 良いパスワードを選び, LAN へのサービスを安全に行い, きちんとログを取り, セキュリティに問題があることが知られているプログラムの バージョンアップを行うのは, ローカルのネットワーク管理者が責任を持って行うべきことです. これは絶対に必要なことなのですが, ネットワークの規模が数台規模より大きくなると実施が大変になってしまいます.
ネットワークのセキュリティは, 手元にあるホストのセキュリティと同じく必要なことです. 何百, 何千, あるいはそれ以上のコンピュータが同じネットワークにある場合, そのそれぞれが安全であると信頼することはできません. 許可されたユーザしか自分のネットワーク資源にアクセスできないようにし, 防火壁を構築し, 強力な暗号を使用し, 「たちの悪い」マシンや安全でないマシンがネットワーク上に無いようにすることは, 全てネットワーク管理者の任務です.
本ドキュメントではサイトを安全にするために使われる技術のいくつかについて議論し, 守るべきものを侵入者にアクセスさせないようにする方法をいくつか示します.
議論すべきセキュリティのタイプの 1 つは「隠蔽によるセキュリティ」です. これは例えば, セキュリティ的な弱点が知られているサービスを標準でないポートに移動させ, 攻撃者に存在がばれないようにして悪用を避けようとするものです. このようなものは心配しなくても攻撃者が見つけて悪用してくれます. 隠蔽によるセキュリティは, セキュリティ的には全く無意味です. 単に小規模なサイトや比較的無名なサイトであるからといって, 侵入者があなたの持っているものに興味を持たないわけではありません. 次の章で, あなたが守るものについて議論します.
本ドキュメントはいくつもの章に分かれています. 各章でセキュリティのおおまかな話題を押さえます. 最初の話題は 物理的なセキュリティで, マシンそのものを物理的にいじられないようにするための方法です. 第 2 の話題は ローカルのセキュリティで, ローカルユーザがシステムを改竄するのを防ぐ方法です. 3 番目の話題は ファイルとファイルシステムのセキュリティ で, ファイルシステムとファイルのパーミッションの設定の方法を示します. 次の話題は パスワードのセキュリティと暗号化で, マシンやネットワークをより安全にするための暗号の使い方を議論します. カーネルのセキュリティでは, マシンをより安全にするために設定あるいは 意識すべきカーネルオプションについて議論します. ネットワークのセキュリティでは, Linux システムを外部ネットワークからの攻撃に対して より安全にする方法を解説します. セキュリティの準備では, マシンをネットワークに繋ぐ前の準備のやりかたについて議論します. 次の システムに侵入された/されている場合の対応 では, システムに侵入されつつあることや 侵入が最近に起こったことに気づいた場合にすべきことを議論します. セキュリティに関する情報源では, セキュリティに関する基本的な情報源をいくつか示し, Q & A の章である よく聞かれる質問 ではよく聞かれる質問いくつかに対する回答を示します. 最後に 最後に にて結びの言葉を述べます.
本ドキュメントを読んで理解していただきたいポイントは主に 2 つあります.
/var/log/messages
等のシステムログをチェックし, システムを見張りましょう.