ウェブサイト検索

Linux でパスワード ポリシーを設定する方法


このチュートリアルでは、パスワードの長さパスワードの複雑さパスワード有効期限などのパスワード ポリシーを設定する方法について説明します。 Debian、Ubuntu、Linux Mint などの DEB ベースのシステムや、Fedora、RHEL、CentOS などの RPM ベースのシステムでは などです。

導入

Linux は設計上安全ですが、セキュリティ侵害の可能性は依然として数多くあります。その1 つは弱いパスワードです。

システム管理者は、ユーザーに強力なパスワードを設定し、強力なパスワード ポリシーを強制する必要があります。なぜなら、脆弱なパスワードが原因で非常に多くのシステム侵害が発生しているからです。

このガイドでは、Linux システムのセキュリティを強化するために、プラガブル認証方式 (略称PAM) を使用していくつかの重要な Linux パスワード ポリシーを実装する方法を学びます。

本題に入る前に、パスワード ポリシーを設定する前に覚えておくべき重要な要素をいくつか挙げておきます。

パスワードのガイドラインとベストプラクティス

パスワードが十分な長さであることを確認してください

ほとんどの環境では推奨されるパスワードの長さは 8 文字です。

8 文字のパスワードが推奨されます。これは、十分なセキュリティを提供するのに十分な長さでありながら、ユーザーが簡単に覚えられる十分な短さであるためです。この制限を下回らないように強くお勧めします。

パスワードの長さは、パスワードの強度を特徴付ける主な要素であることがわかっています。パスワードが長いほど、解読に時間がかかります。

パスワードが短すぎると、単語や一般的に選択されるパスワードを使用した辞書攻撃だけでなく、ブルート フォース攻撃を受ける可能性があります。

実際、たとえ単純な単語や構成要素で構成されていても、特殊文字を含む短いパスワードよりも長いパスワードの方がはるかに優れています。

推測されやすいパスワードは避けてください

パスワードを選択する際に覚えておくべきもう 1 つの重要な点は、一般的に使用されるパスワードを避けることです。

さらに重要なのは、パスワードに本名、両親/配偶者/子供の名前、学校/大学名、生年月日を決して使用しないことです。

あなたは、ソーシャル (Facebook など) や専門的ネットワーク (LinkedIn など) に個人的な情報の一部、および学歴や職業上の詳細のほとんどを追加している可能性があります。攻撃者はこれらの詳細からパスワードを推測しようとする可能性があります。したがって、パスワードに前述の詳細を含めないでください。

過度に複雑なパスワードは避ける

Linux 管理者の中には、ユーザーのパスワード選択に過度の制限を設けている人もいます。これはセキュリティにとっては最善ですが、逆効果になる可能性もあります。

ユーザーは強力なパスワード ポリシーに不満を抱き、パスワード ポリシーを満たすためにより悪いパスワードを選択することになります。

たとえば、ユーザーは数字や「1」や「!」などの特殊文字を追加するだけで、パスワードを複雑にすることができます。最後まで入力するか、パスワードの最初の文字を大文字にします。

この種のパスワードは解読に時間がかかる可能性がありますが、攻撃者はユーザーがこれらのパターンを使用する傾向があることを知っており、これらのパターンに基づいてパスワードを推測しようとする可能性があります。

パスワードの有効期限を短くしないようにする

これも一般的に課されるセキュリティ制限です。ユーザーに不必要な負担を与えてしまいます。パスワードの有効期限を 30 日に設定したとします。そのため、ユーザーは毎月新しいパスワードを設定する必要があり、間違いなくユーザーはこれに満足しないでしょう。

有効期限を短くする代わりに、パスワードの長さを長くすることができます。

多要素認証を使用する

可能な限り 2FA または MFA 方法を使用するようにしてください。これは、システムを保護するために誰もが従うべきセキュリティのベストプラクティスの 1 つです。

すべてをまとめると、適切なパスワードには、常に数字、大文字、特殊文字を含む少なくとも 8 文字が含まれている必要があります。可能であれば、多要素認証を使用してください。

それでは、Linux パスワード ポリシーの設定方法を学びましょう。

Linux でのパスワード ポリシーの設定

すでに述べたように、次の 3 つのパスワード ポリシーを実装します。

  1. パスワードの長さ、
  2. パスワードの複雑さ、
  3. パスワードの有効期限。

