もくじ
前書き
Linuxにおいて、アカウント(ユーザ)のパスワード有効期限が切れる時間について書きたいと思います。
Linuxのユーザのパスワードに有効期限を設定することができますが、その有効期限は何時に切れるかご存じでしょうか。
23:59や00:00ではありません。
それを本記事では解説していきたいと思います。環境はCent OS 7を使用しています。
別件ですが、パスワード有効期限の設定方法と解除方法については、下の記事を見ていただければと思います。
タイムゾーンと日付の切り替わり
パスワード有効期限が切れる時間を説明するためには、Linuxのタイムゾーンと、日付の切り替わりについて理解する必要があります。
タイムゾーンについて
Linuxインストール時にも指定しますが、Linuxにはタイムゾーンがあります。「timedatectl」コマンドで確認します。
1 2 3 4 5 6 7 8 9 |
# timedatectl status Local time: 火 2021-03-23 17:50:45 JST Universal time: 火 2021-03-23 08:50:45 UTC ←UTCの時間 RTC time: 火 2021-03-23 17:54:02 Time zone: Asia/Tokyo (JST, +0900) ←このLinuxのタイムゾーン NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a |
上の場合、タイムゾーンはJSTとなっていることが確認できます。

(参考)Linuxインストール時にタイムゾーンを指定する画面
JSTとUTC
Linuxインストール時にタイムゾーンを「Asia/Tokyo」と指定してインストールした場合は、タイムゾーンはJSTになります。
ご存じだと思いますが、「JST=UTC+9時間」となります。例えば、日本(JTC)で21:00は、UTCで12:00(21:00-9:00)となります。
日付の切り替わり
Linuxの日付の切り替わりは、UTCで行われています。
つまり、UTCの0:00でLinuxの日付の切り替わりが行われるのでJTCのタイムゾーンでいうと、9:00に日付が切り替わることになります。
パスワード有効期限が切れる時間
さて、本題のパスワード有効期限が切れる時間についてご説明します。
お察しかと思いますが、パスワード有効期限はJTCでは9:00に有効期限が切れます。
繰り返し不要かと思いますが、UTCでいえば0:00に有効期限が切れます。
パスワード変更を行った時間も重要
ここで把握しておかなければいけないことがあります。
パスワード有効期限を把握するには、パスワードを変更した時間も重要になってきます。
パスワード変更を行った時間が、Linuxの日付の切り替わりの前後によって、有効期限が変わってきます。
例えば、4/1 9:00(JST)にパスワード変更を行うことは、「4/1 9:00 ~ 4/2 8:59」の間にパスワード変更を行うことと同義になります。日付の切り替わりが9:00だからです。
UTCにするとより理解が深まります。「4/1 0:00 ~ 4/1 23:59」(UTC)でパスワード変更することは、4/1のパスワード変更となります。これはすんなり理解できると思います。
そしてこれをJTCにすると、「4/1 9:00 ~ 4/2 8:59」(JST)となるわけです。
図を用いて有効期限が切れる時間を説明
ここで例を用いて図で説明したいと思います。
パスワード有効日数は「3日」とします。
4/1にパスワード変更(JTCでいうと「4/1 9:00 ~ 4/2 8:59」、UTCでいうと「4/1 0:00 ~ 4/1 23:59」)した場合、いつ有効期限が切れるでしょうか?
「4/5 9:00」に有効期限が切れます。下の図を見てください。

もうひとつ図で例を示したいと思います。4/1のパスワード変更でも、~8:59までの変更であったら3/31付けのパスワード変更となるため、4/4 9:00に有効期限が切れます。

