はじめに
Linux システムを保護するためには、強力なパスワードポリシーを維持することが不可欠です。このチュートリアルでは、Linux のパスワードポリシーの基本を理解し、パスワードの複雑さの要件を設定し、これらのポリシーを適用して、Linux 環境全体のセキュリティを強化する方法を説明します。
Linux システムを保護するためには、強力なパスワードポリシーを維持することが不可欠です。このチュートリアルでは、Linux のパスワードポリシーの基本を理解し、パスワードの複雑さの要件を設定し、これらのポリシーを適用して、Linux 環境全体のセキュリティを強化する方法を説明します。
Linux システムは、パスワードポリシーを管理するためにいくつかの設定ファイルを使用します。このステップでは、これらのファイルを調べ、パスワード管理におけるその目的を理解します。
Ubuntu でパスワードポリシーを制御する主要な設定ファイルを調べてみましょう。
まず、デスクトップ環境のターミナルアイコンをクリックして、ターミナルを開きます。
基本的なパスワードポリシー設定を含む/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: パスワードの有効期限が切れるまでの警告日数もう一つの重要なファイルは/etc/pam.d/common-passwordで、パスワード認証の PAM (Pluggable Authentication Modules) 設定を管理します。
cat /etc/pam.d/common-password
このファイルには、複雑さの要件など、パスワードの管理方法を設定する複数の行が含まれています。
システムは、パスワードの品質を強制するためにpwqualityライブラリを使用します。インストールされているか確認しましょう。
dpkg -l | grep libpwquality
インストールされていない場合は、インストールできます。
sudo apt update
sudo apt install -y libpam-pwquality
次に、パスワード品質設定ファイルを調べてみましょう。
cat /etc/security/pwquality.conf
このファイルは、ほとんどの行が#でコメントアウトされている可能性があります。これは、デフォルト値が使用されていることを意味します。
設定できる主要なパラメータを以下に示します。
minlen: パスワードの最小長dcredit: パスワード内の数字のクレジットucredit: 大文字のクレジットlcredit: 小文字のクレジットocredit: 特殊文字のクレジットretry: 新しいパスワードを入力する試行回数enforce_for_root: root ユーザーに対してこれらのポリシーを適用するかどうかこれらのパラメータは、Linux システムでパスワードの複雑さとセキュリティを制御するための包括的なフレームワークを提供します。
このステップでは、/etc/login.defsファイルを変更してパスワードの有効期限に関する要件を設定することにより、基本的なパスワードポリシーを設定します。
まず、元のファイルのバックアップを作成します。
sudo cp /etc/login.defs /etc/login.defs.backup
次に、nano を使用してファイルを編集用に開きます。
sudo nano /etc/login.defs
エディタで、これらのパラメータを探します(Ctrl+W を使用して検索します)。
PASS_MAX_DAYS
PASS_MIN_DAYS
PASS_WARN_AGE
より安全なパスワードの有効期限ポリシーを実装するために、これらの値を変更します。
PASS_MAX_DAYSを99999から90に変更します(パスワードは 90 日後に期限切れになります)。PASS_MIN_DAYSを0から7に変更します(パスワード変更の間隔は 7 日以上)。PASS_WARN_AGEを7から14に変更します(パスワードの有効期限が切れる 14 日前にユーザーに警告します)。Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。
変更を確認します。
cat /etc/login.defs | grep "^PASS_"
次のように表示されるはずです。
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
これらのポリシーがどのように適用されるかを確認するために、テストユーザーを作成しましょう。
新しいユーザーを作成します。
sudo useradd -m testuser
新しいユーザーのパスワードを設定します。
sudo passwd testuser
プロンプトが表示されたら、簡単なパスワードを入力します(後のステップで強化します)。
新しいユーザーのパスワードの有効期限情報を確認します。
sudo chage -l testuser
パスワードポリシーがこの新しいユーザーに適用され、設定に基づいて有効期限が表示されるはずです。
これらの変更は、新しいアカウントまたはパスワードが変更された場合にのみ適用されます。既存のアカウントは、手動で更新するまで以前の設定を維持します。
このステップでは、システムで強力なパスワードを強制するために、パスワードの複雑さのルールを設定します。
まず、PAM 設定ファイルのバックアップを作成します。
sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup
次に、ファイルを編集用に開きます。
sudo nano /etc/pam.d/common-password
pam_pwquality.soを含む行を探します。次のようなものかもしれません。
password requisite pam_pwquality.so retry=3
複雑さの要件を追加するために、この行を変更します。以下に置き換えます。
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 ユーザーにも適用するCtrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。
次に、追加の制御のために pwquality 設定ファイルを変更しましょう。
sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.backup
sudo nano /etc/security/pwquality.conf
これらの行のコメントを解除(先頭の#を削除)し、変更するか、存在しない場合は追加します。
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 4
enforce_for_root = 1
difok = 4パラメータは、少なくとも 4 文字が前のパスワードと異なることを要求します。
Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。
テストユーザーのパスワードを変更して、新しいポリシーをテストしましょう。
sudo passwd testuser
password123のような簡単なパスワードを入力してみてください。システムは、複雑さの要件を満たしていないため、それを拒否するはずです。
次に、Secure@Password123のように、すべての要件を満たす複雑なパスワードを試してください。
すべてを正しく設定していれば、システムはこのパスワードを受け入れるはずです。
複雑さの要件により、ユーザーは強力なパスワードを作成し、攻撃者がそれらを推測したりクラックしたりすることが困難になります。
このステップでは、ユーザーが最近のパスワードを再利用できないように、パスワード履歴制御を設定します。
まず、まだ行っていない場合は、PAM 設定ファイルのバックアップを作成します。
sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup2
ファイルを編集用に開きます。
sudo nano /etc/pam.d/common-password
pam_unix.soを含む行を探します。次のようなものかもしれません。
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
この行を変更して、rememberパラメータを追加します。行の末尾にremember=5を追加します。
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
これにより、ユーザーは最近の 5 つのパスワードを再利用できなくなります。
Ctrl+O を押してファイルを保存し、Enter キーを押して確定し、Ctrl+X で終了します。
remember=5パラメータは、システムに各ユーザーの最後の 5 つのパスワードのハッシュを保存するように指示します。ユーザーがパスワードを変更しようとすると、システムは新しいパスワードをこれらの保存されたハッシュと比較して、再利用されていないことを確認します。
パスワード履歴は、/etc/security/opasswdファイルに保存されます。このファイルが存在するかどうかを確認しましょう。
ls -la /etc/security/opasswd
存在しない場合、最初のユーザーが新しいポリシーでパスワードを変更すると、自動的に作成されます。
テストユーザーのパスワードを複数回変更して、履歴メカニズムがどのように機能するかを確認しましょう。
sudo passwd testuser
Complex@Password1のような複雑なパスワードを設定します。
すぐに再度変更してみます。
sudo passwd testuser
同じパスワードを再度設定してみてください。システムは、履歴ポリシーのためにそれを拒否するはずです。
これをさらに数回、異なるパスワードで試してから、以前のパスワードを再利用してみてください。最近の 5 つのパスワードを再利用できないことがわかるはずです。
このパスワード履歴メカニズムは、パスワードの再利用を防ぐことで、セキュリティの別の層を追加します。これは、一般的なセキュリティの弱点です。
この最終ステップでは、新しいパスワードポリシーを既存のユーザーに適用し、ユーザーのパスワード情報を管理する方法を学びます。
/etc/login.defsでパスワードポリシーを変更すると、新しい設定は、新しく作成されたユーザー、または既存のユーザーを手動で更新した場合にのみ適用されます。既存のユーザーを管理する方法を見てみましょう。
まず、ユーザーアカウントの現在のステータスを確認します。
sudo chage -l labex
これにより、現在のユーザーのパスワードの有効期限情報が表示されます。
次回のログイン時にユーザーにパスワードの変更を強制するには、以下を実行します。
sudo chage -d 0 testuser
これにより、最後のパスワード変更日が 0 に設定され、次回のログイン時にパスワードの変更が強制されます。
パスワードの有効期限日を手動で設定するには、以下を実行します。
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 日に設定されます。
いくつかのコマンドを使用して、ユーザーのパスワード情報を確認できます。
すべてのローカルユーザーアカウントを表示します。
cat /etc/passwd
特定のユーザーのパスワードステータスを確認します。
sudo passwd -S testuser
特定のパスワード設定を持つユーザーを一覧表示します。
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 で堅牢なパスワードポリシーを設定し、適用する方法を学びました。具体的には、以下の内容を習得しました。
これらのパスワードポリシー設定は、安全な Linux 環境を維持するために不可欠です。強力なパスワード要件の実装、定期的なパスワードローテーション、およびパスワードの再利用の防止により、不正アクセスや潜在的な侵害に対するシステムのセキュリティ体制を大幅に改善しました。
効果的なパスワードポリシーは、包括的なセキュリティ戦略のほんの一部であることを忘れないでください。定期的なシステムアップデート、適切なユーザー管理、継続的なセキュリティ監視などの他のセキュリティ対策と組み合わせる必要があります。