useradd 不加密 /etc/shadow 中的密码

Bad*_*one 21 useradd password centos ftp shadow

在尝试为 vsftpd 创建新的 FTP 用户时,我偶然发现了这个问题。使用以下命令创建新用户并尝试使用 FileZilla 登录后,我会收到“密码不正确”错误。

useradd f -p pass -d /home/f -s /bin/false
Run Code Online (Sandbox Code Playgroud)

这样做之后,/etc/shadow包含

f:pass:1111:0:99:2:::
Run Code Online (Sandbox Code Playgroud)

一旦我运行以下命令并提供相同的通行证

passwd f
Run Code Online (Sandbox Code Playgroud)

/etc/shadow包含

f:$1$U1c5vVwg$x5TVDDDmhi0a7RWFer6Jn1:1111:0:99:2:::
Run Code Online (Sandbox Code Playgroud)

似乎在我运行passwd时会发生加密,但不会在useradd 时发生

重要的是,在执行此操作后,我可以使用完全相同的凭据登录到 FTP。

我使用 CentOS 5.11,vsftpd 用于 FTP,FileZilla 用于 FTP 访问

/var/log/secure包含:

Dec 17 useradd[644]: new group: name=f, GID=511
Dec 17 useradd[644]: new user: name=f, UID=511, GID=511, home=/home/f, shell=/bin/false
Run Code Online (Sandbox Code Playgroud)

为什么当我传递-p pass给 useradd时它不起作用?我需要做什么才能让它发挥作用?

kas*_*erd 44

这是按预期工作的。如果您想使用该useradd命令设置密码,您应该将密码的散列版本提供给useradd.

该字符串pass确实满足 中散列密码字段的格式标准/etc/shadow,但该字符串没有实际的密码散列。结果是,出于所有意图和目的,该帐户将表现为拥有密码,但您尝试用于访问它的任何密码都将被拒绝,因为它不是正确的密码。

请参阅man useradduseradd 文档

-p,--password 密码

crypt(3)返回的加密密码。默认是禁用密码。

注意:不建议使用此选项,因为列出进程的用户将可以看到密码(或加密密码)。

您应该确保密码符合系统的密码策略。


fak*_*ker 32

man用户地址

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

您应该将散列密码传递给它。
不是明文密码。


Den*_*son 16

useradd期望您将密码的哈希值传递给它,而不是密码本身。您可以对命令使用以下变体来为命令提供散列密码useradd

useradd f -p "$(mkpasswd --method=sha-512 'pass')" -d /home/f -s /bin/false
Run Code Online (Sandbox Code Playgroud)

要找出可用的方法,请使用:

mkpasswd --method=help
Run Code Online (Sandbox Code Playgroud)

为了避免在命令行上传递密码,将密码放在一个文件中(使用编辑器而不是使用echo或类似的)并执行以下操作:

useradd f -p "$(mkpasswd --method=sha-512 --password-fd=0 < filename)" -d /home/f -s /bin/false
Run Code Online (Sandbox Code Playgroud)

这将在命令行上传递散列密码,但不会传递明文密码。

mkpasswdexpect包提供。

  • **请注意,这会通过各种内核接口临时公开密码(任何进程都可以读取任何其他进程的命令行),并可能导致它通过 $HISTORY 或类似机制以纯文本形式保存到磁盘. (9认同)
  • 不要使用MD5!使用 SHA-2 (2认同)
  • 绝对是丹尼斯,它好多了,但密码仍然以纯文本形式出现在磁盘上。在某些情况下和某些威胁模型下,这可能是一个真正的问题。它不是*必须*。 (2认同)