tanke25616429のアウトプット

IT技術の基本を勉強したことをアウトプットします。Linux、Kubernetes、クラウド中心です。百番煎じくらいだけど誰かの役に立てばそれはそれでうれしい。

Linuxユーザ管理時に考慮する設定(その2 パスワード)

chageコマンド

chageはパスワードの有効期限等を管理するコマンドである。アカウントが無効化する期限を設定したり、パスワード変更の警告を出す日を設定したり、といったこともできる。管理はrootアカウントで行うが、自身の設定を見るだけであれば一般ユーザのアカウントでも可能である。代表的なオプションを記載する。

-M

パスワードの有効日数(パスワードが有効でいられる最長日数)を設定できる。 有効日数と最終更新日 を足した値が現在の日付より小さい場合(つまり、最後にパスワードを更新してからパスワードが有効でいられる日数が過ぎている状態)、 ユーザはアカウントを使用する前にパスワードを変更しなければならない。

設定例は以下である。まず、事前準備として最近作ったユーザにパスワードを設定する。パスワードはtest1234とした。

[root@nuc-centos8 ~]# passwd testuser3
ユーザー testuser3 のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 単純/系統的すぎます
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

有効日数を10日に変更する。

[root@nuc-centos8 ~]# chage -l testuser3
最終パスワード変更日                            : 3月 23, 2021
パスワード期限:                                 : なし
パスワード無効化中                                      : なし
アカウント期限切れ                                              : なし
パスワードが変更できるまでの最短日数            : 0
パスワードを変更しなくてよい最長日数            : 99999
パスワード期限が切れる前に警告される日数                : 1
[root@nuc-centos8 ~]# chage testuser3 -M 10
[root@nuc-centos8 ~]# chage -l testuser3
最終パスワード変更日                            : 3月 23, 2021
パスワード期限:                                 :  4月 02, 2021
パスワード無効化中                                      : なし
アカウント期限切れ                                              : なし
パスワードが変更できるまでの最短日数            : 0
パスワードを変更しなくてよい最長日数            : 10
パスワード期限が切れる前に警告される日数                : 1

-d

パスワードの最終更新日を設定できる。これを意図的に設定する1つのユースケースとしては、特定のアカウントのパスワードを有効期間切れにしてパスワード変更を促すというものである。

なお、変更後のパスワードとしてtest9876を入力したが、エラーチェックでパスワード変更を拒絶されている。passwdコマンドで初期設定するときとは脆弱なパスワードに対する扱いが異なっている。

[root@nuc-centos8 ~]# ssh testuser3@localhost
testuser3@localhost's password:
You are required to change your password immediately (password expired)
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Tue Mar 23 00:52:00 2021
WARNING: Your password has expired.
You must change your password now and login again!
ユーザー testuser3 のパスワードを変更。
Current password:
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 単純/系統的すぎます
passwd: 認証トークン操作エラー
Connection to localhost closed.

-m

パスワード変更の間隔の最短日数を設定できる。 このフィールドをゼロとした時は、ユーザはいつでもパスワードを変更できる。

いったん事前準備でパスワードの最終更新日を有効期限内になるように設定する。

[root@nuc-centos8 ~]# chage testuser3 -d 2021-03-22
[root@nuc-centos8 ~]# chage testuser3 -l
最終パスワード変更日                            : 3月 22, 2021
パスワード期限:                                 :  4月 01, 2021
パスワード無効化中                                      : なし
アカウント期限切れ                                              : なし
パスワードが変更できるまでの最短日数            : 0
パスワードを変更しなくてよい最長日数            : 10
パスワード期限が切れる前に警告される日数                : 1

最短パスワード変更間隔を1日に設定する。testuser3にログインしてパスワード変更をする。一度目は問題なく実施でき、すぐ二度目を実施しようとすると失敗する。これはパスワード変更に最低1日待たなくてはならないからである。

[root@nuc-centos8 ~]# chage testuser3 -m 1
[root@nuc-centos8 ~]# ssh testuser3@localhost
testuser3@localhost's password:
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Mar 24 00:05:19 2021 from ::1
Welcome
[testuser3@nuc-centos8 ~]$ passwd
ユーザー testuser3 のパスワードを変更。
Current password:
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[testuser3@nuc-centos8 ~]$ passwd
ユーザー testuser3 のパスワードを変更。
Current password:
パスワードを変更するには長く待つ必要があります

/etc/login.defs

デフォルトのパスワード有効日数は/etc/login.defsに記載されている。パスワードの長さなども設定できることがわかる。

[root@nuc-centos8 ~]# cat /etc/login.defs
(略)
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    8
PASS_WARN_AGE   1
(略)

例えばパスワードの最小の長さと、パスワードが有効となる日数を変更してみる。

[root@nuc-centos8 ~]# cat /etc/login.defs
(略)
#PASS_MAX_DAYS  99999
PASS_MAX_DAYS   99
PASS_MIN_DAYS   0
#PASS_MIN_LEN   8
PASS_MIN_LEN    15
PASS_WARN_AGE   1
(略)

新たにユーザを作成し、デフォルト設定を確認する。初期パスワードはtest1234とする。

[root@nuc-centos8 ~]# useradd testuser4
[root@nuc-centos8 ~]# chage testuser4 -l
最終パスワード変更日                            : 3月 23, 2021
パスワード期限:                                 :  6月 30, 2021
パスワード無効化中                                      : なし
アカウント期限切れ                                              : なし
パスワードが変更できるまでの最短日数            : 0
パスワードを変更しなくてよい最長日数            : 99
パスワード期限が切れる前に警告される日数                : 1
[root@nuc-centos8 ~]# passwd testuser4
ユーザー testuser4 のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 単純/系統的すぎます
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

パスワードを変更してみる。一度目はqazxswedc(9文字)で失敗し、二度目はqazxswedcvfrtgb(15文字)で成功している。

[testuser4@nuc-centos8 ~]$ passwd
ユーザー testuser4 のパスワードを変更。
Current password:
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 辞書の単語に 基づいています
passwd: 認証トークン操作エラー
[testuser4@nuc-centos8 ~]$ passwd
ユーザー testuser4 のパスワードを変更。
Current password:
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

参考にしたもの