まず、DEB ベースのシステムでパスワードの長さを設定する方法を見ていきます。

Debian、Ubuntu、およびその派生製品でパスワードの長さを設定する

DEB ベースのシステムには、プラグ可能認証モジュール (PAM) がデフォルトでインストールされます。

通常、パスワードと認証関連の設定ファイルは、Debian ベースのシステムの /etc/pam.d/ ディレクトリに保存されます。また、パスワード ポリシーは /etc/pam.d/common-password ファイルで定義されます。変更を加える前に、念のためこのファイルをバックアップしてください。

sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

最小パスワード長を設定するには、/etc/pam.d/common-password ファイルを編集します。

sudo nano /etc/pam.d/common-password

次の行を見つけます。

password [success=2 default=ignore] pam_unix.so obscure sha512

最後に minlen=8 という単語を追加します。ここでは、パスワードの最小長を8に設定します。

password [success=2 default=ignore] pam_unix.so obscure sha512 minlen=8

DEB ベースのシステムでパスワードの長さを設定する

ファイルを保存して閉じます。現在、ユーザーはパスワードに 8 文字未満を使用できません。

RPM ベースのシステムでパスワードの長さを設定する

RHEL、CentOS 7.x システムでは、root ユーザーとして次のコマンドを実行してパスワードの長さを設定します。

authconfig --passminlen=8 --update

パスワードの最小長を表示するには、次を実行します。

grep "^minlen" /etc/security/pwquality.conf

サンプル出力:

minlen = 8

RHEL、CentOS 6.x システムでは、/etc/pam.d/system-auth ファイルを編集します。

nano /etc/pam.d/system-auth

次の行を見つけて、行の最後に次の行を追加します。

password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8 

RPM ベースのシステムでパスワードの長さを設定します。

上記の設定によると、パスワードの最小長は 8 文字です。

DEB ベースのシステムでパスワードの複雑さを設定する

この設定では、パスワードに含めるクラスの数 (大文字、小文字、その他の文字) を強制します。

まず、次のコマンドを使用してパスワード品質チェック ライブラリをインストールします。

sudo apt install libpam-pwquality

次に、/etc/pam.d/common-password ファイルを編集します。

sudo nano /etc/pam.d/common-password

パスワードに少なくとも 1 つの大文字を設定するには、次の行の末尾に単語 'ucredit=-1' を追加します。

password        requisite                       pam_pwquality.so retry=3 ucredit=-1

DEB ベースのシステムでパスワードの複雑さを設定する

以下に示すように、 パスワードには少なくとも 1 文字の小文字を設定してください。

password        requisite                       pam_pwquality.so retry=3 dcredit=-1

以下に示すように、パスワードに少なくとも他の文字を設定します。

password        requisite                       pam_pwquality.so retry=3 ocredit=-1

上記の例でわかるように、パスワードには少なくとも (最低) 1 つの大文字、小文字、および特殊文字が設定されています。パスワードに使用できる大文字、小文字、およびその他の文字の最大数を任意の数に設定できます。

パスワードで許可されるクラスの最小/最大数を設定することもできます。

次の例は、新しいパスワードに必要な文字クラスの最小数を示しています。

password        requisite                       pam_pwquality.so retry=3 minclass=2

RPM ベースのシステムでパスワードの複雑さを設定する

RHEL 7.x/CentOS 7.x の場合:

パスワードに少なくとも 1 つの小文字を設定するには、次のコマンドを実行します。

authconfig --enablereqlower --update

設定を表示するには、次を実行します。

grep "^lcredit" /etc/security/pwquality.conf

サンプル出力:

lcredit = -1

同様に、次のコマンドを使用して、パスワードに少なくとも 1 つの大文字を設定します。

authconfig --enablerequpper --update

設定を表示するには:

grep "^ucredit" /etc/security/pwquality.conf

サンプル出力:

ucredit = -1

パスワードに少なくとも 1 桁の数字を設定するには、次のコマンドを実行します。

authconfig --enablereqdigit --update

設定を表示するには、次を実行します。

grep "^dcredit" /etc/security/pwquality.conf

サンプル出力:

dcredit = -1

パスワードに少なくとも 1 つの他の文字を設定するには、次のコマンドを実行します。

