如何配置linux以强制新用户在首次登录时更改其密码


11

我正在尝试在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

即使我注释不活动或将其设置为正值,帐户也会过期,但密码不会过期。

另外,我在机器上配置了PAM。

更新2

我在具有RHEL 6.2且未配置PAM的计算机上进行了检查。效果是一样的。


您应该尝试使用chage -d 0 {user-name}
哈斯图

有没有办法在useradd命令期间自动执行此操作,而没有其他命令或操作?
Mike_Lychkov

1
EXPIRE=0/etc/default/useradd应该做的工作。我读过你尝试过的。您可以添加的未注释行/etc/default/useradd吗?即使您未指定INACTIVE = -1,而是指定了其他值,或者您注释了该行,它也会被锁定?您可以指定帐户是否被锁定,即使通过命令行创建帐户也是如此。并且,如果您有其他疑问,请在单独的页面中发布,以解决不同的疑问。
哈斯图

1
使用adduser可以将chage命令放入/usr/local/sbin/adduser.local。您也可以将/ etc / shadow中的age字段直接设置为0。useradd是“低级实用程序”,旨在与其他命令结合使用。
mpez0

Answers:


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用户上实现该行为,那么我将获得影子软件包的SRPM,请在上方注释掉这些行,并在软件包上进行rpmbuild,然后进行修改。赢了!


1

为什么不将此添加到脚本中?

passwd -e username

如果您要做的只是第一次登录,这将起作用。该-e过期将立即使帐户密码失效,因此用户下次登录时被迫更新密码吗?(请参阅man passwd


并且,如果您正在寻找特定的解决方案,则可以尝试使用值为“ 0”的“ -M /-maxdays”开关。我不太了解chage,但是从手册页来看,这似乎很合理。
tniles

-1

自动:

更新此文件:

/etc/default/useradd

该文件包含详细信息,所有详细信息将应用到使用useradd命令创建到系统中的新用户。

只需在此文件中设置EXPIRE = 0的值,然后,每次创建新用户时,他们将被迫在下次登录时更改密码。

资料来源:GeekRide

现在,在终端中编辑该文件非常困难。因此,我使用以下命令将文件的权限更改为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。


如果您阅读以上注释,OP希望在useradd命令期间自动完成此操作。
2015年

不会发表其他任何评论,但这chmod -R 777 /非常愚蠢的事情!
PulseJet'3

@PulseJet是的,我知道回想起来,这个答案是很久以前的,所以请

@VaradMahashabde然后,我建议从您的答案中删除此类内容,因为对于下一个阅读它们的人来说,它们至少应该是理智的。
PulseJet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.