没有密码创建的用户的行为就好像他有密码一样

没有密码创建的用户的行为就好像他有密码一样

在我的一个脚本中,我根据另一台计算机上的目录排列创建了一个用户。

问题是,这个没有密码创建的用户的行为就像他有一个一样:他有 sudo 权限,但我根本不能 sudo,因为它要求输入一个密码,不存在。我知道我可以简单地将他设置为 root,但设计的系统必须在没有本地 root 特权用户干预的情况下工作。

我也无法以相关用户的身份使用 passwd,因为 passwd 要求我提供同样不存在的密码。

我认为这是预期的行为,但是最终的默认密码是什么以及我可以做什么来规避这个问题?

编辑:这是脚本的作用:

1:它从我们的 ssh 网关计算机同步应在 /opt/sshgw/home (sshgw 表示 ssh 网关)中创建或更新的用户的主目录

2:它删除运行脚本的计算机的每个用户的所有授权密钥

3:它从wheel组中删除每个用户并且执行 usermod -L(我不是脚本的作者,我真的不知道他为什么锁定帐户,但无论如何。)尽管请记住,此时仅现存的用户被修改。

4:如果从 sshgw 检索到用户并且本地计算机上不存在这些用户,则它会创建用户,然后,如果指定,它们将被添加到 Wheel 组中。然后它将他们的公钥添加到他们正确的主目录中最后执行 usermod -U

用户在/etc/passwd中的输入是正常的。

调用 passwd 时,用户会以这种方式询问其当前密码(请注意,对于刚刚创建的没有密码的用户来说,该密码不能存在):

[splatpope@monitor sshgw]$ passwd
Changing password for user splatpope.
Changing password for splatpope.
(current) UNIX password:

我猜罪魁祸首是usermod -U。

答案1

默认情况下,用户被创建为锁定帐户。应包含密码散列的字段/etc/shadow将包含!!.当帐户被锁定时,该帐户仅对 root 可用(root 可以 su 但不允许登录)。如果您“解锁”帐户(仅删除帐户),!!您将可以更改密码。

[root@test ~]# su - test
[test@test ~]$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
[test@test ~]$ exit
logout
[root@test ~]# passwd -u test
Unlocking password for user test.
passwd: Warning: unlocked password would be empty.
passwd: Unsafe operation (use -f to force)
[root@test ~]# passwd -u test -f
Unlocking password for user test.
passwd: Success
[root@test ~]# su - test
[test@test ~]$ passwd
Changing password for user test.
New password:

答案2

尤尼克斯的回答已经涵盖了这样一个事实没有默认密码。

要在创建帐户时为新创建的用户提供密码,您可以执行以下操作:

useradd ... -p $(mkpasswd $Password) ... user_name

这假设:

  • 您要提供给该用户的密码位于$Password变量中。
  • 您有mkpasswd用于加密密码的实用程序(在whois我的 Debian 盒子上的软件包中)。

不过,默认行为是禁用帐户。引用自useradd(8)

-p, --password 密码
加密密码,由 crypt(3) 返回。默认是禁用密码。

相关内容