man 5 shadow
给出每行第三个字段的描述:
上次更改密码的日期,表示为自 1970 年 1 月 1 日以来的天数。
值0有特殊含义,即用户下次登录系统时应更改密码。
空字段表示密码时效功能已禁用。
这是指 UTC 时间还是当地时区时间?特别是,如果我想使用类似的方法计算可比较的数字$(( $(date +%s) / 86400 ))
,我是否需要传递date
该-u
选项?
答案1
在大多数用法中,“自 1970 年以来的秒数”时间戳被专门定义为 UTC。特别是,您可能会注意到date +%s
给出的结果与 相同date -u +%s
。
在影子密码实用程序中设置的相关行是“
nsp->sp_lstchg = (long) time ((time_t *) 0) / SCALE;
这将使其成为 UTC。 SCALE 被定义为 86400(除了通过特定的 ifdef,我无法完全追踪是什么情况导致定义的)
答案2
“天”表示 86,400 秒间隔。 “1970 年 1 月 1 日”表示 00:00:00 UTC。这基本上是标准的UNIX时间,也称为 POSIX 时间。