見出し画像

CentOS8 パスワード周りの設定確認

IT統制監査で確認することが多いCentOS8のパスワード周りの設定の確認方法を整理しました。
参照資料→ CIS Benchmarks CIS_CentOS_Linux_8_Benchmark_v2.0.0.pdf


パスワードの最小文字数

確認には以下の2つのステップが必要です。
ステップ1でパスワードの文字数を設定するためのモジュール(pam_pwquality.so)が有効に設定されているか確認します。この設定が有効でない場合、ステップ2で最小文字数が設定されていても実際には最小文字数の制限は動作しません。

ステップ1:pam_pwquality.soが有効に設定されているか確認

以下の出力例では/etc/pam.d/system-authと/etc/pam.d/password-authのファイル上で有効に設定されていることが示されています(一般的には以下の出力例の設定がされていることが多いです)。

# 確認するために入力するコマンド
$ grep pam_pwquality.so /etc/pam.d/system-auth /etc/pam.d/password-auth

# 出力結果の例
/etc/pam.d/system-auth:password requisite pam_pwquality.so try_first_pass local_users_only enforce_for_root retry=3
/etc/pam.d/password-auth:password requisite pam_pwquality.so try_first_pass local_users_only enforce_for_root retry=3

ステップ2:パスワードの最小文字数の確認

/etc/security/pwquality.confのminlen =の後の値(単位は文字数)で定義されます。

# 確認するために入力するコマンド
$ grep ^minlen /etc/security/pwquality.conf

# 出力結果の例
minlen = 14

参考:CIS Benchmarks での記載箇所

ファイル: CIS_CentOS_Linux_8_Benchmark_v2.0.0.pdf
項番: 5.5.1 Ensure password creation requirements are configured

パスワードの複雑性

以下の確認方法1と2の設定方法があるので両方で確認するのがおすすめです。

パスワードの複雑性の確認方法 1 (minclass で設定の場合)

/etc/security/pwquality.confのminclassの値によって要求される複雑性が変わります。

# 確認するために入力するコマンド
$ grep ^minclass /etc/security/pwquality.conf

# 出力結果の例(4の場合、数字・英大文字・英小文字・記号の全てを利用する必要があります)
minclass = 4

パスワードの複雑性の確認方法 2 (その他)

以下のように各文字種類ごとに必要な文字数を指定できます。
dcredit=-1 の場合、数字(Digit)が最低1文字必要です。
ucredit=-1 -の場合、大文字(Uppercase)が最低1文字必要です。
ocredit=-1 -の場合、記号(special character)が最低1文字必要です。
lcredit=-1 の場合、小文字(lowercase)が最低1文字必要です。

# 確認するために入力するコマンド
$ grep -E "^\s*\Scredit\s*=" /etc/security/pwquality.conf

# 出力結果の例(以下の場合は数字・英大文字・英小文字・記号の全てを最低1文字は利用する必要があります)
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1

参考:CIS Benchmarks での記載箇所

ファイル: CIS_CentOS_Linux_8_Benchmark_v2.0.0.pdf
項番: 5.5.1 Ensure password creation requirements are configured

パスワードの有効期限

以下のように、まずサーバーの共通設定を確認し、その後に個別のユーザーがサーバーの共通設定と異なる有効期限に変更していないか確認します。

パスワードの有効期限の確認方法 1 (サーバーの共通設定)

/etc/login.defsのPASS_MAX_DAYSの値(単位はDAY)で定義されます。

# 確認するために入力するコマンド
$ grep PASS_MAX_DAYS /etc/login.defs

# 出力結果の例
PASS_MAX_DAYS 365

パスワードの有効期限の確認方法 2 (各ユーザーの現在の状態)

以下はrootユーザーに切り替え後に行う必要があります。以下を実行することでサーバーの各ユーザーアカウントに適用されているパスワードの有効期限を確認できます。たとえば、ユーザー個人で勝手にパスワードの有効期限を短くするケースなどが想定されます。

