尝试为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
软件包。