![没有密码创建的用户的行为就好像他有密码一样](https://linux22.com/image/53982/%E6%B2%A1%E6%9C%89%E5%AF%86%E7%A0%81%E5%88%9B%E5%BB%BA%E7%9A%84%E7%94%A8%E6%88%B7%E7%9A%84%E8%A1%8C%E4%B8%BA%E5%B0%B1%E5%A5%BD%E5%83%8F%E4%BB%96%E6%9C%89%E5%AF%86%E7%A0%81%E4%B8%80%E6%A0%B7.png)
在我的一个脚本中,我根据另一台计算机上的目录排列创建了一个用户。
问题是,这个没有密码创建的用户的行为就像他有一个一样:他有 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) 返回。默认是禁用密码。