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: すべての認証トークンが正しく更新できました。