linux構築(RHEL7.9) – パスワードの複雑性を設定する

はじめに

LinuxでPWの複雑性について設定してみたいと思います。

企業によっては以下のようなPWに関するセキュリティ要件があるのではないでしょうか。

  • PWの長さは8文字以上
  • 大文字1文字以上含む
  • 小文字1文字以上含む
  • 数字1文字以上含む
  • その他の記号1文字以上含む

今回は、このような企業のポリシーに沿ったPW設定をlinuxシステムのユーザに強制する設定を行ってみたいと思います。

※ ちなみに、今回検証に利用するAMIはRHEL7.9ですが、利用するpam_pwqualityのオプションはRHEL9でも動作することを検証していますので、RHEL9について知りたい方にも参考になるのではないかと思います。

設定変更の方法

pamについて

パスワードの複雑性については、pamのpam_pwqualityモジュールを利用することで設定することが可能です。
pamについてはLinuCの解説が分かりやすかったので以下に引用させていただきます。

https://linuc.org/study/knowledge/417/

今回は、「PAM」について。

PAMとは「Pluggable Authenticaton Modules」の頭文字を取ったものです。 「Authentication」すなわちユーザ認証に用いられているシステムです。UNIX系のシステムで広く利用されています。

PAMの大きな特徴は、「Linux自体の認証だけでなく、アプリケーションの認証でも利用できる」という点にあります。たとえば、telnetやssh、sambaなどのアプリケーションにおいても、PAMを利用した認証ができるということになります。これによって、認証処理をアプリケーションから独立させることができ、認証方式を統一することができます(もちろんアプリケーションごとに異なる挙動をさせることも可能)。標準の状態では、PAMは/etc/passwd(また、これを暗号化した/etc/shadow など)の情報を元に認証を行います。

PAMをうまく操ると、たとえば「suコマンドで、特定のグループ(多くの場合wheel)にのみroot権限を得ることができる」といったことも、比較的簡単に行えます。PAMは複数のモジュールから成り立っており、さまざまな認証を実現することができます。PAMの設定ファイルは/etc/pam.d/ディレクトリにあり、ここにあるファイルを編集することで、認証の設定を行うことができます(ただし、編集を誤るとシステムにログインすることができなくなるので、編集するときには1つのコンソールでrootでログインしたままの状態で作業することをお勧めします)。

セキュリティ保持の観点からも、PAMを理解することは重要ですので、ぜひ理解しておいてください。

今回はこのpam.dの配下にある設定ファイルの一つ/etc/pam.d/system-authを編集して、
PWの複雑性を設定していきたいと思います。

準備

テストグループとユーザの追加

動作確認用のグループとユーザーを追加するところから。

グループの追加
※ 500はgid, developは追加するグループ名

groupadd -g 500 develop

確認

[root@ip-10-0-3-210 ~]# cat /etc/group | tail -2
ssm-user:x:1001:
develop:x:500:

ユーザの追加
※ -uはuid, -g初期group, -cはコメント, -dはhomeディレクトリ, -sはログインシェル, 最後のdevelopはuser名前

useradd -u 500 -g develop -c develop -d /home/develop -s /bin/bash develop

確認

[root@ip-10-0-3-210 ~]# cat /etc/passwd | tail -2
ssm-user:x:1001:1001::/home/ssm-user:/bin/bash
develop:x:500:500:develop:/home/develop:/bin/bash

確認

[root@ip-10-0-3-210 ~]# id -a develop
uid=500(develop) gid=500(develop) groups=500(develop)

設定変更

デフォルトの設定確認

さあ、準備は整いました。
まずは、デフォルトの設定を見てみます。
確認するのはsystem-authファイル内のpwqulityモジュールです。

デフォルトでは特に明示的にPWについてのポリシーは設定されていません。

[root@ip-10-0-3-210 ~]# cat /etc/pam.d/system-auth | grep pam_pwquality.so
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=

要件の確認

では要件に合わせてPWの複雑性を設定していきます。

要件を再掲します。

  • 8文字以上
  • 大文字1文字以上
  • 小文字1文字以上
  • 数字1文字以上
  • その他の記号1文字以上

要件を満たすために、pam_pwqualityにオプションを加えます。
以下のテーブルにオプションと要件をマップしました。

※ 各オプションの詳細については、以下のmanページを参照してみてください。
https://linux.die.net/man/8/pam_pwquality

オプション 要件
minlen=8 8文字以上
ucredit=-1 大文字1文字以上
lcredit=-1 小文字1文字以上
dcredit=-1 数字1文字以上
ocredit=-1 その他の記号1文字以上

設定変更

設定をviで編集します。

vi /etc/pam.d/system-auth

以下のように設定されていることを確認します。
※ 設定はシステムの再起動やdeamon-reloadのような操作は不要で、編集後すぐに有効になります。

[root@ip-10-0-3-210 ~]# cat /etc/pam.d/system-auth | grep pam_pwquality.so
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

検証

まず、developユーザにスイッチします。
※ rootではポリシーを強制できませんのでご注意ください。

[root@ip-10-0-3-210 ~]# su - develop
Last login: Sat Dec  9 07:05:05 UTC 2023 on pts/0

大文字のないPW(e.g., ancoromochi89!)を設定してみます。
すると大文字がないぞと怒られて設定できません。

[develop@ip-10-0-3-210 ~]$ passwd
Changing password for user develop.
Changing password for develop.
(current) UNIX password:
New password:
BAD PASSWORD: The password contains less than 1 uppercase letters
New password:

今度はPWをTom0808!と設定してみます。
すると、無事設定成功しました。

[develop@ip-10-0-3-210 root]$ passwd
Changing password for user develop.
Changing password for develop.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

ガッチャ!!

おわりに

いかがだったでしょうか。
pamは今回紹介したも以外にも外部の認証プロバイダーとの連携や、豊富なモジュールによる柔軟な設定が可能です。
また、pam以外でも、RHEL7であればauthconfigコマンドを利用して、/etc/security/pwqualityにlinuxシステムのデフォルトのPWの複雑性を設定することも可能です。後者はlinuxのシステムのみに閉じたローカルな設定であると考えていますが、きちんと調べてみないといけないです。今後の課題ですね!

というわけで、またお会いしましょう!
あでゅー!

Last modified: 2023-12-09

Author