Linux でパスワードの複雑さポリシーを強制する方法

LinuxBeginner
オンラインで実践に進む

はじめに

Linux システムを保護するためには、強力なパスワードポリシーを維持することが不可欠です。このチュートリアルでは、Linux のパスワードポリシーの基本を理解し、パスワードの複雑さの要件を設定し、これらのポリシーを適用して、Linux 環境全体のセキュリティを強化する方法を説明します。

Linux パスワードポリシーファイルについて

Linux システムは、パスワードポリシーを管理するためにいくつかの設定ファイルを使用します。このステップでは、これらのファイルを調べ、パスワード管理におけるその目的を理解します。

パスワードポリシー設定ファイルの調査

Ubuntu でパスワードポリシーを制御する主要な設定ファイルを調べてみましょう。

  1. まず、デスクトップ環境のターミナルアイコンをクリックして、ターミナルを開きます。

  2. 基本的なパスワードポリシー設定を含む/etc/login.defsファイルを見てみましょう。

    cat /etc/login.defs | grep "^PASS_"

    次のような出力が表示されるはずです。

    PASS_MAX_DAYS   99999
    PASS_MIN_DAYS   0
    PASS_WARN_AGE   7

    これらの設定は以下を制御します。

    • PASS_MAX_DAYS: パスワードが有効な最大日数
    • PASS_MIN_DAYS: パスワード変更に必要な最小日数
    • PASS_WARN_AGE: パスワードの有効期限が切れるまでの警告日数
  3. もう一つの重要なファイルは/etc/pam.d/common-passwordで、パスワード認証の PAM (Pluggable Authentication Modules) 設定を管理します。

    cat /etc/pam.d/common-password

    このファイルには、複雑さの要件など、パスワードの管理方法を設定する複数の行が含まれています。

  4. システムは、パスワードの品質を強制するためにpwqualityライブラリを使用します。インストールされているか確認しましょう。

    dpkg -l | grep libpwquality

    インストールされていない場合は、インストールできます。

    sudo apt update
    sudo apt install -y libpam-pwquality
  5. 次に、パスワード品質設定ファイルを調べてみましょう。

    cat /etc/security/pwquality.conf

    このファイルは、ほとんどの行が#でコメントアウトされている可能性があります。これは、デフォルト値が使用されていることを意味します。

パスワードポリシーパラメータの理解

設定できる主要なパラメータを以下に示します。

  • minlen: パスワードの最小長
  • dcredit: パスワード内の数字のクレジット
  • ucredit: 大文字のクレジット
  • lcredit: 小文字のクレジット
  • ocredit: 特殊文字のクレジット
  • retry: 新しいパスワードを入力する試行回数
  • enforce_for_root: root ユーザーに対してこれらのポリシーを適用するかどうか

これらのパラメータは、Linux システムでパスワードの複雑さとセキュリティを制御するための包括的なフレームワークを提供します。

基本的なパスワードポリシーの設定

このステップでは、/etc/login.defsファイルを変更してパスワードの有効期限に関する要件を設定することにより、基本的なパスワードポリシーを設定します。

パスワードの有効期限パラメータの設定

  1. まず、元のファイルのバックアップを作成します。

    sudo cp /etc/login.defs /etc/login.defs.backup
  2. 次に、nano を使用してファイルを編集用に開きます。

    sudo nano /etc/login.defs
  3. エディタで、これらのパラメータを探します(Ctrl+W を使用して検索します)。

    PASS_MAX_DAYS
    PASS_MIN_DAYS
    PASS_WARN_AGE
  4. より安全なパスワードの有効期限ポリシーを実装するために、これらの値を変更します。

    • PASS_MAX_DAYS99999から90に変更します(パスワードは 90 日後に期限切れになります)。
    • PASS_MIN_DAYS0から7に変更します(パスワード変更の間隔は 7 日以上)。
    • PASS_WARN_AGE7から14に変更します(パスワードの有効期限が切れる 14 日前にユーザーに警告します)。
  5. Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。

  6. 変更を確認します。

    cat /etc/login.defs | grep "^PASS_"

    次のように表示されるはずです。

    PASS_MAX_DAYS   90
    PASS_MIN_DAYS   7
    PASS_WARN_AGE   14

新規ユーザーでのポリシーのテスト

