useradd不encryption/ etc / shadow中的密码

尝试为vsftpd创build新的FTP用户时,我偶然发现了这个问题。 用下面的命令创build一个新的用户,并试图用FileZillalogin,我会得到一个“不正确的密码”错误。

useradd f -p pass -d /home/f -s /bin/false 

这样做后, / etc / shadow包含

 f:pass:1111:0:99:2::: 

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

 passwd f 

/ etc / shadow包含

 f:$1$U1c5vVwg$x5TVDDDmhi0a7RWFer6Jn1:1111:0:99:2::: 

看来encryption发生在我运行passwd时 ,但不在useradd上

重要的是这样做后,我可以用完全相同的凭据login到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 

为什么当我通过-p pass给useradd时它不起作用? 我需要做些什么来使它工作?

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

stringpass确实符合/etc/shadow散列密码字段的格式标准,但是没有真正的密码散列到该string。 其结果是,对于所有意图和目的,该帐户将performance为具有密码,但您尝试使用的任何密码将被拒绝,因为不是正确的密码。

请参阅man useradd或useradd文档 :

-p , – 密码密码

encryption的密码,由crypt(3)返回。 默认是禁用密码。

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

您应该确保密码尊重系统的密码策略。

man useradd :

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

你应该传递一个哈希密码给它。
不是纯文本密码。

useradd期望您传递密码的散列,而不是密码本身。 您可以在您的命令中使用以下变体向useradd命令提供散列密码:

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

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

 mkpasswd --method=help 

为了避免在命令行传递密码,把密码放在一个文件(使用编辑器,而不是使用echo或类似的),并做到这一点:

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

这将在命令行传递哈希密码,但不是明文密码。

mkpasswd带有expect软件包。