在 OpenBSD 5.6 上,我需要为一些用户帐户设置默认密码。我希望用户在第一次使用 SSH 登录时必须更改默认密码。
在 CentOS 和 Debian 上,我可以使用 来执行此操作chage -d 0 $username
。
从 login.conf 手册看来,我应该能够在 OpenBSD 上完成同样的事情,例如:
usermod -f 1 $username
或者usermod -f "Jan 1 2015" $username
以这种方式设置确实会提示进行相应的更改userinfo $username
,但通过 SSH 以 $username 身份登录实际上并不会强制更改密码 - 它会很乐意打开 shell,而忽略了上面已将密码标记为非活动状态。
2000 年的一些帖子讨论了编写包装器登录 shell强制更改密码。话虽如此,考虑到usermod
和中明显的框架chpass
,这似乎是内置的,但没有像 Linux 等效项那样广泛记录。
BSD 专业人士可以解释一下这种传统方法吗?
答案1
根据login.conf (5)
,过期(又称“死”)密码的默认宽限期为 0。除非在 中设置该值/etc/login.conf
,否则如果当前系统日期大于用户在 中输入的密码的第 6 个字段,则用户无法登录来更改密码/etc/master.passwd
- 请参阅passwd (5)
。
为了解决这个问题,您需要指定一个日期,该日期以秒数表示,该日期位于您选择的宽限期内,例如 2 周,您也可以在 中配置/etc/login.conf
。要手动选择昨天的密码过期时间,我们可以使用:
# date -d yesterday +%s
1463597700
/etc/master.passwd
然后使用将该值插入字段 #6 vipw
。相关行将如下所示:
user:$2b$08$01234567890abcdef:1000:1000::1463597700:0:user:/home/user:/bin/ksh
按照您指示的方式运行 usermod ( usermod -f "May 17 2016" user
) 基本上会做相同的事情,但在两种情况下/etc/login.conf
也必须通过将以下内容附加到default:\
您的用户类别的相关部分来进行更改:
:password-dead=2w:\
:password-warn=2w:
第一行允许用户有两周的宽限期来更改密码;第二行将发出警告,告知用户的密码即将过期。如果密码过期,您的用户将看到类似以下内容:
WARNING: Your password has expired.
You must change your password now and login again!
Changing local password for user.
Old password:
New password:
Retype new password:
Connection to openbsd-server closed.
您还可以配置:passwordtime=7776000:
以/etc/login.conf
强制每 90 天进行一次额外的密码更改。请注意,如果您需要对用户密码复杂性进行额外检查,例如禁止重复使用密码,则应passwordqc
从软件包或其他密码检查程序中进行安装和配置。