パスワード有効期限が切れる時間について(Linux)

前書き

Linuxにおいて、アカウント(ユーザ)のパスワード有効期限が切れる時間について書きたいと思います。

Linuxのユーザのパスワードに有効期限を設定することができますが、その有効期限は何時に切れるかご存じでしょうか。

23:59や00:00ではありません

それを本記事では解説していきたいと思います。環境はCent OS 7を使用しています。

別件ですが、パスワード有効期限の設定方法と解除方法については、下の記事を見ていただければと思います。

【まとめ】Linuxユーザロックの種類と解除方法

タイムゾーンと日付の切り替わり

パスワード有効期限が切れる時間を説明するためには、Linuxのタイムゾーンと、日付の切り替わりについて理解する必要があります。

タイムゾーンについて

Linuxインストール時にも指定しますが、Linuxにはタイムゾーンがあります。「timedatectl」コマンドで確認します。

# 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に切れるのか、検証したいと思います。

# 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」の有効期限が切れるはずです。

[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になります。

# 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に有効期限が切れるはずです。

[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何時間ずれているかが把握できていれば、有効期限が切れる(日付が切り替わる)時間を導き出せます。

参考サイト

【設定確認から変更方法まで】Linuxでのタイムゾーンの扱い方

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

CAPTCHA