これらのポリシーがどのように適用されるかを確認するために、テストユーザーを作成しましょう。

  1. 新しいユーザーを作成します。

    sudo useradd -m testuser
  2. 新しいユーザーのパスワードを設定します。

    sudo passwd testuser

    プロンプトが表示されたら、簡単なパスワードを入力します(後のステップで強化します)。

  3. 新しいユーザーのパスワードの有効期限情報を確認します。

    sudo chage -l testuser

    パスワードポリシーがこの新しいユーザーに適用され、設定に基づいて有効期限が表示されるはずです。

これらの変更は、新しいアカウントまたはパスワードが変更された場合にのみ適用されます。既存のアカウントは、手動で更新するまで以前の設定を維持します。

パスワードの複雑さの要件の設定

このステップでは、システムで強力なパスワードを強制するために、パスワードの複雑さのルールを設定します。

パスワードの複雑さのルールの設定

  1. まず、PAM 設定ファイルのバックアップを作成します。

    sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup
  2. 次に、ファイルを編集用に開きます。

    sudo nano /etc/pam.d/common-password
  3. pam_pwquality.soを含む行を探します。次のようなものかもしれません。

    password        requisite                       pam_pwquality.so retry=3
  4. 複雑さの要件を追加するために、この行を変更します。以下に置き換えます。

    password        requisite                       pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root

    この設定は、以下を意味します。

    • minlen=12: パスワードの最小長は 12 文字
    • dcredit=-1: 少なくとも 1 つの数字が必要
    • ucredit=-1: 少なくとも 1 つの大文字が必要
    • lcredit=-1: 少なくとも 1 つの小文字が必要
    • ocredit=-1: 少なくとも 1 つの特殊文字が必要
    • enforce_for_root: これらのポリシーを root ユーザーにも適用する
  5. Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。

