sh - 即使密码正确,也无法登录 ubuntu 用户

目标:使用 shell 脚本自动创建用户帐户。

脚本:

#!/bin/bash
USERNAME="catty"
PASSWORD="$USERNAME@123"

useradd -m $USERNAME -p $PASSWORD

我如何在终端中运行脚本:sudo sh Scripts/test.sh

会发生什么:用户帐户已成功创建

问题:当我在运行脚本后尝试登录并输入正确的密码(在这种情况下为“catty@123”)时,无法进行身份验证。

所以我用 cat 检查了 /etc/shadow。我注意到我的密码如预期的那样是散列形式,但是 catty 的不是。然后,我手动更改了她的密码,然后再次检查了文件,它被散列并允许我成功登录。

为什么会发生这种情况,解决方案是什么?

回答1

man 8 useradd -

-p, --password PASSWORD
   The encrypted password, as returned by crypt(3). 
   The default is to disable the password.

这意味着 useradd 期望提供给 -p 的参数是密码的散列形式,并将其添加到 /etc/shadow 而不更改它。

这就是密码未散列存储在 /etc/shadow 文件中的原因。这也是您无法登录的原因,因为 login 程序在将您输入的密码与 /etc/shadow 中的条目匹配之前对其进行哈希处理,并且 kitty@123 的哈希版本与 kitty@123 不匹配。

解决办法是什么?

AFAIK 没有现成的 CLI 程序可以使用 crypt(3) 加密字符串。

附言我现在不在类似 UNIX 的机器上,所以我无法对此进行测试,但您可以尝试将密码通过管道传送到 passwd 并查看是否有效。

echo "$PASSWORD" | passwd

相似文章

随机推荐

最新文章