RedHat Enterprse Linux8 パスワード周りの設定確認
IT統制監査で確認することが多いRedHat Enterprse Linux8のパスワード周りの設定の確認方法を整理しました。
参照資料→ CIS Benchmarks CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
パスワードの最小文字数
複数の設定方法
RedHat Enterprse Linux8では、パスワードの最小文字数を設定する方法が複数あります。
方法1:/etc/pam.d/password-auth、/etc/pam.d/system-authに設定する。
方法2: /etc/security/pwquality.confに設定する。
方法3: /etc/security/pwquality.conf.d/ ディレクトリ内の .conf ファイルに設定する。(例 /etc/security/pwquality.conf.d/50-pwlength.conf)
設定の適用には優先順位があり、方法1の設定が方法2よりも、方法2の設定が方法3よりも優先されます。つまり、方法1が一番強いです。ただし、CISベンチマークでは、設定を1つのファイルにまとめることと、わかりやすさや利便性を考慮して方法3を推奨しています。
ステップ1: パスワードの最小文字数の確認(方法1の部分)
方法1の設定は推奨されていないため、以下の実行時に何も表示されないことを確認します。
# 確認するために入力するコマンド
$ grep -Psi -- '^\h*password\h+(requisite|required|sufficient)\h+pam_pwquality\.so\h+([^#\n\r]+\h+)?minlen\h*=\h*([0-9]|1[0-3])\b' /etc/pam.d/system-auth /etc/pam.d/password-auth
# 出力結果の例(何も表示されいないことが推奨されています)
ステップ2: パスワードの最小文字数の確認(方法2と3の部分)
以下の出力結果は方法3で設定されていることを示しています。
# 確認するために入力するコマンド
grep -Psi -- '^\h*minlen\h*=\h*(1[4-9]|[2-9][0-9]|[1-9][0-9]{2,})\b' /etc/security/pwquality.conf /etc/security/pwquality.conf.d/*.conf
# 出力結果の例 (以下では 50-pwlength.confというファイルでminlen = 14という設定がされています)
/etc/security/pwquality.conf.d/50-pwlength.conf:minlen = 14
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
項番: 4.4.3.2.2 Ensure password length is configured
パスワードの複雑性
複数の設定方法
パスワードの複雑性も最小文字数と同様に設定する方法が複数あります。
方法1:/etc/pam.d/system-auth、/etc/pam.d/password-authに設定する。
方法2: /etc/security/pwquality.confに設定する。
方法3: /etc/security/pwquality.conf.d/ ディレクトリ内の .conf ファイルに設定する。(例 /etc/security/pwquality.conf.d/50-pwcomplexity.conf)
設定の適用には優先順位があり、方法1の設定が方法2よりも、方法2の設定が方法3よりも優先されます。つまり、方法1が一番強いです。ただし、CISベンチマークでは、設定を1つのファイルにまとめることと、わかりやすさや利便性を考慮して方法3を推奨しています。
ステップ1: パスワードの複雑性の確認(方法1の部分)
方法1の設定は推奨されていないため、以下の実行時に何も表示されないことを確認します。
# 確認するために入力するコマンド
$ grep -Psi -- '^\h*password\h+(requisite|required|sufficient)\h+pam_pwquality\.so\h+([^#\n\r]+\h+)?(minclass=[0-3]|[dulo]credit=[^-]\d*)\b' /etc/pam.d/system-auth /etc/pam.d/password-auth
# 出力結果の例(何も表示されいないことが推奨されています)
ステップ2: パスワードの複雑性の確認(方法2と3の部分)
以下の出力結果の例は方法3で設定されていることを示しています。
なお、出力結果の例ではminclassと*creditが同時に設定されているため以下の複雑性が求められています。
minclass = 4なので数字・英大文字・英小文字・記号の 全てが必要です。
もし、minclass以外に*creditも設定されている場合はそれらの条件も満たす必要があります。以下のサンプルの場合、minclass = 4の設定に加えて以下の条件も必要になります。
ucredit=-2 の場合、大文字(Uppercase)が最低2文字必要です。
lcredit=-1 の場合、小文字(lowercase)が最低1文字必要です。
dcredit=-1 の場合、数字(Digit)が最低1文字必要です。
ocredit=-1 の場合、記号(special character)が最低1文字必要です。
# 確認するために入力するコマンド
$ grep -Psi -- '^\h*(minclass|[dulo]credit)\b' /etc/security/pwquality.conf /etc/security/pwquality.conf.d/*.conf
# 出力結果の例(以下では 50-pwcomplexity.confというファイルで各設定がされています)
/etc/security/pwquality.conf.d/50-pwcomplexity.conf:minclass = 4
-- AND/OR --
/etc/security/pwquality.conf.d/50-pwcomplexity.conf:ucredit = -2
/etc/security/pwquality.conf.d/50-pwcomplexity.conf:lcredit = -1
/etc/security/pwquality.conf.d/50-pwcomplexity.conf:dcredit = -1
/etc/security/pwquality.conf.d/50-pwcomplexity.conf:ocredit = -1
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
項番: 4.4.3.2.3 Ensure password complexity is configured
参考: その他
過去のパスワードを保存する/etc/security/opasswdファイルの存在確認、ファイルのパーミッション(ファイルへのアクセス制限)の確認については以下の項番に記載されています。
項番: 6.1.3 Ensure permissions on /etc/opasswd are configured
パスワードの有効期限
以下のように、まずサーバーの共通設定を確認し、その後に個別のユーザーがサーバーの共通設定と異なる有効期限に変更していないか確認します。
ステップ1: サーバーの共通設定
# 確認するために入力するコマンド
grep PASS_MAX_DAYS /etc/login.defs
# 出力結果の例
PASS_MAX_DAYS 365
ステップ2: 各ユーザーの現在の状態
以下を実行することでサーバーの各ユーザーアカウントに適用されているパスワードの有効期限を確認できます。たとえば、ユーザー個人で勝手にパスワードの有効期限を短くするケースなどが想定されます。以下のコマンドは365日より大きな値で設定されているアカウントがないか確認しているので、何も表示されなければ問題ありません。
# 確認するために入力するコマンド(管理者権限が必要です)
$ sudo grep -E '^[^:]+:[^!*]' /etc/shadow | cut -d: -f1,5
# 出力結果の例 (もしパスワードが無期限で設定されている場合は 99999 が出力されます)
root 365
userA 99999
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
項番: 4.5.1.2 Ensure password expiration is 365 days or less
パスワードの再利用制限
過去N世代までのパスワードを再利用させない設定の確認です。以下のステップ1・2を順番に確認します。
ステップ1: パスワードの再利用制限の確認
/etc/security/pwhistory.confのrememberの値(単位は世代)で定義されます。例えば、24の場合は過去24世代のパスワードを記憶してそれらパスワードの再利用を制限します。
# 確認するために入力するコマンド
grep -Pi -- '^\h*remember\h*=\h*(2[4-9]|[3-9][0-9]|[1-9][0-9]{2,})\b' /etc/security/pwhistory.conf
# 出力結果の例
remember = 24
ステップ2: 別の設定ファイル/etc/pam.d/password-auth、/etc/pam.d/system-authでロックアウトの設定が行われていないか確認
# 確認するために入力するコマンド
$ grep -Pi -- '^\h*password\h+(requisite|required|sufficient)\h+pam_pwhistory\.so\h+([^#\n\r]+\h+)?remember=(2[0-3]|1[0-9]|[0-9])\b' /etc/pam.d/system-auth /etc/pam.d/password-auth
# 出力結果の例(何も表示されないべきですが、何か表示された場合はステップ1と同じ設定であるか確認します)
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
項番: 4.4.3.3.1 Ensure password history remember is configured
参考: その他
過去のパスワードを保存する/etc/security/opasswdファイルの存在確認、ファイルのパーミッション(ファイルへのアクセス制限)の確認については以下の項番に記載されています。
項番: 6.1.3 Ensure permissions on /etc/opasswd are configured
アカウントのロック
パスワードを何回間違えるとアカウントをロックする、何秒経つとロックを解除する設定の確認です。以下のステップ1〜4を順番に確認します。
ステップ1: ロックアウト設定の確認
# 確認するために入力するコマンド
$ grep -Pi -- '^\h*deny\h*=\h*[1-5]\b' /etc/security/faillock.conf
# 出力結果の例
deny = 5
ステップ2: 別の設定ファイル/etc/pam.d/system-auth、/etc/pam.d/password-authでロックアウトの設定が行われていないか確認
# 確認するために入力するコマンド
$ grep -Pi -- '^\h*auth\h+(requisite|required|sufficient)\h+pam_faillock\.so\h+([^#\n\r]+\h+)?deny\h*=\h*(0|[6-9]|[1-9][0-9]+)\b' /etc/pam.d/system-auth /etc/pam.d/password-auth
# 出力結果の例(何も表示されないべきですが、何か表示された場合はステップ1と同じ設定であるか確認します)
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
項番: 4.4.3.1.1 Ensure password failed attempts lockout is configured
ステップ3: ロック解除設定の確認
# 確認するために入力するコマンド
$ grep -Pi -- '^\h*unlock_time\h*=\h*(0|9[0-9][0-9]|[1-9][0-9]{3,})\b' /etc/security/faillock.conf
# 出力結果の例
unlock_time = 900
ステップ4: 別の設定ファイル/etc/pam.d/system-auth、/etc/pam.d/password-authでロック解除の設定が行われていないか確認
# 確認するために入力するコマンド
$ grep -Pi -- '^\h*auth\h+(requisite|required|sufficient)\h+pam_faillock\.so\h+([^#\n\r]+\h+)?unlock_time\h*=\h*([1-9]|[1-9][0-9]|[1-8][0-9][0-9])\b' /etc/pam.d/system-auth /etc/pam.d/password-auth
# 出力結果の例(何も表示されないべきですが、何か表示された場合はステップ3と同じ設定であるか確認します)
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Red_Hat_Enterprise_Linux_8_Benchmark_v3.0.0.pdf
項番: 4.4.3.1.2 Ensure password unlock time is configured