authconfig --enablereqother --update

設定を表示するには、次を実行します。

grep "^ocredit" /etc/security/pwquality.conf

サンプル出力:

ocredit = -1

RHEL 6.x/CentOS 6.x システムでは、root ユーザーとして /etc/pam.d/system-auth ファイルを編集します。

nano /etc/pam.d/system-auth

次の行を見つけて、行の最後に次の行を追加します。

password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1

上記の設定に従って、パスワードは少なくとも 8 文字である必要があります。さらに、パスワードには少なくとも 1 つの大文字、1 つの小文字、1 つの数字、およびその他の文字が含まれている必要があります。

DEB ベースのシステムでパスワードの有効期限を設定する

以下の方針を定めます。

  1. パスワードを使用できる最大日数。
  2. パスワードを変更するまでに許容される最小日数。
  3. パスワードの有効期限が切れるまでに表示される警告の日数。

このポリシーを設定するには、次を編集します。

sudo nano /etc/login.defs

要件に応じて値を設定します。

PASS_MAX_DAYS 100
PASS_MIN_DAYS 0
PASS_WARN_AGE 7

DEB ベースのシステムでパスワードの有効期限を設定する

上の例にあるように、ユーザーは 100 日に 1 回パスワードを変更する必要があり、パスワードの有効期限が切れる 7 日前に警告メッセージが表示されます。

これらの設定は、新しく作成されたユーザーに影響することに注意してください。

既存のユーザーのパスワード変更間の最大日数を設定するには、次のコマンドを実行する必要があります。

sudo chage -M <days> <username>

パスワード変更間の最小日数を設定するには、次のコマンドを実行します。

sudo chage -m <days> <username>

パスワードの有効期限が切れる前に警告を設定するには、次のコマンドを実行します。

sudo chage -W <days> <username>

既存のユーザーのパスワードを表示するには、次を実行します。

sudo chage -l sk

ここで、sk は私のユーザー名です。

サンプル出力:

Last password change : Feb 24, 2017
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

上記の出力に見られるように、パスワードには有効期限がありません。

既存のユーザーのパスワードの有効期限を変更するには、

sudo chage -E 24/06/2018 -m 5 -M 90 -I 10 -W 10 sk

上記のコマンドは、ユーザー 「sk」 のパスワードの有効期限が 2018 年 6 月 24 日に期限切れになるように設定します。また、パスワード変更間の最小日数は 5 日に設定され、パスワード変更間の最大日数は90 日に設定されます。ユーザー アカウントは10 日間後に自動的にロックされ、パスワードの有効期限が切れる10 日間までは警告メッセージが表示されます。

RPM ベースのシステムでパスワードの有効期限を設定する

これは DEB ベースのシステムと同じです。

DEB ベースのシステムで以前に使用したパスワードを禁止する

過去に使用したパスワードを設定するユーザーを制限できます。平たく言えば、ユーザーは同じパスワードを再度使用することはできません。

これを行うには、/etc/pam.d/common-password ファイルを編集します。

sudo nano /etc/pam.d/common-password

次の行を見つけて、最後に「remember=5」 という単語を追加します。

password        [success=2 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 remember=5

上記のポリシーにより、ユーザーは最後に使用した 5 つのパスワードを使用できなくなります。

RPM ベースのシステムで以前に使用したパスワードを禁止する

これは、RHEL 6.x と RHEL 7.x の両方で同じであり、CentOS、Scientific Linux などのクローン システムです。

root ユーザーとして /etc/pam.d/system-auth ファイルを編集します。

vi /etc/pam.d/system-auth

次の行を見つけて、最後に remember=5 を追加します。

password     sufficient     pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

推奨読書:

  • Linux で強力なパスワードを生成する 4 つの簡単な方法
  • Linux でパスワードの複雑さを確認する方法
  • Debian、Ubuntu でユーザーに強力なパスワードの使用を強制する方法
  • Titan – Linux 用のコマンドライン パスワード マネージャー
  • Buttercup – 無料で安全なクロスプラットフォームのパスワード マネージャー
  • KeeWeb – オープンソース、クロスプラットフォームのパスワード マネージャー

Linux のパスワード ポリシーとは何か、DEB および RPM ベースのシステムでさまざまなパスワード ポリシーを設定する方法がわかりました。

関連記事