我正在尝试在 RHEL 6.6 上配置用户密码策略,并且我希望系统要求新创建的用户在首次登录时更改初始密码。
请注意,我尝试在 /etc/default/useradd 中将 EXPIRE 变量设置为 0,将 INACTIVE 设置为 -1,但这会导致新用户帐户在创建后过期。使用这些变量创建用户后,chage 命令的输出为:
# chage -l foo
Last password change : Feb 22, 2015
Password expires : May 23, 2015
Password inactive : never
Account expires : Feb 22, 2015
Minimum number of days between password change : 1
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
当我尝试以 foo 用户身份登录时,显示消息“您的帐户已过期。请联系您的系统管理员”。
但如果我打开“用户属性”窗口,选择“密码信息”选项卡并选中“下次登录时强制更改密码”,结果将符合我的预期。新用户将被要求更改密码。在这种情况下,chage 命令的输出将是:
# chage -l foo2
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
当我以 foo2 用户身份登录时,系统要求我更改密码。
那么,有没有办法配置系统以在创建时设置用户帐户参数,就像第二种情况一样?
更新
cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=0
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
即使我注释掉INACTIVE或者将其设置为正值,帐户也会过期,但密码不会过期。
另外,我在机器上配置了 PAM。
更新 2
我在装有 RHEL 6.2 且没有 PAM 配置的机器上进行了检查。效果是一样的。
答案1
由于您询问的是 RHEL6,我查看了 useradd 的源代码(作为“shadow”包的一部分提供)。在 useradd.c 中有一个名为 new_spent 的函数,它设置了一个新的影子密码条目。它在这里通过以下方式解决“创建时密码过期”问题:
if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;
所以...如果你设置零,它就会变成 -1。
该程序的作者专门编写了代码,以防止将老化设置为 0,因此如果您在 EXPIRE 的 /etc/default/useradd 参数中将其设置为 0,则不会有影响。(如果是我编写该代码,我会查看用户是否在命令中设置密码,然后允许过期,但不是我自己编写的......)
此外,上面建议您可以将脚本放入 /usr/local/sbin/adduser.local 以执行“chage”命令。这对于 Debian/Ubuntu 系统来说是个好建议,因为 useradd 是一个 perl 脚本,如果找到该文件,它确实会运行该文件,但在 RHEL 上,useradd 命令是一个 C 二进制文件。
如果我是你,并且我决心在 RHEL6 useradd 上实现该行为,我会获取 shadow 包的 SRPM,注释掉上面的那些行,然后在包上执行 rpmbuild,然后就可以了。成功了!
答案2
为什么不将其添加到脚本中?
passwd -e username
如果您只想进行首次登录,那么这种方法可行。-e
帐户密码会立即过期,因此下次登录时用户必须更新密码?(请参阅man passwd
)
答案3
自动的:
更新此文件:
/etc/default/useradd
该文件包含详细信息,包括使用 useradd 命令在系统中创建的新用户将应用哪些设置。
只需在此文件中设置 EXPIRE=0 的值,此后,每次创建新用户时,都会强制他们在下次登录时更改密码。
来源:极客骑行
现在,在终端中编辑该文件很困难。因此,我使用以下命令将文件的权限更改为 777:
chmod 777 /etc/default/useradd
并在 grub 中对其进行了编辑。
(谢谢Linux 命令。
检查我的 Ubuntu 12.04.5 VM。
手动的:
使用以下语法强制用户在下次登录 Linux 时更改其密码:
# chage -d 0 {user-name}
在此示例中,强制 tom 在下次登录时更改密码,请输入:
# chage -d 0 tom
-d 0:设置自 1970 年 1 月 1 日最后一次更改密码以来的天数。日期也可以用 YYYY-MM-DD 格式表示。通过将其设置为零,您将强制用户在首次登录时更改密码。
来源:nixCraft
纯粹的复制粘贴。确实如此。;)
在我的 Ubuntu 12.04.5 VM 上检查。