pwquality.conf での追加パラメータの設定

  1. 次に、追加の制御のために pwquality 設定ファイルを変更しましょう。

    sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.backup
    sudo nano /etc/security/pwquality.conf
  2. これらの行のコメントを解除(先頭の#を削除)し、変更するか、存在しない場合は追加します。

    minlen = 12
    dcredit = -1
    ucredit = -1
    lcredit = -1
    ocredit = -1
    difok = 4
    enforce_for_root = 1

    difok = 4パラメータは、少なくとも 4 文字が前のパスワードと異なることを要求します。

  3. Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。

新しいパスワードの複雑さポリシーのテスト

  1. テストユーザーのパスワードを変更して、新しいポリシーをテストしましょう。

    sudo passwd testuser
  2. password123のような簡単なパスワードを入力してみてください。システムは、複雑さの要件を満たしていないため、それを拒否するはずです。

  3. 次に、Secure@Password123のように、すべての要件を満たす複雑なパスワードを試してください。

    すべてを正しく設定していれば、システムはこのパスワードを受け入れるはずです。

複雑さの要件により、ユーザーは強力なパスワードを作成し、攻撃者がそれらを推測したりクラックしたりすることが困難になります。

パスワード履歴制御の実装

このステップでは、ユーザーが最近のパスワードを再利用できないように、パスワード履歴制御を設定します。

パスワード履歴の設定

  1. まず、まだ行っていない場合は、PAM 設定ファイルのバックアップを作成します。

    sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup2
  2. ファイルを編集用に開きます。

    sudo nano /etc/pam.d/common-password
  3. pam_unix.soを含む行を探します。次のようなものかもしれません。

    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
  4. この行を変更して、rememberパラメータを追加します。行の末尾にremember=5を追加します。

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

    これにより、ユーザーは最近の 5 つのパスワードを再利用できなくなります。

  5. Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。

パスワード履歴の仕組みの理解

remember=5パラメータは、システムに各ユーザーの最後の 5 つのパスワードのハッシュを保存するように指示します。ユーザーがパスワードを変更しようとすると、システムは新しいパスワードをこれらの保存されたハッシュと比較して、再利用されていないことを確認します。

パスワード履歴は、/etc/security/opasswdファイルに保存されます。このファイルが存在するかどうかを確認しましょう。

ls -la /etc/security/opasswd

存在しない場合、最初のユーザーが新しいポリシーでパスワードを変更すると、自動的に作成されます。

パスワード履歴のテスト

  1. テストユーザーのパスワードを複数回変更して、履歴メカニズムがどのように機能するかを確認しましょう。

    sudo passwd testuser
  2. Complex@Password1のような複雑なパスワードを設定します。

  3. すぐに再度変更してみます。

    sudo passwd testuser
  4. 同じパスワードを再度設定してみてください。システムは、履歴ポリシーのためにそれを拒否するはずです。

  5. これをさらに数回、異なるパスワードで試してから、以前のパスワードを再利用してみてください。最近の 5 つのパスワードを再利用できないことがわかるはずです。

このパスワード履歴メカニズムは、パスワードの再利用を防ぐことで、セキュリティの別の層を追加します。これは、一般的なセキュリティの弱点です。

既存ユーザーへのパスワードポリシーの適用

この最終ステップでは、新しいパスワードポリシーを既存のユーザーに適用し、ユーザーのパスワード情報を管理する方法を学びます。

パスワード有効期限管理の理解

/etc/login.defsでパスワードポリシーを変更すると、新しい設定は、新しく作成されたユーザー、または既存のユーザーを手動で更新した場合にのみ適用されます。既存のユーザーを管理する方法を見てみましょう。

  1. まず、ユーザーアカウントの現在のステータスを確認します。

    sudo chage -l labex

    これにより、現在のユーザーのパスワードの有効期限情報が表示されます。

  2. 次回のログイン時にユーザーにパスワードの変更を強制するには、以下を実行します。

    sudo chage -d 0 testuser

    これにより、最後のパスワード変更日が 0 に設定され、次回のログイン時にパスワードの変更が強制されます。

  3. パスワードの有効期限日を手動で設定するには、以下を実行します。

    sudo chage -E $(date -d "90 days" +%Y-%m-%d) testuser

    これにより、アカウントの有効期限日が今日から 90 日に設定されます。

既存ユーザーのパスワード最大有効期間の設定

既存のユーザーにパスワードの最大有効期間ポリシーを適用するには、以下を実行します。

sudo chage -M 90 testuser

これにより、ユーザーのパスワードの最大有効期間が 90 日に設定されます。

既存ユーザーのパスワード最小有効期間の設定

既存のユーザーにパスワードの最小有効期間ポリシーを適用するには、以下を実行します。

sudo chage -m 7 testuser

これにより、ユーザーのパスワードの最小有効期間が 7 日に設定されます。

既存ユーザーのパスワード有効期限警告の設定

既存のユーザーにパスワード有効期限警告ポリシーを適用するには、以下を実行します。

sudo chage -W 14 testuser

これにより、ユーザーのパスワード有効期限警告期間が 14 日に設定されます。

ユーザーパスワード情報の表示

いくつかのコマンドを使用して、ユーザーのパスワード情報を確認できます。

  1. すべてのローカルユーザーアカウントを表示します。

    cat /etc/passwd
  2. 特定のユーザーのパスワードステータスを確認します。

    sudo passwd -S testuser
  3. 特定のパスワード設定を持つユーザーを一覧表示します。

    awk -F: '($3 >= 1000) {print $1}' /etc/passwd

    これにより、システム上のすべての通常のユーザー(UID >= 1000)が一覧表示されます。

すべてのユーザーへのポリシーの適用

新しいパスワードポリシーをシステム上のすべての通常のユーザーに適用するには、簡単なスクリプトを使用できます。以下に例を示します。

for user in $(awk -F: '($3 >= 1000) && ($3 < 60000) {print $1}' /etc/passwd); do
  echo "Updating password policy for user: $user"
  sudo chage -M 90 -m 7 -W 14 $user
done

このスクリプトは、すべての通常のユーザーを新しいパスワード有効期限ポリシーで更新します。

これらのポリシーを既存のユーザーに適用することにより、システム全体で一貫したパスワードセキュリティを確保できます。

まとめ

この実験では、Linux で堅牢なパスワードポリシーを設定し、適用する方法を学びました。具体的には、以下の内容を習得しました。

  1. パスワードポリシーを制御する主要な設定ファイルを調査しました。
  2. 定期的なパスワード更新を確実にするために、基本的なパスワード有効期限ポリシーを設定しました。
  3. 安全なパスワードを強制するために、強力なパスワード複雑さの要件を実装しました。
  4. パスワードの再利用を防ぐために、パスワード履歴制御を設定しました。
  5. 既存のユーザーにパスワードポリシーを適用する方法を学びました。

これらのパスワードポリシー設定は、安全な Linux 環境を維持するために不可欠です。強力なパスワード要件の実装、定期的なパスワードローテーション、およびパスワードの再利用の防止により、不正アクセスや潜在的な侵害に対するシステムのセキュリティ体制を大幅に改善しました。

効果的なパスワードポリシーは、包括的なセキュリティ戦略のほんの一部であることを忘れないでください。定期的なシステムアップデート、適切なユーザー管理、継続的なセキュリティ監視などの他のセキュリティ対策と組み合わせる必要があります。