Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第4章 ツールとサービスでシステムを強化する
4.1. デスクトップのセキュリティー
Red Hat Enterprise Linux 7 は、攻撃に対してデスクトップを強化し、不正アクセスを防止するためのいくつかの方法を提供します。このセクションでは、ユーザーパスワード、セッションとアカウントのロック、およびリムーバブルメディアの安全な取り扱いに関する推奨事項を説明します。
4.1.1. パスワードセキュリティー
パスワードは、Red Hat Enterprise Linux 7 がユーザーの ID を確認するために使用する主な方法です。このため、パスワードのセキュリティーは、ユーザー、ワークステーション、ネットワークを保護するために非常に重要です。
セキュリティー上の理由から、インストールプログラムは、セキュアハッシュアルゴリズム 512(SHA512)およびシャドウパスワードを使用するようにシステムを設定します。これらの設定を変更しないことを強く推奨します。
インストール時にシャドーパスワードの選択を解除すると、すべてのパスワードが一方向ハッシュとして誰でも読み取り可能な
/etc/passwd
ファイルに保存されるため、システムはオフラインでのパスワードクラッキング攻撃に対して脆弱になります。侵入者が通常のユーザーとしてマシンにアクセスできる場合、/etc/passwd
ファイルを自分のマシンにコピーして、それに対してパスワードクラッキングプログラムをいくつでも実行することができます。ファイル内に安全でないパスワードがあれば、パスワードクラッカーに発見されるのは時間の問題です。
シャドーパスワードは、パスワードのハッシュを root ユーザーのみが読み取り可能なファイル
/etc/shadow
に保存することで、このタイプの攻撃を排除します。
これにより、潜在的な攻撃者は、SSH や FTP などのマシン上のネットワークサービスにログインして、リモートでパスワードクラッキングを試みるようになります。この種のブルートフォース攻撃ははるかに遅く、何百回ものログイン試行の失敗がシステムファイルに書き込まれるため、明らかな痕跡が残ります。もちろん、クラッカーがパスワードの弱いシステムで深夜に攻撃を開始した場合、夜明け前にアクセスできるようになり、ログファイルを編集して痕跡を消している可能性もある。
形式およびストレージの考慮事項に加えて、コンテンツの問題があります。パスワードクラッキング攻撃からアカウントを保護するためにユーザーができる最も重要なことは、強力なパスワードを作成することです。
注記
Red Hat では、Red Hat Identity Management (IdM) などの中央認証ソリューションを使用することを推奨しています。ローカルパスワードの使用よりも、中央ソリューションの使用が推奨されます。詳細は、次を参照してください。
4.1.1.1. 強固なパスワードの作成
安全なパスワードを作成する際、ユーザーは、短いパスワードや複雑なパスワードよりも長いパスワードの方が強力であることを覚えておく必要があります。数字や特殊文字、大文字を含むとはいえ、たった 8 文字のパスワードを作成することは得策ではありません。John The Ripper などのパスワードクラッキングツールは、このような、人が覚えにくいパスワードの解読に最適化されています。
情報理論では、エントロピーは確率変数に関連する不確実性のレベルであり、ビットで示されます。エントロピー値が高いほど、パスワードの安全性は高くなります。NIST SP 800-63-1 によると、一般的に選択される 50000 個のパスワードで構成される辞書に存在しないパスワードには、少なくとも 10 ビットのエントロピーが必要です。そのため、4 つのランダムな単語で構成されるパスワードは、約 40 ビットのエントロピーを含んでいます。セキュリティーを強化するために複数の単語で構成される長いパスワードは、パスフレーズ とも呼ばれます。次に例を示します。
randomword1 randomword2 randomword3 randomword4
もし、システムが大文字、数字、特殊文字の使用を強制している場合、上記の推奨に従ったパスフレーズは、最初の文字を大文字に変更して "
1!
" を追加するなどの簡単な方法で変更できます。このような変更は、パスフレーズのセキュリティーを大幅に 向上させるものではない ことに注意してください。
自分でパスワードを作成するもう 1 つの方法は、パスワードジェネレータを使用することです。pwmake は、大文字、小文字、数字、特殊文字の 4 つの文字グループすべてで構成されるランダムパスワードを生成するためのコマンドラインツールです。このユーティリティーでは、パスワードの生成に使用するエントロピービットの数を指定することができます。エントロピーは、
/dev/urandom
から引き出されます。指定できる最小のビット数は 56 ビットで、ブルートフォース攻撃がまれなシステムやサービスのパスワードとしては十分と言えます。攻撃者がパスワードハッシュファイルに直接アクセスできないアプリケーションでは、64 ビットで十分です。攻撃者がパスワードハッシュを直接入手する可能性がある場合や、パスワードを暗号化キーとして使用する場合は、80 ビットから 128 ビットを使用する必要があります。無効な数のエントロピービットを指定した場合、pwmakeはデフォルトのビット数を使用します。128 ビットのパスワードを作成する場合は、次のコマンドを入力します。
pwmake 128
安全なパスワードの作成にはさまざまなアプローチがありますが、以下のような悪い習慣は必ず避けてください。
- 辞書の単語 1 つ、外国語の単語 1 つ、倒置語、または数字のみを使用すること。
- パスワードまたはパスフレーズが 10 文字未満であること。
- キーボードレイアウトの一連のキーを使用すること。
- パスフレーズを書き留めること。
- 生年月日、記念日、家族の名前、またはペットの名前など、個人情報をパスワードに使用すること。
- 複数のマシンで同じパスフレーズやパスワードを使用すること。
安全なパスワードの作成は必須ですが、特に大規模な組織内のシステム管理者にとっては、パスワードを適切に管理することも重要です。以下のセクションでは、組織内でユーザーパスワードを作成し、管理するためのグッドプラクティスについて詳しく説明します。
4.1.1.2. 強固なパスワードの強制
多数のユーザーを抱える組織では、システム管理者は、強力なパスワードの使用を強制するために、2 つの基本的なオプションを利用することができます。システム管理者がユーザーのパスワードを作成することもできますし、パスワードの強度が十分であることを確認しながら、ユーザーが独自のパスワードを作成できるようにすることもできます。
ユーザーのパスワードを作成することで、パスワードの安全性は確保されますが、組織が大きくなるにつれ、大変な作業となります。また、ユーザーがパスワードを書き留めることで、パスワードが流出する危険性も高まります。
このような理由から、多くのシステム管理者は、ユーザー自身がパスワードを作成することを望んでいますが、それらのパスワードが十分に強力であるかについては積極的に検証しています。場合によっては、管理者は、パスワードエージングを通じて、ユーザーに定期的にパスワードを変更するように強制することもあります。
ユーザーがパスワードの作成や変更を求められた場合、PAM対応(Pluggable Authentication Modules)のコマンドラインユーティリティpasswdを使用して、パスワードが短すぎたり、解明されやすいものでないかどうかをチェックすることができます。このチェックは、
pam_pwquality.so
PAM モジュールによって実行されます。
注記
Red Hat Enterprise Linux 7 では、パスワード品質チェックのデフォルトモジュールとして Red Hat Enterprise Linux6 で使用されていた
pam_cracklib
に代わり、pam_pwquality
PAM モジュールが使用されています。これは、pam_cracklib
と同じバックエンドを使用します。
pam_pwquality
モジュールは、パスワードの強度を一連の規則に照らしてチェックするために使用されます。その手順は 2 つのステップで構成されています。最初に、提供されたパスワードが辞書にあるかどうかをチェックします。辞書にない場合は、さらにいくつものチェックを続けます。pam_pwquality
は、/etc/pam.d/passwd
ファイルの password
コンポーネントで他の PAM モジュールと共にスタックされ、ルールのカスタムセットは /etc/security/pwquality.conf
設定ファイルで指定されます。これらのチェックの完全なリストについては、pwquality.conf (8) の man ページを参照してください。
例4.1 pwquality.conf
でパスワードの強度チェックを設定する。
pam_quality
の使用を有効にするには、/etc/pam.d/passwd
ファイルのpassword
スタックに以下の行を追加します。
password required pam_pwquality.so retry=3
チェックのオプションは、1 行に 1 つずつ指定します。たとえば、文字の 4 つのクラスすべてを含め、8 文字以上のパスワードを要求するには、次の行を
/etc/security/pwquality.conf
ファイルに追加します。
minlen = 8 minclass = 4
文字列と同じ連続した文字のパスワード強度チェックを設定するには、
/etc/security/pwquality.conf
に以下の行を追加してください。
maxsequence = 3 maxrepeat = 3
この例では、入力されたパスワードには、
abcd
などの単調なシーケンスで 3 文字を超えたり、1111
などの 3 文字を超える同一の連続した文字を含めることはできません。
注記
root ユーザーは、パスワード作成のルールを適用するユーザーであるため、警告メッセージが表示されても、自分自身または通常のユーザーに任意のパスワードを設定できます。
4.1.1.3. パスワードエージングの設定
パスワードエージングは、組織内の不正なパスワードから保護するためにシステム管理者が使用するもう一つの技術です。パスワードエージングとは、指定された期間 (通常は 90 日間) が経過すると、ユーザーは新しいパスワードを作成するように求められることを意味します。この背景には、ユーザーが定期的にパスワードを変更することを強制された場合、クラックされたパスワードは侵入者にとって限られた時間しか有効でないという理論があります。しかし、パスワードエージングには、ユーザーがパスワードを書き留める可能性が高くなるというデメリットがあります。
Red Hat Enterprise Linux 7 でパスワードエージングを指定するには、chage コマンドを使用します。
重要
Red Hat Enterprise Linux 7 では、シャドウパスワードはデフォルトで有効になっています。詳細は、Red Hat Enterprise Linux 7 System Administrator's Guide を参照してください。
chage コマンドの
-M
オプションは、パスワードの最大有効日数を指定します。たとえば、ユーザーのパスワードを 90 日間で期限切れになるように設定するには、以下のコマンドを使用します。
chage -M 90
username
上記のコマンドでは、username をユーザー名に置き換えます。パスワードの有効期限を無効にするには、
-M
オプションの後に -1
の値を使用します。
chage コマンドで使用できるオプションの詳細については、以下の表を参照してください。
表4.1 chage コマンドラインオプション
オプション | 説明 |
---|---|
-d days | 1970 年 1 月 1 日以降にパスワードを変更した日数を指定します。 |
-E date | アカウントがロックされる日付を YYYY-MM-DD のフォーマットで指定します。日付の代わりに、1970 年 1 月 1 日からの日数を使うこともできます。 |
-I days | パスワードの有効期限後、アカウントをロックするまでの非アクティブ日数を指定します。値が 0 の場合、パスワードの有効期限が切れた後、アカウントはロックされません。 |
-l | 現在のアカウントエージングの設定を一覧表示します。 |
-m days | ユーザーがパスワードを変更しなければならない最短日数を指定します。値を 0 とすると、パスワードは失効しません。 |
-M days | パスワードの最大有効日数を指定します。このオプションで指定した日数と、-d オプションで指定した日数を足した日数が、現在の日数より少ない場合、ユーザーはアカウントを使用する前にパスワードを変更する必要があります。 |
-W days | パスワードの有効期限の何日前にユーザーに警告を発するかを指定します。 |
また、インタラクティブモードで chage コマンドを使用して、複数のパスワードエージングおよびアカウントの詳細を変更することができます。次のコマンドを使用して、インタラクティブモードに入ります。
chage <username>
以下は、このコマンドを使用した対話セッションの例です。
~]# chage juan Changing the aging information for juan 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]:
ユーザーが初めてログインしたときにパスワードが失効するように設定することができます。これにより、ユーザーはすぐにパスワードを変更せざるを得なくなります。
- 初期パスワードを設定します。デフォルトのパスワードを割り当てるには、シェルプロンプトで、
root
として以下のコマンドを入力します。passwd username
警告passwd ユーティリティーには、null パスワードを設定するオプションがあります。null パスワードの使用は便利ですが、安全ではありません。第三者がログインして、安全でないユーザー名を使用してシステムにアクセスする可能性があるためです。null パスワードの使用は可能な限り避けてください。避けられない場合は、null パスワードでアカウントのロックを解除する前に、ユーザーがログインする準備ができていることを常に確認してください。 root
で以下のコマンドを実行して、パスワードの即時失効を強制します。chage
-d
0
usernameこのコマンドは、パスワードが最後に変更された日付の値をエポック (1970 年 1 月 1 日) に設定します。この値は、パスワードエージングポリシーがある場合、それに関係なく、パスワードの即時期限切れを強制します。
最初のログイン時に、ユーザーは新しいパスワードの入力を求められるようになりました。
4.1.2. アカウントのロック
Red Hat Enterprise Linux 7 では、
pam_faillock
PAM モジュールを使用することで、システム管理者は、指定された回数の試行が失敗した後に、ユーザーアカウントをロックアウトできるようになりました。ユーザーのログイン試行を制限することは、主に、ユーザーのアカウントパスワードを取得することを目的としたブルートフォース攻撃の可能性を防ぐことを目的としたセキュリティー対策として機能します。
pam_faillock
モジュールを使用すると、ログインの失敗が /var/run/faillock
ディレクトリーの各ユーザーの個別のファイルに保存されます。
注記
失敗した試行のログファイルの行の順序は重要です。この順序を変更すると、
even_deny_root
オプションが使用されている場合、root
ユーザーアカウントを含むすべてのユーザーアカウントがロックされる可能性があります。
以下の手順でアカウントロックを設定します。
- 3回失敗すると非ルートユーザーをロックアウトし、10分後にそのユーザーのロックを解除するには、
/etc/pam.d/system-auth
ファイルおよび/etc/pam.d/password-auth
ファイルのauth
セクションに2行追加します。編集後、両ファイルのauth
セクション全体は以下のようになります。auth required pam_env.so auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600 auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.so
2 行目、4 行目が追加されました。 - 前の手順で指定した両方のファイルの
account
セクションに、次の行を追加します。account required pam_faillock.so
- root ユーザーにもアカウントロックを適用するには、
/etc/pam.d/system-auth
ファイルと/etc/pam.d/password-auth
ファイルのpam_faillock
エントリーに、even_deny_root
オプションを追加します。auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=600 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=600 account required pam_faillock.so
ユーザー
john
が 3 回のログインに失敗した後、4 回目のログインを試みると、4 回目の試行でアカウントがロックされます。
~]$ su - john
Account locked due to 3 failed logins
su: incorrect password
ログインに何度も失敗してもシステムがユーザーをロックアウトしないようにするには、
/etc/pam.d/system-auth
と /etc/pam.d/password-auth
の両方で、pam_faillock
が初めて呼び出される行のすぐ上に次の行を追加します。また、user1
、user2
、よび user3
を実際のユーザー名に置き換えてください。
auth [success=1 default=ignore] pam_succeed_if.so user in user1:user2:user3
ユーザーごとの試行失敗回数を表示するには、
root
で次のコマンドを実行します。
~]$ faillock
john:
When Type Source Valid
2013-03-05 11:44:14 TTY pts/0 V
ユーザーアカウントのロックを解除するには、
root
で次のコマンドを実行します。
faillock --user <username> --reset
重要
cron
ジョブを実行すると、cron
ジョブを実行しているユーザーのpam_faillock
の失敗カウンタがリセットされるため、pam_faillock
をcron
用に設定すべきではありません。詳細は、Knowledge Centered Support (KCS) solution を参照してください。
authconfig でのカスタム設定の保持
authconfig ユーティリティーを使用して認証設定を変更する場合、
system-auth
ファイルおよび password-auth
ファイルは、authconfig ユーティリティーの設定で上書きされます。これは、authconfig が認識して上書きしない設定ファイルにシンボリックリンクを作成して回避できます。設定ファイルと authconfig でカスタム設定を同時に使用するには、次の手順を使用してアカウントのロックを設定します。
system-auth
ファイルとpassword-auth
ファイルがすでにsystem-auth-ac
とpassword-auth-ac
を指すシンボリックリンクになっているかどうかを確認します (これはシステムのデフォルトです)。~]# ls -l /etc/pam.d/{password,system}-auth
以下のような出力であれば、シンボリックリンクは正しく設定されているので、手順 3 までスキップできます。lrwxrwxrwx. 1 root root 16 24. Feb 09.29 /etc/pam.d/password-auth -> password-auth-ac lrwxrwxrwx. 1 root root 28 24. Feb 09.29 /etc/pam.d/system-auth -> system-auth-ac
system-auth
ファイルとpassword-auth
ファイルがシンボリックリンクでない場合は、次のステップに進みます。- 構成ファイルの名前を変更します。
~]# mv /etc/pam.d/system-auth /etc/pam.d/system-auth-ac ~]# mv /etc/pam.d/password-auth /etc/pam.d/password-auth-ac
- カスタム設定で設定ファイルを作成します。
~]# vi /etc/pam.d/system-auth-local
/etc/pam.d/system-auth-local
ファイルには、次の行が含まれている必要があります。auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 auth include system-auth-ac auth [default=die] pam_faillock.so authfail silent audit deny=3 unlock_time=600 account required pam_faillock.so account include system-auth-ac password include system-auth-ac session include system-auth-ac
~]# vi /etc/pam.d/password-auth-local
/etc/pam.d/password-auth-local
ファイルには、次の行が含まれている必要があります。auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 auth include password-auth-ac auth [default=die] pam_faillock.so authfail silent audit deny=3 unlock_time=600 account required pam_faillock.so account include password-auth-ac password include password-auth-ac session include password-auth-ac
- 以下のシンボリックリンクを作成します。
~]# ln -sf /etc/pam.d/system-auth-local /etc/pam.d/system-auth ~]# ln -sf /etc/pam.d/password-auth-local /etc/pam.d/password-auth
さまざまな
pam_faillock
設定オプションの詳細は、pam_faillock(8) の man ページを参照してください。
nullok
オプションの削除
/etc/shadow
ファイルのパスワードフィールドが空の場合、パスワードを空白のままユーザーがログインできるようにする nullok
オプションは、デフォルトで有効になっています。nullok
オプションを無効にするには、/etc/pam.d/
ディレクトリ内の設定ファイル(/etc/pam.d/system-auth
、/etc/pam.d/password-auth
など)からnullok
文字列を削除します。
詳細は、KCS ソリューション Will
nullok
option allow users to login without entering a password? を参照してください。
4.1.3. セッションのロック
ユーザーは、平日の操作時に多数の理由でワークステーションを無人状態にしておく必要がある場合があります。特に物理的なセキュリティー対策が不十分な環境では、これにより、攻撃者にマシンに物理的にアクセスする機会を提供することになる可能性があります (「物理的コントロール」 を参照)。特にノートパソコンは、その可動性から物理的なセキュリティーが阻害されるため、危険にさらされています。正しいパスワードが入力されるまで、システムにアクセスできないようにするセッションロック機能を使用することで、これらのリスクを軽減することができます。
注記
ログアウトする代わりに画面をロックする主な利点は、ロックによってユーザーのプロセス (ファイル転送など) を実行し続けることができることです。ログアウトしてしまうと、このようなプロセスは中断してしまいます。
4.1.3.1. vlock を使った仮想コンソールのロック
ユーザーは、仮想コンソールをロックする必要がある場合もあります。これは、vlock と呼ばれるユーティリティーを使用して行うことができます。このユーティリティーをインストールするには、root で以下のコマンドを実行します。
~]# yum install vlock
インストール後、パラメーターを追加することなく、vlock コマンドを使用して、任意のコンソールセッションをロックすることができます。これは、現在アクティブな仮想コンソールセッションをロックし、他のセッションにはアクセスできるようにします。ワークステーション上のすべての仮想コンソールにアクセスできないようにするには、以下を実行します。
vlock -a
この場合、vlock ロックが、現時点でアクティブなコンソールをロックし、
-a
オプションにより、他の仮想コンソールへの切り替えができなくなります。
詳細は、
vlock(1)
man ページを参照してください。
4.1.4. リムーバブルメディアの読み取り専用マウントの強制
リムーバブルメディア (USB フラッシュディスクなど) の読み取り専用マウントを強制するために、管理者は
udev
ルールを使用してリムーバブルメディアを検出し、blockdev ユーティリティーを使用して読み取り専用にマウントするように設定することができます。これは、物理メディアの読み取り専用マウントを強制するには十分です。
リムーバブルメディアの読み取り専用マウントを強制するための blockdev の使用法
すべてのリムーバブルメディアを強制的に読み取り専用でマウントするには、
/etc/udev/rules.d/
ディレクトリに、たとえば80-readonly-removables.rules
という名前の新しいudev
設定ファイルを作成し、以下の内容を記述します。
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
上記の
udev
ルールは、新しく接続されたリムーバブルブロック (ストレージ) デバイスが、blockdev ユーティリティーを使用して、自動的に読み取り専用に設定されるようにするものです。
新しい udev 設定の適用
これらの設定を有効にするためには、新しい
udev
のルールを適用する必要があります。udev
サービスは、設定ファイルの変更を自動的に検出しますが、既に存在するデバイスには新しい設定が適用されません。新しい設定の影響を受けるのは、新しく接続されたデバイスのみです。そのため、次に接続したときに新しい設定が適用されるように、接続されているすべてのリムーバブルメディアをアンマウントして取り外す必要があります。
既存のデバイスに対して、
udev
にすべてのルールを再適用させるには、root
で次のコマンドを入力します。
~#
udevadm trigger
上記のコマンドを使用して、
udev
にすべてのルールを再適用させても、すでにマウントされているストレージデバイスには影響しないことに注意してください。
udev
にすべてのルールを再ロードさせるには (何らかの理由で新しいルールが自動的に検出されない場合)、次のコマンドを使用します。
~#
udevadm control --reload