Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
第4章 ツールとサービスを使用したシステム強化
4.1. デスクトップのセキュリティー
Red Hat Enterprise Linux 7 は、不正アクセスの防止や攻撃から守るためのデスクトップ強化に複数の手段を提供しています。本項では、ユーザーパスワード、セッション、アカウントのロック、取り外し可能なメディアの安全な取り扱いについて推奨の方法を紹介します。
4.1.1. パスワードのセキュリティー
パスワードは、Red Hat Enterprise Linux 7 がユーザーの ID を確認する第一の手段です。ユーザーやワークステーション、ネットワークの保護にパスワードのセキュリティーが重要であるのは、このためです。
インストールプログラムではセキュリティー目的で、システムが セキュアハッシュアルゴリズム 512 (SHA512) とシャドウパスワードを使うように設定します。この設定は、変更しないことが強く推奨されます。
インストール中にシャドウパスワードが検出されると、すべてのパスワードは全ユーザーが読み取り可能な
/etc/passwd
ファイルに一方向のハッシュとして保存されます。この場合、システムはオフラインのパスワードクラッキング攻撃に脆弱なものとなってしまいます。侵入者が通常のユーザーとしてマシンにアクセスすると、/etc/passwd
ファイルを侵入者自身のマシンにコピーして、パスワードクラッキングプログラムをいくつでも実行できるようになります。このファイルに安全でないパスワードがあれば、パスワードクラッカーがこれを見つけるのは時間の問題となります。
シャドウパスワードは、パスワードハッシュを
/etc/shadow
ファイルに保存することで、このタイプの攻撃を排除します。このファイルは、root ユーザーのみが読み取り可能なためです。
この場合、攻撃者は SSH や FTP などのマシン上のネットワークサービスにログインしてリモートからパスワードクラッキングを試みることが強いられます。このようなブルートフォース攻撃は時間がかかり、何百回ものログイン失敗がシステムファイルに書き込まれるので、明らかな痕跡が残ります。もちろん、クラッカーが脆弱なパスワードがあるシステムに真夜中から攻撃を開始した場合、夜明け前にはアクセスに成功し、痕跡を隠すためにログファイルを編集してしまう、という可能性もあります。
フォーマットやストレージに加えて考慮すべき点は、コンテンツの問題です。パスワードクラッキングからアカウントを保護するためにユーザーがなし得る最重要事項は、強固なパスワードを作成することです。
注記
Red Hat は、Red Hat Identity Management (IdM) などの集約型の認証ソリューションの使用を推奨します。ローカルのパスワードよりも集約型のソリューションの使用が推奨されます。詳しい情報は、以下のリンクをご覧ください。
4.1.1.1. 強固なパスワードの作成
安全なパスワードを作成するには、長いパスワードの方が短くかつ複雑なものよりも強固であることをユーザーは認識する必要があります。あるパスワードが数字や特殊文字、大文字のアルファベットを含んでいても、それが 8 文字の長さしかなければ、強固なパスワードとは言えません。「John The Ripper」のようなパスワード解析ツールは、人間が記憶するには困難なパスワードを分解するために最適なものです。
情報の理論上では、エントロピーはランダムな変数に関連付けられる不確実性のレベルで、ビット表示されます。エントロピーの値が高ければ高いほど、パスワードはより安全と言えます。NIST (米標準技術研究所) の SP 800-63-1 文書によると、一般的に選択される 5 万件のパスワードからなる辞書にないパスワードには、少なくとも 10 ビットのエントロピーがあります。このため、ランダムな 4 単語からなるパスワードには、およそ 40 ビットのエントロピーがあることになります。安全性を高めるために複数の単語で構成される長いパスワードは、パスフレーズ とも呼ばれます。例を示します。
randomword1 randomword2 randomword3 randomword4
大文字や数字、特殊文字の使用が強制されるシステムでは、上記の推奨事項に合致するパスフレーズは簡単に修正することができます。たとえば、最初の文字を大文字にして、"
1!
" を追加します。このような修正は、パスフレーズの安全性を大幅に高めるもの ではない ことに注意してください。
パスワードを自分で作成するもうひとつの方法は、パスワードジェネレーターを使用することです。pwmake は、大文字、小文字、数字、特殊文字の 4 種類の文字からなるランダムなパスワードを生成するコマンドラインツールです。このユーティリティーを使用すると、パスワード生成に使用されるエントロピービットの数を指定できます。エントロピーは、
/dev/urandom
から引き出されます。指定可能な最小ビット数は 56 で、これはブルートフォース攻撃が滅多に仕掛けられないシステムやサービスのパスワードには十分なものです。攻撃者がパスワードハッシュファイルに直接アクセスできないアプリケーションであれば、64 ビットで十分です。攻撃者がパスワードハッシュへの直接アクセスを取得する可能性がある場合やパスワードが暗号鍵として使用される場合は、80 ビットや 128 ビットを使用する必要があります。無効なエントロピービット数を指定すると、pwmake はデフォルトのビット数を使用します。128 ビットのパッケージを作成するには、以下のコマンドを実行します。
pwmake 128
安全なパスワードの作成にはいくつものアプローチがありますが、以下の悪い点は必ず避けてください。
- 辞書の 1 単語を使用する。外国語の 1 単語を使用する。反転した単語を使用する。数字のみを使用する。
- パスワードまたはパスフレーズを 10 文字未満にする。
- キーボードのレイアウトにおけるキーの配列を使用する。
- パスフレーズを書き留める。
- 誕生日や記念日、家族の名前、ペットの名前などの個人情報をパスフレーズに使用する。
- 複数のマシンで同じパスワードまたはパスフレーズを使用する。
セキュアなパスワードの作成は不可欠ですが、パスワードの適切な管理も特に大きな組織のシステム管理者にとっては重要です。次のセクションでは、組織内でのユーザーパスワードの作成および管理で推奨される方法を説明します。
4.1.1.2. 強固なパスワードの強制
組織内に多くのユーザーがいる場合、システム管理者は 2 つの基本的な方法で強固なパスワードの使用を強制できます。つまり、管理者がパスワードを作成してユーザーに渡すか、パスワードに十分な強度があるかを検証しながらユーザー自身がパスワードを作成する方法です。
前者の方法だとパスワードは強固なものになりますが、組織が拡大するにつれてタスクが重荷になります。また、ユーザーが自分のパスワードを書き留め、それをさらしてしまうリスクも高まります。
これらの理由で、多くのシステム管理者は後者を選択しますが、パスワードが強固かどうかを積極的に検証します。場合によっては、管理者はパスワードエージングで定期的にユーザーがパスワードを変更するように強制することもできます。
ユーザーは、パスワードの作成や変更を求められると、
passwd
コマンドラインユーティリティーを使用することができます。これは PAM (Pluggable Authentication Modules) を認識し、パスワードが短すぎないか、短くない場合は簡単にクラックされないかを確認します。この確認は、pam_pwquality.so
PAM モジュールが実行します。
注記
Red Hat Enterprise Linux 7 では、
pam_pwquality
PAM モジュールが pam_cracklib
の代わりとなっています。後者は、Red Hat Enterprise Linux 6 でパスワードの品質確認にデフォルトのモジュールとして使われていました。新たなモジュールは、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 つずつ指定します。たとえば、パスワードを 8 文字以上にして、4 種類すべての文字を含めることを要件とするには、以下の行を
/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 システム管理者のガイドを参照してください。
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 オプションで指定した日数の合計が、1970 年 1 月 1 日から数えた現在までの日数より少ない場合は、ユーザーはアカウントを使用する前にパスワードを変更する必要があります。 |
-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 パスワードを使用する必要がある場合は、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
アカウントを含むすべてのユーザーアカウントがロックされます。
アカウントのロックを設定するには、以下の手順を実行します。
- root 以外のユーザーがログインに 3 回失敗した後にロックアウトし、その 10 分後にこのユーザーのロックアウトを解除するようにするには、2 つの行を
/etc/pam.d/system-auth
および/etc/pam.d/password-auth
の各ファイルのauth
セクションに追加します。編集後に、両方のファイルのauth
セクション全体は以下のようになります。1 auth required pam_env.so 2 auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 3 auth sufficient pam_unix.so nullok try_first_pass 4 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600 5 auth requisite pam_succeed_if.so uid >= 1000 quiet_success 6 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 回目のログイン試行でロックされます。
~]$ 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
の失敗カウンターがリセットされます。したがって、cron
に pam_faillock
を設定しないでください。詳細は「Running cronjobs resets the faillock for the user that is running the cronjob」を参照してください。
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
設定オプションの情報は、man ページの pam_faillock(8) を参照してください。
nullok
オプションの削除
nullok
オプションは、/etc/shadow
ファイルのパスワードフィールドが空の場合に、パスワードを空にしてログインできるようにするもので、デフォルトで有効になっています。nullok
オプションを無効にするには、/etc/pam.d/
ディレクトリーの設定ファイル (/etc/pam.d/system-auth
、/etc/pam.d/password-auth
など) から、文字列 nullok
を削除します。
詳細は、ナレッジベースソリューションの「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
オプションが他の仮想コンソールへのスイッチを防ぎます。
詳細は、man ページの
vlock(1)
を参照してください。
4.1.4. リムーバブルメディアの読み取り専用マウントの強制
リムーバブルメディア (USB フラッシュディスクなど) の読み取り専用マウントを強制するために、管理者は
udev
ルールを使用してリムーバブルメディアを検出し、blockdev ユーティリティーを使用してリムーバブルメディアを読み取り専用でマウントするよう設定できます。物理メディアの読み取り専用マウントの強制に必要な作業はこれだけです。
blockdev を使用したリムーバブルメディアの読み取り専用マウントの強制
すべてのリムーバブルメディアを読み取り専用でマウントするには、
/etc/udev/rules.d/
ディレクトリー内に新しい udev
設定ファイル (80-readonly-removables.rules
など) を以下の内容で作成します。
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
このページには機械翻訳が使用されている場合があります (詳細はこちら)。