ローカルLinuxパスワードポリシーの複雑性と有効期限の設定
このステップでは、堅牢なパスワードポリシーを設定することにより、Linuxシステムのセキュリティを強化する方法を学びます。強力なパスワードポリシーは、複雑性と有効期限という2つの重要な側面を強制する基本的なセキュリティ制御です。複雑性のルールは、文字種の組み合わせを要求することでパスワードが推測されにくいようにし、有効期限のルールはユーザーに定期的なパスワード変更を強制することで、認証情報の漏洩リスクを低減します。標準的なLinuxユーティリティを使用して、システム全体の構成ファイルを変更し、これらのポリシーを適用します。
まず、パスワードの複雑性について見ていきましょう。最新のDebianベースのシステム(Ubuntuなど)では、パスワードの品質はpam_pwqualityモジュールによって管理されています。その設定は/etc/security/pwquality.confファイルに保存されています。
まず、デフォルト設定を確認しましょう。catコマンドを使用して、設定ファイルの内容を表示します。出力をより見やすくするために、コメント行と空行を除外するためにgrepを使用します。
grep -vE '^#|^$' /etc/security/pwquality.conf
デフォルト設定が表示されるか、あるいはアクティブな設定がないためにファイルが空である可能性があります。次に、より強力なポリシーを適用します。管理者権限でこのファイルを編集する必要があるため、nanoエディタと共にsudoを使用します。
sudo nano /etc/security/pwquality.conf
新しいポリシーを適用するために、以下の行をファイルに追加します。これらの設定は、パスワードが最低10文字であり、少なくとも1つの数字、1つの大文字、1つの小文字を含むことを要求します。
minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1
これらのオプションについて詳しく見ていきましょう。
minlen = 10: パスワードの最小許容長を10文字に設定します。
dcredit = -1: 少なくとも1つの数字を要求します。負の数は「少なくとも1つ」を意味します。
ucredit = -1: 少なくとも1つの大文字を要求します。
lcredit = -1: 少なくとも1つの小文字を要求します。
これらの行を追加した後、Ctrl+X、次にY、そしてEnterを押してnanoを保存して終了します。
次に、パスワードの有効期限の設定に進みます。これらの設定は、パスワードの最大および最小有効期間を定義します。新しいユーザーアカウントのデフォルト値は/etc/login.defsに保存されています。
grepを使用して、このファイル内の関連する設定を見つけます。
grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs
デフォルト値が表示されますが、PASS_MAX_DAYSは非常に大きな値に設定されていることが多く、実質的に有効期限が無効になっています。
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 99999
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 0
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 7
有効期限を9000日に設定するポリシーを適用しましょう。sudo nanoでファイルを開きます。
sudo nano /etc/login.defs
PASS_MAX_DAYSの行を見つけ、その値を99999から9000に変更します。また、ユーザーがパスワードを頻繁に変更しすぎるのを防ぐために、PASS_MIN_DAYSを7に設定することもできます。
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 9000
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 7
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 14
ファイルを保存してnanoを終了します。/etc/login.defs内のこれらの設定は、この変更の後に作成されたユーザーに適用されます。既存のユーザー(例えば、私たちのlabexユーザー)にポリシーを適用するには、chageコマンドを使用します。
まず、labexユーザーの現在の有効期限情報を確認します。
sudo chage -l labex
出力には、パスワードの有効期限が設定されていないことが示されます。
Last password change : Jul 22, 2023
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
次に、-Mフラグを使用してchageを実行し、labexユーザーの最大日数を9000に設定します。
sudo chage -M 9000 labex
ユーザーの有効期限情報を再度確認して、変更を検証します。
sudo chage -l labex
これで、Password expiresの日付が更新され、最大日数が9000日に設定され、有効期限ポリシーが正常に適用されたことがわかります。
Last password change : Jul 22, 2023
Password expires : Jan 01, 2048
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 9000
Number of days of warning before password expires : 7
これで、Linuxシステム上でパスワードの複雑性と有効期限の両方のポリシー設定が完了しました。