更新

更新

我正在尝试在 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 上检查。

相关内容