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]:
ユーザーが初めてログインしたときにパスワードが失効するように設定することができます。これにより、ユーザーはすぐにパスワードを変更せざるを得なくなります。
  1. 初期パスワードを設定します。デフォルトのパスワードを割り当てるには、シェルプロンプトで、root として以下のコマンドを入力します。
    passwd username
    警告
    passwd ユーティリティーには、null パスワードを設定するオプションがあります。null パスワードの使用は便利ですが、安全ではありません。第三者がログインして、安全でないユーザー名を使用してシステムにアクセスする可能性があるためです。null パスワードの使用は可能な限り避けてください。避けられない場合は、null パスワードでアカウントのロックを解除する前に、ユーザーがログインする準備ができていることを常に確認してください。
  2. 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 ユーザーアカウントを含むすべてのユーザーアカウントがロックされる可能性があります。
以下の手順でアカウントロックを設定します。
  1. 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 行目が追加されました。
  2. 前の手順で指定した両方のファイルの account セクションに、次の行を追加します。
    account     required      pam_faillock.so
  3. 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 が初めて呼び出される行のすぐ上に次の行を追加します。また、user1user2、よび 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_faillockcron用に設定すべきではありません。詳細は、Knowledge Centered Support (KCS) solution を参照してください。

authconfig でのカスタム設定の保持

authconfig ユーティリティーを使用して認証設定を変更する場合、system-auth ファイルおよび password-auth ファイルは、authconfig ユーティリティーの設定で上書きされます。これは、authconfig が認識して上書きしない設定ファイルにシンボリックリンクを作成して回避できます。設定ファイルと authconfig でカスタム設定を同時に使用するには、次の手順を使用してアカウントのロックを設定します。
  1. system-auth ファイルと password-auth ファイルがすでに system-auth-acpassword-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 ファイルがシンボリックリンクでない場合は、次のステップに進みます。
  2. 構成ファイルの名前を変更します。
    ~]# mv /etc/pam.d/system-auth /etc/pam.d/system-auth-ac
    ~]# mv /etc/pam.d/password-auth /etc/pam.d/password-auth-ac
  3. カスタム設定で設定ファイルを作成します。
    ~]# 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
  4. 以下のシンボリックリンクを作成します。
    ~]# 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