# 確認するために入力するコマンド
# grep -E '^[^:]+:[^!*]' /etc/shadow | cut -d: -f1,5

# 出力結果の例 (もしパスワードが無期限で設定されている場合は 99999 が出力されます)
root 365
userA 99999

参考:CIS Benchmarks での記載箇所

ファイル:CIS_CentOS_Linux_8_Benchmark_v2.0.0.pdf
項番: 5.6.1.1 Ensure password expiration is 365 days or less

パスワードの再利用制限

過去N世代までのパスワードを再利用させない設定の確認です。

パスワードの再利用制限の確認方法

/etc/pam.d/system-authのrememberの値(単位は世代)で定義されます。
例えば、5の場合は過去5世代のパスワードを記憶してそれらパスワードの再利用を制限します。

# 確認するために入力するコマンド
$ grep -P '^\h*password\h+(requisite|sufficient)\h+(pam_pwhistory\.so|pam_unix\.so)\h+([^#\n\r]+\h+)?remember=([5-9]|[1-9][0-9]+)\h*(\h+.*)?$' /etc/pam.d/system-auth

# 出力結果の例
password requisite pam_pwhistory.so try_first_pass local_users_only enforce_for_root retry=3 remember=5
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5

参考: CIS Benchmarks での記載箇所

ファイル: CIS_CentOS_Linux_8_Benchmark_v2.0.0.pdf
項番: 5.5.3 Ensure password reuse is limited

参考:その他

過去のパスワードを保存する/etc/security/opasswdファイルの存在確認、ファイルのパーミッション(ファイルへのアクセス制限)の確認についてはCIS_CentOS_Linux_8_Benchmark_v2.0.0.pdfでは記載はありませんでした。

アカウントのロック

パスワードを何回間違えるとアカウントをロックする、何経つとロックを解除する設定の確認です。

アカウントロックの確認方法 1 (CentOS8.0と8.1の場合)

/etc/pam.d/system-authと/etc/pam.d/password-authの2つのファイルと deny=の後の値(単位は回数) と unlock_time=の後の値(単位は秒)で定義されます。auth required pam_faillock.so という記述も必ず必要です。

# 確認するために入力するコマンド
$ grep -E '^\s*auth\s+required\s+pam_faillock.so\s+' /etc/pam.d/password-auth /etc/pam.d/system-auth

# 出力結果の例
/etc/pam.d/password-auth:auth required pam_faillock.so preauth silent deny=5 unlock_time=900
/etc/pam.d/password-auth:auth required pam_faillock.so authfail deny=5 unlock_time=900
/etc/pam.d/system-auth:auth required pam_faillock.so preauth silent deny=5 unlock_time=900
/etc/pam.d/system-auth:auth required pam_faillock.so authfail deny=5 unlock_time=900

アカウントロックの確認方法 2 (CentOS8.2以降の場合)

8.2以降ではロックする設定と解除する設定のファイルは1つです。以下はロックする設定の確認方法です。/etc/security/faillock.confのdeny =の後の値(単位は回数)で定義されます。

# 確認するために入力するコマンド
$ grep -E '^\s*deny\s*=\s*[1-5]\b' /etc/security/faillock.conf

# 出力結果の例
deny = 5

以下はロックを解除する設定の確認方法です。以下はロックを解除する設定の確認方法です。ロック設定と同じ/etc/security/faillock.confのunlock_time =の後の値(単位は秒)で定義されます。

# 確認するために入力するコマンド
$ grep -E '^\s*unlock_time\s*=\s*(0|9[0-9][0-9]|[1-9][0-9][0-9][0-9]+)\b'
/etc/security/faillock.conf

# 出力結果の例
unlock_time = 900

参考: CIS Benchmarks での記載箇所

ファイル: CIS_CentOS_Linux_8_Benchmark_v2.0.0.pdf
項番: 5.5.2 Ensure lockout for failed password attempts is configured


この記事が気に入ったらサポートをしてみませんか?