この章は、より安全で信頼できるシステムやネットワークを 維持するための一般的なコンセプトを手短に紹介します。 コンピュータシステムはその周りの環境の変化に連れて、 日々変わって行くものですから、 ここでは、"維持する"ということを強調したいと思います。 既に述べたように、あるシステムを安全にするような、 一つの方法といったものは存在しません。 それにはあまりに多くの変数があるのです。 セキュリティとは特定の製品やアプリケーションやポリシーに 頼ることではなく、問題へのアプローチ、 またはその態度のことなのです。
遠隔からの root ログインを許可しないこと。 これは /etc/securetty のような設定ファイルで 制御できるでしょう。 "pts" から始まっている全ての行を削除してください。 これは大きなセキュリティホールです。
そもそも、root としてログインしないで下さい。以上。 必要があればユーザアカウントでログインして、 su で root になってください。 ログインが遠隔からであっても、ローカルであってもです。 または sudo を用いてください。 これはルート特権で個別のコマンドを走らせることができます。 (Red hat は sudo パッケージを含んでいます) これは慣れるのに少々かかりますが、 ことを行う上での正しい方法です。また、最も安全な方法でもあります。 そして、時がたつにつれ、ますます、 より自然な方法に思えてくることでしょう。
誰かがまさに今、こう言っているのが聞こえますよ。 "でも本当に面倒くさいじゃないか、 僕は root なんだし、それにこれは僕のシステムなんだから"、と。 よろしい、しかし root は特別なアカウントであり、 通常のユーザアカウントとして使われるように意図されていないものです。 root は全てのものへの、ハードウェアデバイスにさえ、 アクセス権を持っています。 システムは root を"信用している"のです。 システムは root が何をしているのかを知っているのだ、と信じます。 もしあなたが間違いをしたら、システムはそう意図したのだと仮定し、 命令の通りにするよう全力を尽くすでしょう… 例え、そのシステムを破壊せよ、という命令だったとしても。
例えば、root として X をスタートさせ、 Netscape を開き、 web サイトを訪れたとしましょう。 その web ページは酷い振る舞いをする java スクリプトを含んでいたとすれば、 その酷い java スクリプトが、 あなたが"正しい"方法でおこなった時よりも、 あなたのシステムに対して、もっと深いアクセス権を持つ、 ということが充分考えられます。
パスワードのことを真剣に考えてください。 それらを誰にも渡してはいけません。 全てのものに同じパスワードを使わないこと。 root パスワードを他のものに使わないこと (もちろん root のパスワードを除いて!)。 あなたのシステムのパスワードを使って、 絶対にオンラインでサインアップや登録をしないこと。 パスワードは大文字と小文字を混ぜたアルファベット、 数字、かつ(または)記号の組み合わせにし、 充分な長さ(8文字以上)を持つものにすべきです。 "cat" や "dog" のように簡単に推測される、 いわゆる"辞書"単語を用いないこと。 名前や日付やホスト名のような個人的な情報を使わないこと。 パスワードをどこにも書かず、頭に記憶すること。
より安全な"シャドウ"パスワードを使いましょう。 これはある時点から Red Hat でデフォルトになっています。 もし /etc/shadow ファイルがあるなら、 既に使えるようになっています。 pwconv と grpconv コマンドがあるなら、 パスワードファイルとグループファイルをシャドウフォーマットに変換できます。
インターネットのような信頼できないネットワークを通じて、 テキストそのままのログインを要求するようなプログラムを使うのは避けましょう。 telnet が一番の例です。 ssh がずっと良い方法です。 もし SSL (Secure Socket Layer) のサポートがあれば、それを使いましょう。 例えば、あなたのプロバイダは SSL 経由の POP や IMAP メイルを提供していますか? 最近の Red Hat リリースでは openssl を含んでいますし、多くの Linux アプリケーションは、 SSL がサポートされている所ではそれを使うことができます。
リソースに制限をおきましょう。 このためには色々な方法があります。 おそらく、この必要性は与えられたシステムにアクセスしている ユーザ数に応じて増加するでしょう。 このような制限をおいておけば、 ディスク容量オーバーのような予期された災害を防げるだけでなく、 アプリケーションやプロセスの予期せぬ誤動作に対する防御にもなります。 quota コマンド(man quota) はディスクスペースに制限を置くのに使えます。 bash は ulimit コマンド(man ulimit または man bash) を含んでいて、ユーザ毎に応じて様々な機能を制限できます。
また、ここでは長くは議論しませんが、 PAM (Pluggable Authentication Modules) は様々なシステムの機能やリソースを制御するための 非常に洗練されたアプローチを提供しています。 手始めに man pam を参照してください。 PAM は /etc/pam.conf か /etc/pam.d/* ファイルによって設定されます。 また、 /etc/security/* の中のファイル、 /etc/security/limits.conf などで、 様々な適当な制限をおくことができます。 PAM について詳しく見ることは この文書の範囲を超えますので、 詳しくは User-Authentication HOWTO (http://tldp.org/HOWTO/User-Authentication-HOWTO/index.html)を参照してください。 (JF版http://www.linux.or.jp/JF/JFdocs/User-Authentication-HOWTO.txt)
誰かきちんとした知識のある人が root へのメイルを 受け取っていることを確認しましょう。 これは "alias" を使ってできます。 典型的なメイルサーバでは、これが定義される場所は /etc/aliases ファイルです。 もし必要ならば、他のマシンのアカウントにしても構いません:
# Person who should get root's mail. This alias # must exist. # CHANGE THIS LINE to an account of a HUMAN # root メイルを受け取るべきひと。 # このエイリアスは必要です。 # この行を人間のアカウントへ変更してください。 root: hal@bigcat |
その後で、 newaliases (か、同じ働きをするもの) を走らせるのを忘れないように。
ソフトウェアを手に入れる場所に注意してください。 信用できる情報源を用いましょう。 あなたはまったくの他人をどれくらい信用しますか? 特定のパッケージを探しているなら、まず Red Hat のftp サイト(か、そのミラーサイト) をチェックしてください。 おそらく、とにかくここがそのシステムにとって最良でしょう。 または、そのパッケージのプロジェクトのオリジナルサイトも 同様に良いでしょう。生のソースコードから (または tarball か src.rpm から)インストールすることで、 少なくとも自分自身でそのコードをチェックすることができます。 実際はそれが理解できないとしても ;-) これは Linux ソフトウェアサイトで広く拡がっている問題に 見えないかもしれませんが、 ある人にとってはコードにほんの数行を付け加えて、 無害に見えるバイナリを、 システムに裏ドアを開ける "トロイの木馬"に変えてしまうことは、 極めて簡単なことなのです。 そうなったら、大変なことです。
誰かがシステムをスキャンして調べている、 または誰かがシステムに侵入しようとしているようだ、としましょう。 報復しないでください。 源のIPアドレスは信頼できないシステムかも知れないし、 その持ち主が既に犠牲者なのかもしれません。 または自分が何かのサービス規約を破っていて、 自身のプロバイダとトラブルを起こしているのかもしれません。 この場合、最も良い対処法は、 ログを源の IP のプロバイダか、所有者の苦情係に送ることです。 これはしばしば "abuse@someisp.com" のようなアドレスです。 ただし、まともに相手をしてもらえると期待しないように。 一般的に言えば、実際の侵入が実行されない限り、 このような行動は法律的には犯罪ではありません。 さらに言えば、犯罪であったとしても、重大な損害が (大金とか)示されない限り、法的に訴えることは無理でしょう。
Red Hat のユーザは "Bastille Hardening System" (http://www.bastille-linux.org/) を使うことができます。 これは Red Hat と Mandrake のシステムセキュリティを "強化"する多目的システムで、 一からファイアーウォールのスクリプトを構成し、 PAM やその他の色々のものを 設定するためのGUI インターフェースを持っています。 Debian のサポートは新しいものです。
ケーブルモデムか DSL を通じて、 インターネットへ常時接続しているとしましょう。 しかし、それを常に使っているでしょうか? または常にそれが必要ですか? "唯一の真にセキュアなシステムは、 ネットワークから切断されたシステムだ"、 と昔から言われています。 これは確かに一つの選択でしょう。 ですから、インターフェースを落とすか停止する制御デーモン (dhcpcd, pppoed など) を使ってください。または、普段のスケジュールや 使用法にしたがって接続を切ったり繋いだりする cron ジョブを設定することも考えられます。
しばしば"ファイアーウォール"として宣伝されている ケーブルルータまたは DSL ルータはどうでしょう? 安い値段のユニットはほとんど NAT (Network Address Translation) に等しいもので、ファイアーウォールとして、 それを通じてポートのための穴を開ける能力を持っています。 NAT 自体は NAT ゲイトウェイの背後のシステムをかなりの程度には 安全に保ってくれますが、 これは非常に初歩的なファイアーウォール以外のなにものも与えてくれません。 そして、穴が開いているならば、それはまだ脅威にさらされているのです。 また、傷を作らないためには、 ルータのファームウェアや実装に依存することになります。 このようなルータの背後でいくつか追加的な防御をするのが、 賢い方法でしょう。
ワイアレスのネットワークカードやハブはどうでしょう? 製造元がなんと言おうが、安全ではありません。 これらの接続はインターネット接続と全く同じものと扱ってください。 ssh のような安全なプロトコルだけを用いましょう。 たとえそれが単に、ある LAN ボックスからもう一つのものへの接続でも。
もしある特定のサーヴィスを走らせる必要があると分かったら、 そしてそれを使うのは自分だけであるか、 比較的少数の人数のためのものなら、 標準的でないポート番号を使いましょう。 ほとんどのサーバデーモンはこれをサポートしています。 例えば、sshd はデフォルトでは 22 番ポートを使います。 ワームやスクリプトキディはみなこれを期待して、その番号を探します。 ですから、別のポート番号で走らせましょう! sshd の man ページを参照してください。
アプリケーションによってインターネット接続をブロックする ファイアーウォール(例えば、ウィンドウズ王国から来た ZoneAlarm など)はどうでしょう? これらは主に、 MS OS にあまりにありふれたものとなった ヴィリー、つまりコンピュータウィルスと トロイの木馬の過剰症に対応するように設計されているものです。 これは Linux にとっては実際、問題ではありません。 ですから、Linux 上では、 今のところこのようなアプリケーションは存在しないのです。 そして、誰かがそれを実装する手間をかける充分な需要もあるようには 思えません。Linux 上にはより良いファイアーウォールがあります。 この文書の他の提案にしたがって行けばよいのです。
最後に、自分自身のシステムを知りましょう。 もしあなたが Linux の新米ユーザだというなら、 使ったことのないものを既に良く知っているはずがないのだ、 という事実に向かい合いましょう。理解しましょう。 そして、学習のプロセスの中で、 ものごとを、最も易しいやり方ではなくて、 正しいやり方で行う方法を学びましょう。 ものごとを"正しい方法で"行うことの背後には、 何十年もの歴史があるのです。 これは時間という試験をくぐり抜けてきています。 今これが不必要で面倒なことのように見えるとしても、 やがてはこれに意味があることがわかるでしょう。
走らせているサーヴィスが何であろうと、それに親しみましょう。 そして、もし何かがおかしくなるときには、 これらのサーヴィスがシステム全体の健康に対して 持つかもしれない関連性に親しみましょう。 できる限りのものを読み、質問しましょう。 "単にそれができるから"、という理由や、 インストーラがそうしたから、という理由で、 何かをサーヴィスとして走らせてはいけません。 明らかに、誰も始めから経験を積んだシステム管理者であることはできません。 しかし、自分のシステムについて充分に学ぶために努力し、 システムをコントロール下におくことができます。 これは *nix を MS システムから区別する特徴の一つです。 つまり、MS システムでは決して完全なコントロールをすることはできませんが、 *nix では可能です。逆に言えば、何か悪いことが起こった時、 しばしば自分以外の誰も責めることができないのです。