テックブログ

技術ネタ

UbuntuのUser Managementを色々試してみる(2)

こんにちは、技術部のfです。
前回に引き続き、Ubuntu の User Management のドキュメントの内容を色々試してみます。

今回は Password Policy について。

デフォルトの設定の場合、最小パスワード長が6文字と、
いくつかの基本的なエントロピーチェックを必要とする。とあります。
これらの設定値は /etc/pam.d/common-password で管理されており、
最小パスワード長などを変更したい場合はこのファイルを編集すれば良いようです。

それでは早速試してみます。利用環境は前回同様 Ubuntu 20.04 です。
root や sudo で実行された場合はこのポリシーは適用されませんので注意が必要です。

$ passwd
 Changing password for test-user.
 Current password:
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 passwd: Have exhausted maximum number of retries for service
 passwd: password unchanged

BAD PASSWORD の為、パスワード変更には失敗しているものの、
要求されている最小パスワード長は8文字です。

現在の /etc/pam.d/common-password の設定を見てみます。

$ grep ^password /etc/pam.d/common-password
 password        requisite                       pam_pwquality.so retry=3
 password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
 password        requisite                       pam_deny.so
 password        required                        pam_permit.so

User Management の記事には minlen で最小パスワード長を設定できるとありますが、
特に minlen が指定されている様子はありません。

改めて /etc/pam.d/common-password について仕様を確認してみます。
RedHat の記事ではありますが、こちらが参考になりそうです。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system-level_authentication_guide/pam_configuration_files

1行目から見ていきます。

1番左の password については、ユーザのパスワードを変更する為に
使用される PAMモジュールインターフェース。

その次の requisite は直訳すると「必要条件」で、
「認証を継続する為にはモジュールの結果が成功する必要があり、
この時点で失敗した場合は直ちにユーザに通知される」とあります。

その次に pam_pwquality.so が指定されています。
pam_pwquality はパスワードの強度をチェックすることができるPAMモジュールのようです。

pam_pwquality のマニュアルは man コマンドで確認するか、以下URL からも確認できます。
http://manpages.ubuntu.com/manpages/focal/man8/pam_pwquality.8.html

最後に retry=3 が指定されており、強度チェックに失敗した場合でも
3回まではリトライできるようになっています。
デフォルトの場合は1なので、先程の passwd の結果から、
実際に retry=3 が適用されていることがわかります。

これらを踏まえると、pam_pwquality の強度チェックに失敗している可能性が高そうなので、pam_pwquality の仕様も見てみます。

minlen=N
The minimum acceptable size for the new password (plus one if credits are not disabled which is the default). In addition to the
number of characters in the new password, credit (of +1 in length) is given for each different kind of character (other, upper,
lower and digit). The default for this parameter is 8. Note that there is a pair of length limits also in Cracklib, which is used
for dictionary checking, a "way too short" limit of 4 which is hard coded in and a build time defined limit (6) that will be
checked without reference to minlen.

pam_pwquality の minlen ではデフォルトの値が8のようです。
その為、passwd で8文字を要求された状況かと思われます。

では、最小パスワード長を10文字に変更してみます。(以下は編集箇所のみ記載しています)

# vi /etc/pam.d/common-password
 password        requisite                       pam_pwquality.so retry=3 minlen=10

先程の pam_pwquality.so の行末に「minlen=10」を追記しました。
これで改めて一般ユーザでパスワード変更を試みます。

$ passwd
 Changing password for test-user.
 Current password:
 New password:
 BAD PASSWORD: The password is shorter than 10 characters
 New password:
 BAD PASSWORD: The password is shorter than 10 characters
 New password:
 BAD PASSWORD: The password is shorter than 10 characters
 passwd: Have exhausted maximum number of retries for service
 passwd: password unchanged

最小パスワード長は10文字であるとして、パスワード変更を行うことができませんでした。
正常に minlen の設定が行われているようです。

ちなみに以下のように1行目には何も追記せず、2行目に minlen=10 を追記してみたところ、

# vi /etc/pam.d/common-password
 password        requisite                       pam_pwquality.so retry=3
 password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 minlen=10
$ passwd
 Changing password for test-user.
 Current password:
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 passwd: Have exhausted maximum number of retries for service
 passwd: password unchanged

minlen=10 の設定は読まれておらず、pam_pwquality のデフォルト値を見ているようでした。

User Management の記事にあるのは最小文字数だけですが、
その他にもポリシーとして設定できるオプションがあります。
以下はオプションの一例です。

オプション内容
retry=N最大N回、ユーザにプロンプトを表示してからエラーを返す
difok=N変更後のパスワードが、古いパスワードとN文字以上異なることを必要とする
dcredit=NN文字以上の数字を必要とする
ucredit=NN文字以上の大文字を必要とする
lcredit=NN文字以上の小文字を必要とする
ocredit=NN文字以上のその他の文字(記号)を必要とする


「SSH Access by Disabled Users」にも書いてありますが、
SSH公開鍵認証の設定が行われている場合、パスワードを使わずにSSHログインが可能です。
パスワード認証ではなく公開鍵認証を行うことでより強固にすることができます。

ちなみに NordPass が発表した、2020年に最もよく使われたパスワードトップ200によると
1位は「123456」で、利用ユーザ数は2,543,285人となっていました。
2位の「123456789」が961,435人なので圧倒的に多いですね。

パスワードトップ200にランクインしているパスワードの大半はクラックされるのに
1秒もかからないようなので、最小パスワード設定などに関わらず、
常に文字数の多い複雑なパスワードを設定するよう心がけておくと良さそうです。

それではまた。

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください