第48章 ネットワークのセキュリティー保護
48.1. ワークステーションのセキュリティー
Linux 環境のセキュリティー保護は、ワークステーションから開始します。個人マシンをロックするか、エンタープライズシステムのセキュリティーを保護する場合でも、サウンドセキュリティーポリシーは個々のコンピューターから開始します。コンピューターネットワークは、最も弱いノードほど安全です。
48.1.1. ワークステーションのセキュリティーの評価
Red Hat Enterprise Linux ワークステーションのセキュリティーを評価する際には、以下を考慮してください。
- BIOS およびブートローダーセキュリティー:承認されていないユーザーがマシンに物理的にアクセスし、パスワードなしで単一ユーザーまたはレスキューモードで起動 できますか ?
- パスワードセキュリティー - マシン上のユーザーアカウントのパスワードのセキュリティーはどのように安全ですか ?
- 管理コントロール - システム上にアカウントがあり、管理者の制御はどの程度ありますか ?
- 利用可能なネットワーク サービス - ネットワークからの要求をリッスンしているサービスや、それらを全く実行すべきサービス
- パーソナル ファイアウォール - 必要なファイアウォールのタイプ。
- Security Enhanced Communication Tools - ワークステーションと、避けるべきなワークステーション間の通信に使用する必要があるツールは何ですか ?
48.1.2. BIOS およびブートローダーのセキュリティー
BIOS (もしくは BIOS に相当するもの) およびブートローダーをパスワードで保護することで、システムに物理的にアクセス可能な未承認ユーザーがリムーバブルメディアを使用して起動したり、シングルユーザーモードで root 権限を取得することを防ぐことができます。このような攻撃に対するセキュリティー対策は、ワークステーションの情報の機密性とマシンの場所によって異なります。
たとえば、見本市で使用されていて機密情報を含んでいないマシンでは、このような攻撃を防ぐことが重要ではないかもしれません。しかし、同じ見本市で、企業ネットワークに対して暗号化されていない SSH 秘密鍵のある従業員のノートパソコンが、誰の監視下にもなく置かれていた場合は、重大なセキュリティー侵害につながり、その影響は企業全体に及ぶ可能性があります。
一方で、ワークステーションが権限のあるユーザーもしくは信頼できるユーザーのみがアクセスできる場所に置かれてるのであれば、BIOS もしくはブートローダーの安全確保は必要ない可能性もあります。
48.1.2.1. BIOS パスワード
コンピューターの BIOS をパスワードで保護する主な 2 つの理由を以下に示します。[14]:
- BIOS 設定の変更を防止する - 侵入者が BIOS にアクセスできる場合は、ディスケットまたは CD-ROM から起動するように設定できます。このようにすると、侵入者がレスキューモードやシングルユーザーモードに入ることが可能になり、システムで任意のプロセスを開始したり、機密性の高いデータをコピーできるようになってしまいます。
- システムの起動を防止する - BIOS の中には起動プロセスをパスワードで保護できるものもあります。これを有効にすると、攻撃者は BIOS がブートローダーを開始する前にパスワード入力を求められます。
BIOS パスワードの設定方法はコンピューターメーカーで異なるため、具体的な方法はコンピューターのマニュアルを参照してください。
BIOS パスワードを忘れた場合は、マザーボードのジャンパーでリセットするか、CMOS バッテリーを外します。このため、可能な場合はコンピューターのケースをロックすることが推奨されます。ただし、CMOS バッテリーを外す前にコンピューターもしくはマザーボードのマニュアルを参照してください。
48.1.2.1.1. x86 以外のプラットフォームのセキュリティー保護
他のアーキテクチャーは、異なるプログラムを使用して、x86 システムの BIOS とほぼ同等の低レベルのタスクを実行します。たとえば、Intel® Itanium™ コンピューターは Extensible Firmware Interface (EFI)シェルを使用します。
他のアーキテクチャーで BIOS のようなプログラムをパスワード保護する方法は、メーカーにお問い合わせください。
48.1.2.2. ブートローダーのパスワード
Linux ブートローダーをパスワードで保護する主な理由は、以下のとおりです。
- シングルユーザーモードへのアクセスの防止 - 攻撃者がシステムをシングルユーザーモードで起動できる場合、root パスワードを求められることなく、root として自動的にログインします。
- GRUB コンソールへのアクセスの防止 - マシンがブートローダーとして GRUB を使用している場合、攻撃者は GRUB エディターインターフェイスを使用して設定を変更したり、cat コマンドを使用して情報を収集したりできます。
- 安全でないオペレーティングシステムへのアクセスの防止 - デュアルブートシステムの場合、攻撃者はアクセス制御やファイルパーミッションを無視するオペレーティングシステムを起動時に選択することができます(DOS など)。
Red Hat Enterprise Linux には、x86 プラットフォームの GRUB ブートローダーが同梱されています。GRUB の詳細は、Red Hat Installation Guide を参照してください。
48.1.2.2.1. GRUB が保護するパスワード
設定ファイルに password ディレクティブを追加すると、「ブートローダーのパスワード」 の最初の 2 つの問題に対処するように GRUB を設定できます。これを行うには、最初に強力なパスワードを選択し、シェルを開き、root でログインし、以下のコマンドを入力します。
grub-md5-crypt
プロンプトが表示されたら、GRUB パスワードを入力し、Enter を押します。これにより、パスワードの MD5 ハッシュが返されます。
次に、GRUB 設定ファイル
/boot/grub/grub.conf
を編集します。ファイルを開き、ドキュメントのメインセクションにある timeout 行の下に、以下の行を追加します。
password --md5 <password-hash>
< ;password-hash> を /sbin/grub-md5-cryptが返す値に置き換えます。[15]をクリックします。
次回システムを起動すると、GRUB メニューは、p を押すと、その後に GRUB パスワードを指定しなくても、エディターまたはコマンドラインインターフェイスにアクセスできなくなります。
ただし、このソリューションでは、攻撃者がデュアルブート環境でセキュアでないオペレーティングシステムで起動できないわけではありません。そのためには、
/boot/grub/grub.conf
ファイルの別の部分を編集する必要があります。
セキュリティーを保護するオペレーティングシステムの
title
行を探し、その下の lock ディレクティブの行を追加します。
DOS システムの場合には、スタンザは以下のように開始する必要があります。
title DOS lock
Warning
この方法が正しく機能するには、
/boot/grub/grub.conf
ファイルのメインセクションに password
行が存在する必要があります。そうしないと、攻撃者は GRUB エディターインターフェイスにアクセスし、ロックラインを削除できます。
特定のカーネルまたはオペレーティングシステムに異なるパスワードを作成するには、スタンザに lock 行を追加し、続いて password 行を追加します。
一意のパスワードで保護される各スタンザは、以下の例のような行で始まる必要があります。
title DOS lock password --md5 <password-hash>
48.1.3. パスワードセキュリティー
パスワードは、Red Hat Enterprise Linux がユーザーの ID を検証するために使用する主要な方法です。このため、パスワードのセキュリティーは、ユーザー、ワークステーション、ネットワークを保護するために非常に重要です。
セキュリティー上の理由から、インストールプログラムは、Message-Digest Algorithm (MD5)およびシャドウパスワードを使用するようにシステムを設定します。これらの設定を変更しないことを強く推奨します。
インストール時に MD5 パスワードの選択を解除すると、古い Data Encryption Standard (DES)形式が使用されます。この形式では、パスワードを 8 桁の英数字(句読者などの特殊文字を許可)に制限し、中程度の 56 ビット暗号化レベルを提供します。
インストール時にシャドーパスワードの選択を解除すると、すべてのパスワードが一方向ハッシュとして誰でも読み取り可能な
/etc/passwd
ファイルに保存されるため、システムはオフラインでのパスワードクラッキング攻撃に対して脆弱になります。侵入者が通常のユーザーとしてマシンにアクセスできる場合は、/etc/passwd
ファイルを自分のマシンにコピーし、それに対して任意の数のパスワードクラッキングプログラムを実行できます。ファイル内に安全でないパスワードがあれば、パスワードクラッカーに発見されるのは時間の問題です。
シャドーパスワードは、パスワードのハッシュを root ユーザーのみが読み取り可能なファイル
/etc/shadow
に保存することで、このタイプの攻撃を排除します。
これにより、潜在的な攻撃者は、SSH や FTP などのマシン上のネットワークサービスにログインして、リモートでパスワードクラッキングを試みるようになります。この種のブルートフォース攻撃ははるかに遅く、何百回ものログイン試行の失敗がシステムファイルに書き込まれるため、明らかな痕跡が残ります。当然ながら、クラッカーがパスワードの弱いシステムで深夜に攻撃を開始した場合、クラッカーはダイヤーの前にアクセスを取得し、ログファイルを編集してその追跡をカバーすることがあります。
形式およびストレージの考慮事項に加えて、コンテンツの問題があります。パスワードクラッキング攻撃からアカウントを保護できる最も重要なことは、強力なパスワードを作成することです。
48.1.3.1. 強固なパスワードの作成
安全なパスワードを作成する場合は、以下のガイドラインに従うことが推奨されます。
- Words または Numbers のみは使用しないでください。パスワードには数字または単語のみを使用しないでください。非セキュアな例には、以下が含まれます。
- 8675309
- juan
- hackme
- Recogniz able Words は使用しないでください。適切な名前、辞書の単語、またはテレビター の用語や、数字で予約されている場合でも、回避すべきです。非セキュアな例には、以下が含まれます。
- john1
- DS-9
- mentat123
- Foreign Languages で Words を使用しないでください。パスワードクラッキングプログラムは、多くの言語のディクショナリーを含む単語リストに対してチェックを行う ことがよくあります。安全なパスワードに外部言語を使用することは安全ではありません。非セキュアな例には、以下が含まれます。
- cheguevara
- bienvenido1
- 1dumbKopf
- do not use Hacker Terminology: ハッカーの用語(l337 (LEET)マクターとも呼ばれる)を使用する場合には、パスワードについて再度考えてください。多くの単語リストには、LEET マクターが含まれます。非セキュアな例には、以下が含まれます。
- H4X0R
- 1337
- do not use Personal Information - パスワードに個人情報を使用 しないでください。攻撃者がアイデンティティーを知らせると、パスワードを減らすタスクが簡単になります。以下は、パスワードの作成時に回避する情報の種類の一覧です。非セキュアな例には、以下が含まれます。
- 自分の名前
- ペットの名前
- ファミリーメンバーの名前
- 生年月日
- 電話番号または zip コード
- Not Invert Recognizable Words - Good password checkers always reverse common words, so inverting a bad password does not any more secure.非セキュアな例には、以下が含まれます。
- R0X4H
- nauj
- 9-DS
- Do not Write Down Your Password: 文書にパスワードを保存しないでください。覚えておく方がはるかに安全です。
- すべてのマシンに同じパスワードを使用しないでください。各マシンに個別のパスワードを作成することが重要です。これにより、1 つのシステムが危険にさらされると、すべてのマシンが危険にさらされることはありません。
以下のガイドラインは、強力なパスワードを作成するのに役立ちます。
- パスワード を Least Eight Characters Long にする - パスワードが より長くなります。MD5 パスワードを使用する場合は、15 文字以上である必要があります。DES パスワードでは、最大長(8 文字)を使用します。
- 大文字の組み合わせと小文字の組み合わせ - Red Hat Enterprise Linux は大文字と小文字を区別するため、組み合わせてパスワードの強度を強化します。
- 英数字と番号の組み合わせ - 特に(最初または末尾だけでなく)中間者に追加する場合はパスワードの強度を強化できます。
- Include Non-Alphanumeric Characters - &, $, > などの特殊文字を使用すると、パスワードの強度が大幅に向上します(DES パスワードを使用する場合は不可能です)。
- パスワード を覚えておくことができない場合、パスワードの選択 - 世界で最善な パスワードはほとんど役に立ちません。パスワードを記憶するには、頭文字などのデバイスを使用してください。
これらのルールはすべて、不正なパスワードの特性を回避しながら、適切なパスワードのすべての基準を満たすパスワードを作成することが難しい場合があります。幸いなことに、覚えやすい安全なパスワードを生成する手順がいくつかあります。
48.1.3.1.1. 安全なパスワード作成方法
セキュアなパスワードの作成に使用する方法は多数あります。より一般的な方法の 1 つに、頭字語が必要です。以下に例を示します。
- 以下のような簡単に覚えているフレーズについて考えてみましょう。"Randm through the river and through the woods, to grandmother's house we go."
- 次に、頭字語(句読点を含む)に変換します。
otrattw,tghwg.
- 略語の文字の番号と記号を置き換えて、複雑さを追加します。たとえば、
7
をt
に、at 記号(@
)をa
に置き換えます。o7r@77w,7ghwg.
H
など、少なくとも 1 文字を大文字にして、複雑さをさらに追加します。o7r@77w,7gHwg.
- 最後に、システムには上記のサンプルパスワードを使用しないでください。
安全なパスワードの作成は必須ですが、特に大規模な組織内のシステム管理者にとっては、パスワードを適切に管理することも重要です。以下のセクションでは、組織内でユーザーパスワードを作成し、管理するためのグッドプラクティスについて詳しく説明します。
48.1.3.2. 組織内でのユーザーパスワードの作成
組織がユーザー数が多い場合、システム管理者は、適切なパスワードを強制的に使用するために 2 つの基本的なオプションを利用できます。パスワードが許容可能な品質であることを確認しつつ、ユーザーのパスワードを作成したり、ユーザーが自分のパスワードを作成できるようにすることもできます。
ユーザーのパスワードを作成することで、パスワードの安全性は確保されますが、組織が大きくなるにつれ、大変な作業となります。また、ユーザーがパスワードを書き込むリスクが高まります。
このような理由から、ほとんどのシステム管理者は、ユーザーが自分のパスワードを作成することを好みますが、パスワードが適切であること、場合によっては、ユーザーがパスワードのエージングを通じて定期的にパスワードを変更するように強制します。
48.1.3.2.1. 強固なパスワードの強制
侵入からネットワークを保護するには、システム管理者が組織内で使用するパスワードが強力なものであることを確認することをお勧めします。ユーザーがパスワードの作成や変更を求められたら、Pluggable Authentication Manager (PAM)を認識するコマンドラインアプリケーション passwd を使用できます。したがって、パスワードが短すぎるか、または解読しやすいかどうかを確認してください。このチェックは、
pam_NORMAL.so
PAM モジュールを使用して実行されます。PAM はカスタマイズ可能であるため、pam_passwdqc
( http://www.openwall.com/passwdqc/から利用可能)や新しいモジュールを書き込むなど、パスワード整合性チェッカーをさらに追加することができます。利用可能な PAM モジュールの一覧は、http://www.kernel.org/pub/linux/libs/pam/modules.html を参照してください。PAM の詳細は、「PAM (プラグ可能な認証モジュール)」 を参照してください。
パスワードの作成時に実行されるパスワードチェックでは、パスワードに対してパスワードクラッキングプログラムを実行するのと同様に、不正なパスワードが検出されません。
Red Hat Enterprise Linux では、パスワードクラッキングプログラムが多数用意されていますが、オペレーティングシステムには同梱されていません。以下は、一般的なパスワードクラッキングプログラムの一部です。
注記
これらのツールはいずれも Red Hat Enterprise Linux には提供されないため、Red Hat, Inc. では対応していません。
- John The Ripper - 高速で柔軟なパスワードクラッキングプログラム。複数の単語リストを使用でき、ブルートフォースのパスワードクラッキングが可能です。http://www.openwall.com/john/ からオンラインで使用できます。
- crack - 最もよく知られているパスワードクラッキングソフトウェアも非常 に 高速ですが、John The Ripper として簡単に使用できません。オンラインについては http://www.openwall.com/john/ を参照してください。
- Slurpie - Slurpie は John The Ripper and Crack と似ていますが、複数のコンピューターで同時に実行するように設計されており、分散パスワードクラッキング攻撃を作成します。これは、http://www.ussrback.com/distributed.htm でオンラインの他の多くの分散攻撃セキュリティー評価ツールと共に確認できます。
Warning
組織内のクラッキングを試みる前に、常に書き込みで承認を受けます。
48.1.3.2.2. パスワードのエージング
パスワードエージングは、組織内の不正なパスワードから保護するためにシステム管理者が使用するもう一つの技術です。パスワードエージングとは、指定された期間 (通常は 90 日間) が経過すると、ユーザーは新しいパスワードを作成するように求められることを意味します。この背景の理論は、ユーザーが定期的にパスワードを変更することを強制した場合、クラッキングされたパスワードは侵入者にとって限られた時間しか有効でないという理論があります。しかし、パスワードエージングには、ユーザーがパスワードを書き留める可能性が高くなるというデメリットがあります。
Red Hat Enterprise Linux では、chage コマンドまたはグラフィカルユーザー マネージャー (system-config-users)アプリケーションという、2 つの Red Hat Enterprise Linux でのパスワードの変更を指定するために使用される主なプログラムがあります。
chage コマンドの
-M
オプションは、パスワードの最大有効日数を指定します。たとえば、ユーザーのパスワードを 90 日間で期限切れになるように設定するには、以下のコマンドを使用します。
chage -M 90 <username>
上記のコマンドで、< username> をユーザーの名前に置き換えます。パスワードの有効期限を無効にするには、
-M
オプションの後に 99999 の値を使用することは従来の 273 年以上に相当します。
また、インタラクティブモードで chage コマンドを使用して、複数のパスワードエージングおよびアカウントの詳細を変更することができます。次のコマンドを使用して、インタラクティブモードに入ります。
chage <username>
以下は、このコマンドを使用した対話セッションの例です。
~]# chage davido
Changing the aging information for davido
Enter the new value, or press ENTER for the default
Minimum Password Age [0]: 10
Maximum Password Age [99999]: 90
Last Password Change (YYYY-MM-DD) [2006-08-18]:
Password Expiration Warning [7]:
Password Inactive [-1]:
Account Expiration Date (YYYY-MM-DD) [1969-12-31]:
~]#
利用可能なオプションの詳細は、chage の man ページを参照してください。
また、以下のように、グラフィカル User Manager アプリケーションを使用して、パスワードのエージングポリシーを作成することもできます。この手順を実行するには、管理者権限が必要なことに注意してください。
- パネル上の system-config-users を入力します。メニューをクリックして から をクリックして User Manager を表示させます。または、シェルプロンプトでコマンド
- ユーザー タブをクリックして、ユーザーリストの中から必要なユーザーを選択します。
- ツールバーのをクリックして、ユーザー設定のダイアログボックスを表示させます (または メニューで を選択します) 。
- Password Info タブをクリックし、Enable password expiration のチェックボックスを選択します。
- Days before change required フィールドに必要な値を入力して、 をクリックします。
図48.1 パスワードのエージングオプションの指定
[D]
ユーザーおよびグループの設定(初回パスワードを強制するための手順を含む)の詳細は、37章ユーザーとグループ を参照してください。
48.1.4. 管理的コントロール
ホームマシンを管理する場合、ユーザーはいくつかのタスクを root ユーザーとして実行するか、sudo や su などの setuid プログラムを介して効果的な root 権限を取得して実行する必要があります。setuid プログラムとは、プログラムを操作するユーザーではなく、プログラムの所有者のユーザー ID(UID) で動作するプログラムのことです。このようなプログラムは、以下の例のように、長いフォーマットリストの所有者セクションで
s
で示されます。
-rwsr-xr-x 1 root root 47324 May 1 08:09 /bin/su
注記
s
は大文字または小文字の場合があります。大文字で表示されている場合は、基になる許可ビットが設定されていないことを意味します。
ただし、組織の管理者では、組織内のユーザーが自分のマシンに必要な管理アクセス量に応じて選択する必要があります。
pam_console.so
と呼ばれる PAM モジュールを介して、リムーバブルメディアの再起動やマウントなど、通常は root ユーザー専用に予約されている一部のアクティビティーは、物理コンソールでログインする最初のユーザーに許可されます( pam_console.so
モジュールの詳細は、「PAM (プラグ可能な認証モジュール)」 を参照してください)。 ただし、ネットワーク設定の変更、新しいマウスの設定、ネットワークデバイスのマウントなど、その他の重要なシステム管理タスクは、管理者権限なしではできません。その結果、システム管理者は、ネットワーク上のユーザーがどの程度のアクセスを受けるべきかを決定する必要があります。
48.1.4.1. Root アクセスの許可
組織内のユーザーが信頼され、computer-literate である場合は、root アクセスを許可することは問題ではない場合があります。ユーザーによる root アクセスを可能にすると、デバイスの追加やネットワークインターフェイスの設定などのマイナーなアクティビティーが個々のユーザーが処理でき、システム管理者はネットワークセキュリティーやその他の重要な問題に対処することができます。
一方、個々のユーザーに root アクセス権限を付与すると、以下の問題が発生する可能性があります。
- マシン の設定ミス - root アクセス権を持つユーザーは、マシンの設定を誤設定し、問題の解決にサポートが必要になる場合があります。さらに悪いことに、知らずにセキュリティーホールを発生させてしまう可能性があります。
- 安全で ないサービス の実行 - root アクセスを持つユーザーは、マシン上で FTP や Telnet などのセキュアでないサーバーを実行し、ユーザー名とパスワードを危険にさらす可能性があります。これらのサービスは、この情報をプレーンテキストでネットワーク経由で送信します。
- 電子メールの添付ファイルを root で実行 — まれにですが、Linux に影響を与える電子メールウィルスが存在します。ただし、脅威となるのは、root ユーザーが実行する時だけです。
48.1.4.2. Root アクセスの拒否
管理者がこれらの理由またはその他の理由で root としてログインできない場合、root パスワードは秘密にして、ブートローダーのパスワード保護によりランレベル 1 またはシングルユーザーモードへのアクセスを禁止する必要があります(このトピックの詳細については、「ブートローダーのパスワード」 を参照してください)。
また、管理者が root ログインを許可しない 4 つの方法を以下に示します。
- root シェルの変更
- ユーザーが root として直接ログインできないように、システム管理者は、
/etc/passwd
ファイルで root アカウントのシェルを /sbin/nologin に設定します。表48.1 Root シェルの無効化 影響あり 影響なし root シェルへのアクセスを阻止し、そのような試行をログに記録します。以下のプログラムは root アカウントにアクセスできません。- login
- gdm
- kdm
- xdm
- su
- ssh
- scp
- sftp
FTP クライアント、メールクライアント、多くの setuid プログラムなど、シェルを必要としないプログラム。以下のプログラムは root アカウントにアクセスでき ません。- sudo
- FTP クライアント
- Email クライアント
- 任意のコンソールデバイス(tty)を介した root アクセスの無効化
- root アカウントへのアクセスをさらに制限するために、管理者は
/etc/securetty
ファイルを編集してコンソールで root ログインを無効にすることができます。このファイルは、root ユーザーがログインできるすべてのデバイスを一覧表示します。ファイルが存在しない場合は、コンソールまたは raw ネットワークインターフェイスを介して、root ユーザーはシステム上の任意の通信デバイス経由でログインできます。これは危険です。これは、ユーザーが Telnet を介して root としてマシンにログインできるためです。これにより、パスワードがプレーンテキストでネットワークを介して送信されます。デフォルトでは、Red Hat Enterprise Linux の/etc/securetty
ファイルでは、マシンに物理的に接続されているコンソールで root ユーザーしかログインできません。root ユーザーがログインできないようにするには、root でシェルプロンプトで以下のコマンドを入力して、このファイルの内容を削除します。echo > /etc/securetty
KDM、GDM、XDM のログインマネージャーでsecuretty
サポートを有効にするには、次の行を追加します。auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
追加対象のファイルは以下のとおりです。/etc/pam.d/gdm
/etc/pam.d/gdm-autologin
/etc/pam.d/gdm-fingerprint
/etc/pam.d/gdm-password
/etc/pam.d/gdm-smartcard
/etc/pam.d/kdm
/etc/pam.d/kdm-np
/etc/pam.d/xdm
Warning空の/etc/securetty
ファイルは、root ユーザーが OpenSSH スイートを使用してリモートでログインすることを阻止し ませ ん。これは、認証後までコンソールが開かないためです。表48.2 Root ログインの無効化 影響あり 影響なし コンソールまたはネットワークを介して root アカウントにアクセスできないようにします。以下のプログラムは root アカウントにアクセスできません。- login
- gdm
- kdm
- xdm
- tty を開くその他のネットワークサービス
root としてログインしないが、setuid またはその他のメカニズムを使用して管理タスクを実行するプログラム。以下のプログラムは root アカウントにアクセスでき ません。- su
- sudo
- ssh
- scp
- sftp
- Root SSH ログインの無効化
- SSH プロトコルを介した root ログインを防ぐには、SSH デーモンの設定ファイル
/etc/ssh/sshd_config
を編集し、以下の行を変更します。#PermitRootLogin yes
の行を以下のように変更します。PermitRootLogin no
表48.3 Root SSH ログインの無効化 影響あり 影響なし ツールの OpenSSH スイートを介した root アクセスを防ぎます。以下のプログラムは root アカウントにアクセスできません。- ssh
- scp
- sftp
OpenSSH のツール群に含まれないプログラム。 - PAM を使用して、サービスへの root アクセスを制限する
- PAM は、
/lib/security/pam_listfile.so
モジュールを通じて、特定のアカウントを非常に柔軟に拒否することができます。管理者は、このモジュールを使用して、ログインを許可されていないユーザーのリストを参照できます。システムサービスへの root アクセスを制限するには、/etc/pam.d/
ディレクトリーのターゲットサービスの ファイルを編集し、pam_listfile.so
モジュールが認証に必要であることを確認します。以下は、/etc/pam.d/vsftpd
PAM 設定ファイルの vsftpd FTP サーバーに対するモジュールの使用例です (ディレクティブが 1 行の場合、最初の行の最後の\
文字は 不要 です)。auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
これにより、PAM は/etc/vsftpd.ftpusers
ファイルを参照し、記載されているユーザーのサービスへのアクセスを拒否するように指示されます。管理者はこのファイルの名前を変更することができ、各サービスごとに個別のリストを保持することも、1 つの中央リストを使用して複数のサービスへのアクセスを拒否することもできます。管理者が複数のサービスへのアクセスを拒否したい場合、同様の行を PAM 設定ファイル (メールクライアントの場合は/etc/pam.d/pop
と/etc/pam.d/imap
、SSH クライアントの場合は/etc/pam.d/ssh
) に追加することができます。PAM の詳細は、「PAM (プラグ可能な認証モジュール)」 を参照してください。表48.4 PAM を使用した root の無効化 影響あり 影響なし PAM が認識するネットワークサービスへの root アクセスを防ぎます。以下のサービスは、root アカウントにアクセスできません。- login
- gdm
- kdm
- xdm
- ssh
- scp
- sftp
- FTP クライアント
- Email クライアント
- すべての PAM 対応サービス
PAM を意識していないプログラム、サービス。
48.1.4.3. Root アクセスの制限
管理者は、root ユーザーへのアクセスを完全に拒否するのではなく、su や sudo などの setuid プログラムを介してのみアクセスを許可したい場合があります。
48.1.4.3.1. su コマンド
ユーザーが su コマンドを実行すると、root パスワードが求められ、認証後に root シェルプロンプトが表示されます。
su コマンドでログインすると、そのユーザーは root ユーザーに なり、システムへの絶対管理アクセスを持つことになります。[16]をクリックします。さらに、ユーザーが root になったら、パスワードを求められることなく、su コマンドを使用してシステム上の他のユーザーに変更を加えることができます。
このプログラムは非常に強力であるため、組織内の管理者はコマンドにアクセスできるユーザーを制限したい場合があります。
これを行う最も簡単な方法は、wheel と呼ばれる特別な管理グループにユーザーを追加することです。これを実行するには、以下のコマンドを root で入力します。
usermod -G wheel <username>
このコマンドで、< username> を wheel グループに追加するユーザー名に置き換えます。
また、以下のように User Manager を使用してグループメンバーシップを変更することもできます。この手順を実行するには、管理者権限が必要なことに注意してください。
- パネル上の system-config-users を入力します。メニューをクリックして から をクリックして User Manager を表示させます。または、シェルプロンプトでコマンド
- ユーザー タブをクリックして、ユーザーリストの中から必要なユーザーを選択します。
- ツールバーのをクリックして、ユーザー設定のダイアログボックスを表示させます (または メニューで を選択します) 。
- グループ タブをクリックし、wheel グループのチェックボックスにチェックマークを付けて をクリックします。図48.2「wheel グループにユーザーを追加します。」 を参照してください。
- テキストエディターで su (
/etc/pam.d/su
)の PAM 設定ファイルを開き、以下の行からコメント # を削除します。auth required pam_wheel.so use_uid
この変更により、wheel
の管理グループメンバーのみが、su コマンドを使用して別のユーザーに切り替えることができます。
図48.2 wheel グループにユーザーを追加します。
[D]
注記
root ユーザーはデフォルトで
wheel
グループに含まれます。
48.1.4.3.2. sudo コマンド
sudo コマンドは、ユーザーに管理アクセスを付与する別のアプローチを提供します。信頼されるユーザーが、管理コマンドの前に sudo を付けると、このユーザー 自身 のパスワードが要求されます。ユーザーが認証され、コマンドが許可されると、管理コマンドは root 権限で実行されているかのように実行されます。
sudo コマンドの基本的な形式は次のとおりです。
sudo <command>
上記の例では、& lt;command& gt; は、通常は root ユーザー用に予約されたコマンド( mount など)に置き換えます。
重要な影響
sudoers は 5 分以内にパスワードを要求せずにコマンドを再度使用できるため、sudo コマンドのユーザーはマシンから接続する前にログアウトする細心の注意を払う必要があります。この設定は、設定ファイル
/etc/sudoers
を使用して変更できます。
sudo コマンドを使用すると、ハイレベルの柔軟性が可能になります。たとえば、
/etc/sudoers
設定ファイルに記載されているユーザーのみが sudo コマンドの使用が許可され、root シェルではなく、ユーザーの シェルでコマンドが実行されます。これは、「Root アクセスの拒否」 に示されるように、root シェルを完全に無効にできることを意味します。
sudo コマンドは、包括的な監査証跡も提供します。認証が成功したたびに
/var/log/messages
ファイルに記録され、発行者のユーザー名とともに発行されたコマンドは /var/log/secure
ファイルに記録されます。
sudo コマンドのもう 1 つの利点は、管理者がそれぞれのユーザーにニーズに応じて特定のコマンドへのアクセスを許可することができることです。
管理者が sudo 設定ファイル
/etc/sudoers
を編集する場合は、visudo コマンドを使用する必要があります。
誰かに完全な管理権限を付与するには、visudo と入力して、ユーザー権限の指定セクションに以下のような行を追加します。
juan ALL=(ALL) ALL
この例では、ユーザー
juan
が任意のホストから sudo を使用し、任意のコマンドを実行できます。
以下の例は、sudo を設定する際に可能な粒度を示しています。
%users localhost=/sbin/shutdown -h now
この例が示しているのは、コンソールからであれば、どのユーザーが /sbin/shutdown -h コマンドを実行できることを示しています。
sudoers
の man ページには、このファイルのオプションの詳細なリストがあります。
48.1.5. 利用可能なネットワークサービス
組織内のシステム管理者にとって、管理コントロールへのユーザーアクセスは重要な問題ですが、Linux システムを管理および運用するすべての人にとって、どのネットワークサービスがアクティブであるかを監視することは最も重要なことです。
Red Hat Enterprise Linux のサービスの多くは、ネットワークサーバーとして機能します。ネットワークサービスがマシン上で実行されている場合、サーバーアプリケーション (デーモン と呼ばれる) は、1 つ以上のネットワークポートで接続をリッスンしています。これらの各サーバーは、潜在的な攻撃経路として扱われる必要があります。
48.1.5.1. サービスへのリスク
ネットワークサービスは、Linux システムに多くのリスクをもたらす可能性があります。以下は、一部の主要な問題の一覧になります。
- サービス拒否攻撃 (DoS) — サービスにリクエストをフラッディングさせると、サービスは各リクエストをログに記録して応答しようとするため、サービス拒否攻撃はシステムを使用不能にすることができます。
- Script Vulnerability Attacks - サーバーが、Web サーバーが一般的に行うようにサーバー側のアクションを実行するスクリプトを使用している場合、クラッカーが不適切に記述されたスクリプトを攻撃する可能性があります。これらのスクリプトの脆弱性攻撃により、バッファーオーバーフロー状態が発生したり、攻撃者がシステム上のファイルを変更したりできます。
- バッファーオーバーフロー攻撃 - 0 から 1023 までのポート番号が付いたポートに接続するサービスは、管理ユーザーとして実行する必要があります。アプリケーションに悪用可能なバッファーオーバーフローがある場合、攻撃者はデーモンを実行しているユーザーとしてシステムにアクセスできます。悪用可能なバッファーオーバーフローが存在するため、クラッカーは自動化ツールを使って脆弱性のあるシステムを特定し、アクセス権を獲得した後は、自動化ルートキットを使ってシステムへのアクセス権を維持します。
注記
バッファーオーバーフローの脆弱性の脅威は、ExecShield によって Red Hat Enterprise Linux で軽減されます。これは、x86 互換のユニプロセッサーおよびマルチプロセッサーカーネルでサポートされる実行可能なメモリーのセグメンテーションおよび保護テクノロジーです。ExecShield は、仮想メモリーを実行可能セグメントと非実行セグメントに分離することで、バッファーオーバーフローのリスクを低減します。実行可能セグメントの外で実行しようとするプログラムコード (バッファーオーバーフローの悪用から注入された悪意のあるコードなど) は、セグメンテーションフォールトを引き起こし、終了します。
ExecShield には、AMD64 プラットフォームでの No eXecute (NX)テクノロジーのサポートと、Itanium システムおよび Intel® 64 システムの eXecute Disable (XD)テクノロジーのサポートも含まれています。これらのテクノロジーは ExecShield と連携して機能し、4KB の実行可能コードの粒度で仮想メモリーの実行可能な部分で悪意のあるコードが実行されるのを防ぐため、スパルドオーバーフローの悪用による攻撃のリスクが軽減されます。
ヒント
ネットワークに対する攻撃に対する公開を制限するには、未使用のすべてのサービスをオフにする必要があります。
48.1.5.2. サービスの識別と設定
セキュリティーを強化するために、Red Hat Enterprise Linux でインストールされるほとんどのネットワークサービスは、デフォルトでオフになっています。ただし、いくつかの注目すべき例外があります。
- cupsd: Red Hat Enterprise Linux のデフォルトのプリントサーバー。
- L PD: 代替プリントサーバー。
- xinetd — gssftp や telnet などのさまざまな下位サーバーへの接続を制御するスーパーサーバー。
- Sendmail - Sendmail Mail Transport Agent (MTA)はデフォルトで有効になっていますが、からの接続はリッスンしません。 localhostをクリックします。
- sshd — OpenSSH サーバー。Telnet に代わる安全なサーバー。
これらのサービスを実行したままにするかどうかを決定する際には、慎重に一般的な意味とエラーを使用することが推奨されます。たとえば、プリンターが利用できない場合は、cupsd を実行したままにします。portmap の場合も同様です。NFSv3 ボリュームをマウントしないか、NIS ( ypbind サービス)を使用しない場合は、portmap を無効にする必要があります。
Red Hat Enterprise Linux には、サービスのオン/オフを切り替えるように設計された 3 つのプログラムが同梱されています。これらは、サービス設定ツール (system-config-services)、ntsysv、および chkconfig です。これらのツールの使用方法は、18章 を参照してください。
図48.3 サービス設定ツール
[D]
特定のサービスの目的が不明な場合は、Services Configuration Tool には 図48.3「サービス設定ツール」 の説明フィールドがあり、追加情報が提供されます。
起動時に起動できるネットワークサービスの確認は、ストーリーの一部のみです。また、どのポートが開いていてリッスンしているかも確認する必要があります。詳細は、「リッスンしているポートの確認」 を参照してください。
48.1.5.3. 安全でないサービス
潜在的に、どのようななネットワークサービスも安全ではありません。そのため、使っていないサービスをオフにすることはとても重要です。サービスの不正使用は定期的に確認され、パッチが適用されるため、ネットワークサービスに関連するパッケージを定期的に更新することが非常に重要です。詳細は、「セキュリティー更新」 を参照してください。
一部のネットワークプロトコルは、本質的に他のプロトコルよりも安全ではありません。以下の動作を実行するサービスがそれに当たります。
- 暗号化されていないネットワーク上でのユーザー名とパスワードの送信 — Telnet や FTP などの多くの古いプロトコルは、認証セッションを暗号化しないため、可能な限り避ける必要があります。
- 暗号化されていないネットワーク上での機密データの送信 — 多くのプロトコルは、暗号化されていないネットワーク上でデータを送信します。これらのプロトコルには、Telnet、FTP、HTTP、および SMTP が含まれます。NFS や SMB などの多くのネットワークファイルシステムも、暗号化されていないネットワークを介して情報を送信します。これらのプロトコルを使用する場合、ユーザーの責任において、送信されるデータの種類を制限する必要があります。netdump などのリモートメモリーダンプサービスは、暗号化されていないネットワーク上でメモリーの内容を送信します。メモリーダンプにはパスワードや、さらに悪いデータベースエントリーやその他の機密情報を含めることができます。finger や rwhod などの他のサービスは、システムのユーザーに関する情報を表示します。
本質的に安全でないサービスの例として、rlogin、rsh、telnet、vsftpd があります。
SSH を優先して、すべてのリモートログインおよびシェルプログラム(rlogin、rsh、telnet)を回避する必要があります。sshd の詳細は、「セキュリティー強化通信ツール」 を参照してください。
FTP は、リモートシェルとしてのシステムのセキュリティーにとって本質的に危険ではありませんが、問題を回避するために FTP サーバーは慎重に設定し監視する必要があります。FTP サーバーのセキュリティー保護に関する詳細は、「FTP のセキュア化」 を参照してください。
慎重に実装し、ファイアウォールの内側に置くべきサービスは以下の通りです。
- finger
- authd (これは以前の Red Hat Enterprise Linux リリースで identd と呼ばれていました)
- netdump
- netdump-server
- nfs
- rwhod
- sendmail
- SMB (Samba)
- yppasswdd
- ypserv
- ypxfrd
ネットワークサービスのセキュリティー保護に関する詳細は、「サーバーセキュリティー」 を参照してください。
次のセクションでは、簡単なファイアウォールを設定するために使用できるツールについて説明します。
48.1.6. 個人ファイアウォール
必要な ネットワークサービスを設定したら、ファイアウォールを実装することが重要です。
重要な影響
必要なサービスを設定し、ファイアウォールを実装するしてから、インターネットまたは信頼しない他のネットワークに接続する必要があります。
ファイアウォールにより、ネットワークパケットがシステムのネットワークインターフェイスにアクセスできなくなります。ファイアウォールによってブロックされたポートにリクエストが行われた場合、要求は無視されます。ブロックされたポートの 1 つをサービスがリッスンしている場合、パケットは受信されず、事実上無効になります。このため、設定されたサービスによって使用されるポートへのアクセスをブロックせずに、ファイアウォールを設定して使用されていないポートへのアクセスをブロックする場合は注意が必要です。
ほとんどのユーザーは、Red Hat Enterprise Linux に同梱されるグラフィカルなファイアウォール設定ツールである Security Level Configuration Tool (system-config-securitylevel)に最適なツールになります。このツールは、コントロールパネルインターフェイスを使用して汎用ファイアウォール用に幅広い iptables ルールを作成します。
このアプリケーションの使用方法と利用可能なオプションは、「ファイアウォールの基本設定」 を参照してください。
高度なユーザーおよびサーバー管理者は、iptables でファイアウォールを手動で設定することが適切なオプションです。詳細は、「ファイアウォール」 を参照してください。iptables コマンドの包括的なガイドは、「iptables」 を参照してください。
48.1.7. セキュリティー強化通信ツール
インターネットのサイズと人気が大きくなるにつれ、通信インターセプションの脅威があります。長年にわたり、ネットワーク上で転送される通信を暗号化するツールを開発しました。
Red Hat Enterprise Linux には、ネットワークを通過する情報を保護するために、高レベルの公開鍵暗号暗号アルゴリズムを使用する 2 つの基本ツールが同梱されています。
- OpenSSH: ネットワーク通信を暗号化する SSH プロトコルのフリー実装。
- GNU Privacy Guard (GPG): データを暗号化する PGP (Pretty Good Privacy)暗号化アプリケーションの無料実装。
OpenSSH は、リモートマシンにアクセスするより安全な方法で、telnet や rsh などの以前の暗号化されていないサービスを置き換えます。OpenSSH には、sshd と呼ばれるネットワークサービスと、コマンドラインクライアントアプリケーション 3 つが含まれています。
- ssh: セキュアなリモートコンソールアクセスクライアント。
- scp: セキュアなリモートコピーコマンド。
- SFTP: インタラクティブなファイル転送セッションを可能にするセキュアな擬似ftpクライアント。
重要な影響
GPG は、プライベートメール通信を保証する 1 つの方法です。パブリックネットワークを介して機密データを電子メールで送信したり、ハードドライブの機密データを保護するためにも使用できます。