我在尝试为 vsftpd 创建新的 FTP 用户时偶然发现了这个问题。使用以下命令创建新用户并尝试使用 FileZilla 登录时,我收到“密码错误”错误。
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:::
似乎当我运行时会发生加密密码,但不用户添加
重要的是,完成此操作后,我可以使用完全相同的凭据登录 FTP。
我使用 CentOS 5.11,vsftpd 用于 FTP,FileZilla 用于 FTP 访问
/var/log/安全包含:
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时它不起作用?我需要做什么才能让它工作?
答案1
这按预期工作。如果您想使用命令设置密码useradd
,您应该将密码的哈希版本提供给useradd
。
该字符串pass
确实满足 中哈希密码字段的格式标准/etc/shadow
,但没有实际密码哈希到该字符串。结果是,无论出于何种目的,该帐户都将表现为拥有密码,但您尝试用来访问该帐户的任何密码都将被视为不正确的密码而被拒绝。
参见man useradd
或useradd 文档:
-p
,--password
密码返回的加密密码地穴(3). 默认是禁用密码。
注意:不建议使用此选项,因为列出进程的用户将看到密码(或加密密码)。
您应该确保密码符合系统的密码策略。
答案2
man
用户添加:
-p, --password PASSWORD
The encrypted password, as returned by crypt(3). The default is to
disable the password.
你应该向其传递一个散列密码。
而不是纯文本密码。
答案3
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
。