もくじ
前書き
Linuxにおいて、アカウント(ユーザ)のパスワード有効期限が切れる時間について書きたいと思います。
Linuxのユーザのパスワードに有効期限を設定することができますが、その有効期限は何時に切れるかご存じでしょうか。
23:59や00:00ではありません。
それを本記事では解説していきたいと思います。環境はCent OS 7を使用しています。
別件ですが、パスワード有効期限の設定方法と解除方法については、下の記事を見ていただければと思います。
タイムゾーンと日付の切り替わり
パスワード有効期限が切れる時間を説明するためには、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となっていることが確認できます。
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と何時間ずれているかが把握できていれば、有効期限が切れる(日付が切り替わる)時間を導き出せます。
コメント