Ubuntu Linux22.04 パスワード周りの設定確認
IT統制監査で確認することが多いUbuntu Linux22.04のパスワード周りの設定の確認方法を整理しました。
参照資料→ CIS Benchmarks CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdf
パスワードの文字数
パスワードの最小文字数の確認
# 確認するために入力するコマンド
$ grep '^\s*minlen\s*' /etc/security/pwquality.conf
# 出力結果の例
minlen = 14
参考:CIS Benchmarks での記載箇所
ファイル: CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdf
項番: 5.4.1 Ensure password creation requirements are configured
パスワードの複雑性
以下の確認方法1と2の設定方法があるので両方で確認するのがおすすめです。
パスワードの複雑性の確認方法 1 (minclass で設定の場合)
# 確認するために入力するコマンド
$ grep '^\s*minclass\s*' /etc/security/pwquality.conf
# 出力結果の例(4の場合、数字・英大文字・英小文字・記号の全てを利用する必要があります)
minclass = 4
パスワードの複雑性の確認方法 2 (その他)
以下のように各文字種類ごとに必要な文字数を指定できます。
dcredit=-1 の場合、数字(Digit)が最低1文字必要です。
ucredit=-1 -の場合、大文字(Uppercase)が最低1文字必要です。
lcredit=-1 の場合、小文字(Lowercase)が最低1文字必要です。
ocredit=-1 -の場合、記号(special character)が最低1文字必要です。
# 確認するために入力するコマンド
$ grep -E '^\s*[duol]credit\s*' /etc/security/pwquality.conf
# 出力結果の例
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
参考:CIS Benchmarks での記載箇所
ファイル: CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdf
項番: 5.4.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 (各ユーザーの現在の状態)
以下を実行することでサーバーの各ユーザーアカウントに適用されているパスワードの有効期限を確認できます。たとえば、ユーザー個人で勝手にパスワードの有効期限を短くするケースなどが想定されます。以下のコマンドは365日より大きな値で設定されているアカウントがないか確認しているので、何も表示されなければ問題ありません。
# 確認するために入力するコマンド(管理者権限が必要です)
$ sudo awk -F: '(/^[^:]+:[^!*]/ && ($5>365 || $5~/([0-1]|-1|\s*)/)){print $1 " "
$5}' /etc/shadow
# 出力結果の例 (例えばパスワードが無期限で設定されている場合は 99999 が出力されます)
userA 99999
参考:CIS Benchmarks での記載箇所
ファイル: CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdf
項番: 5.5.1.2 Ensure password expiration is 365 days or less
パスワードの再利用制限
過去N世代までのパスワードを再利用させない設定の確認です。
パスワードの再利用制限の確認方法
/etc/pam.d/common-passwordのrememberの値(単位は世代)で定義されます。例えば、5の場合は過去5世代のパスワードを記憶してそれらパスワードの再利用を制限します。
なお、CIS BenchmarksのUbuntu Linux20.04ではpam_pwhistory.soの行にremember=の設定を行っていますが、Ubuntu Linux22.04ではpam_unix.soの行でremember=の設定を行っています。
※このためUbuntu Linux22.04ではpam_pwhistory.soの行はありません
# 確認するために入力するコマンド
$ grep -P '^\h*password\h+([^#\n\r]+\h+)?pam_unix\.so\h+([^#\n\r]+\h+)?remember=([5-9]|[1-9][0-9]+)\b' /etc/pam.d/common-password
# 出力結果の例
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt remember=5
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdf
項番: 5.4.3 Ensure password reuse is limited
参考: その他
過去のパスワードを保存する/etc/security/opasswdファイルの存在確認、ファイルのパーミッション(ファイルへのアクセス制限)の確認についてはCIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdfでは記載はありませんでした。
※Ubuntu Linux20.04では記載あり。
アカウントのロック
パスワードを何回間違えるとアカウントをロックする、何秒経つとロックを解除する設定の確認です。以下のステップ1〜3を順番に確認します。
ステップ1: 必要なモジュールの確認(common-auth)
/etc/pam.d/common-auth上で必要なモジュールのpam_faillock.soが3行で設定されていることを確認します。
# 確認するために入力するコマンド
$ grep "pam_faillock.so" /etc/pam.d/common-auth
# 出力結果の例(pam_faillock.soに関する3つの行が存在することを確認します)
auth required pam_faillock.so preauth
auth [default=die] pam_faillock.so authfail
auth sufficient pam_faillock.so authsucc
ステップ2: 必要なモジュールの確認(common-account:)
/etc/pam.d/common-account上で必要なモジュールのpam_faillock.soが1行で設定されていることを確認します。
# 確認するために入力するコマンド
$ grep "pam_faillock.so" /etc/pam.d/common-account
# 出力結果の例
account required pam_faillock.so
ステップ3: ロックアウト設定の確認
deny=の後の値(単位は回数) と unlock_time=の後の値(単位は秒)で定義されます。
# 確認するために入力するコマンド
$ awk '/^ *deny *=/\||/^ *fail_interval *=/\||/^ *unlock_time *=/' /etc/security/faillock.conf
# 出力結果の例
deny = 4
fail_interval = 900
unlock time = 600
参考: CIS Benchmarks での記載箇所
ファイル: CIS_Ubuntu_Linux_22.04_LTS_Benchmark_v1.0.0.pdf
項番: 5.4.2 Ensure lockout for failed password attempts is configured