検証
実際に朝9:00に切れるかテスト
それでは実際にユーザのパスワードが朝の9:00に切れるのか、検証したいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# date 2021年 3月 23日 火曜日 18:05:40 JST ←9:00を過ぎてるので、3/23 9:00 ~ 3/24 8:59のパスワード変更と同義。 # # chage -M 3 user1 ←パスワード有効期限を3日に設定する。 # # chage -W 1 user1 ←パスワード変更を促す警告メッセージを有効期限切れ1日前から表示する。 # # chage -l user1 最終パスワード変更日 : 3月 23, 2021 ←3/23 9:00 ~ 3/24 8:59のパスワード変更と同義。 パスワード期限: : 3月 26, 2021 ←3日後の3/26が有効期限の最終日。 パスワード無効化中 : なし アカウント期限切れ : なし パスワードが変更できるまでの最短日数 : 0 パスワードを変更しなくてよい最長日数 : 3 パスワード期限が切れる前に警告される日数 : 1 |
3/23の18:00(日本時間)ごろ「user1」ユーザのパスワードを新しいものへ更新しました。(これは、「3/23 9:00 ~ 3/24 8:59」のパスワード変更と同義です)
パスワード有効日数はここでは「3日」のため、3/26がパスワード有効期限の最終日です。(「3/26 9:00 ~ 3/27 8:59」が有効期限の最終日です)
つまり、「3/27 9:00」の有効期限が切れるはずです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[root@TEMPVM01 ~]# date 2021年 3月 26日 金曜日 09:01:19 JST ←3/26の9:00を過ぎているの有効期限の最終日1日前。 [root@TEMPVM01 ~]# [root@TEMPVM01 ~]# ssh user1@10.0.0.30 user1@10.0.0.30's password: Warning: your password will expire in 0 days ←パスワード有効期限切れの警告が表示される。 Last login: Fri Mar 26 08:54:24 2021 from 10.0.0.30 ~~~(次の日)~~~ [root@TEMPVM01 ~]# date 2021年 3月 27日 土曜日 08:55:01 JST ←9:00前なのでまだ有効期限の最終日。 [root@TEMPVM01 ~]# [root@TEMPVM01 ~]# ssh user1@10.0.0.30 user1@10.0.0.30's password: Warning: your password will expire in 0 days Last login: Fri Mar 26 09:01:33 2021 from 10.0.0.30 [user1@TEMPVM01 ~]$ ←3/26扱いなので、有効期限が切れておらずログインできる。 [user1@TEMPVM01 ~]$ exit ログアウト Connection to 10.0.0.30 closed. [root@TEMPVM01 ~]# [root@TEMPVM01 ~]# date 2021年 3月 27日 土曜日 09:08:23 JST ←9:00を過ぎたので有効期限が切れた。 [root@TEMPVM01 ~]# [root@TEMPVM01 ~]# ssh user1@10.0.0.30 user1@10.0.0.30's password: You are required to change your password immediately (password aged) Last login: Sat Mar 27 09:08:33 2021 from 10.0.0.30 WARNING: Your password has expired. ←パスワード有効期限が切れた旨のメッセージが表示される。 You must change your password now and login again! ユーザー user1 のパスワードを変更。 user1 用にパスワードを変更中 現在の UNIX パスワード: |
仮定どおり3/27 9:00(JST)に有効期限が切れました。
タイムゾーンを変更してテスト
タイムゾーンを変更してテストしてみます。
ここでは、「Europe/Sophia」にしてみました。ちなみにUTC+2:00になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# timedatectl status Local time: 水 2021-03-24 05:08:34 EET Universal time: 水 2021-03-24 03:08:34 UTC RTC time: 水 2021-03-24 03:08:33 Time zone: Europe/Sofia (EET, +0200) ←タイムゾーンはEET NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: no Last DST change: DST ended at 日 2020-10-25 03:59:59 EEST 日 2020-10-25 03:00:00 EET Next DST change: DST begins (the clock jumps one hour forward) at 日 2021-03-28 02:59:59 EET 日 2021-03-28 04:00:00 EEST |
EET=UTC+2時間のため、朝の2時にパスワード有効期限が切れるはずです。
ここでは「3/24 2:00 ~ 3/25 1:59」の間にパスワード変更を実施して、パスワード有効期限は3日で設定します。
「3/27 2:00 ~ 3/28 1:59」が有効期限の最終日となるので、3/28 2:00に有効期限が切れるはずです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
[root@TEMPVM02 ~]# date 2021年 3月 24日 水曜日 07:02:43 EET ←「3/24 2:00 ~ 3/25 1:59」のパスワード変更と同義。 [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# passwd user2 ユーザー user2 のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。 [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# chage -M 3 user2 ←パスワード有効期限を3日に設定。 [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# chage -W 1 user2 ←パスワード変更警告メッセージは1日前から表示。 [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# chage -l user2 最終パスワード変更日 : 3月 24, 2021 ←「3/24 2:00 ~ 3/25 1:59」のパスワード変更と同義。 パスワード期限: : 3月 27, 2021 ←3/28の2:00に有効期限が切れるはず。 パスワード無効化中 : なし アカウント期限切れ : なし パスワードが変更できるまでの最短日数 : 0 パスワードを変更しなくてよい最長日数 : 3 パスワード期限が切れる前に警告される日数 : 1 [root@TEMPVM02 ~]# ~~~(3/28になりました)~~~ [root@TEMPVM02 ~]# date 2021年 3月 28日 日曜日 01:54:01 EET ←まだ2:00前なので有効期限は切れてない。 [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# ssh user2@172.31.0.31 user2@172.31.0.31's password: Warning: your password will expire in 0 days Last login: Sat Mar 27 02:43:18 2021 from 172.31.0.31 [user2@TEMPVM02 ~]$ ←ログインできた。 [user2@TEMPVM02 ~]$ exit ログアウト Connection to 172.31.0.31 closed. [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# date 2021年 3月 28日 日曜日 02:01:01 EET ←2:00を過ぎたので有効期限は切れた。 [root@TEMPVM02 ~]# [root@TEMPVM02 ~]# ssh user2@172.31.0.31 user2@172.31.0.31's password: You are required to change your password immediately (password aged) Last login: Sun Mar 28 01:54:25 2021 from 172.31.0.31 WARNING: Your password has expired. ←有効期限が切れた。 You must change your password now and login again! ユーザー user2 のパスワードを変更。 user2 用にパスワードを変更中 現在の UNIX パスワード: |
こちらも仮定通りとなりました。
まとめ
最後までお読みいただきありがとうございました。
簡単にまとめると、パスワード有効期限はUTCで実施されているということです。日付の切り替わりがUTCになっているということです。
なので、Linuxに設定しているタイムゾーンがUTCと何時間ずれているかが把握できていれば、有効期限が切れる(日付が切り替わる)時間を導き出せます。