我知道这个问题已经被问过和回答过无数次了,但是我按照我能找到的每一个问题和答案都找不到,因此再次向社区提出这个问题,希望有人能发现我的问题。
安装和设置过程
我的操作系统是 Ubuntu 20.04.4 LTS。
我已经安装了 vsftpd 并更新了配置文件(/etc/vsftpd.conf),如下所示:
# Run standalone
listen=NO
# Enables listening on IPv6 sockets
listen_ipv6=YES
# Allow anonymous FTP
anonymous_enable=NO
# Allow local users to log in
local_enable=YES
# Enable any form of FTP write command.
write_enable=YES
# Default umask for local users is 022 to give uploaded files and folders the correct permissions
local_umask=022
# Activate directory messages - messages given to remote users when they go into a certain directory.
dirmessage_enable=YES
# Display directory listings in local time zone
use_localtime=YES
# Activate logging of uploads/downloads.
xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
# Display login banner:
ftpd_banner=Welcome to the FTP service!
# Specify an explicit list of local users to chroot() to their homedirectory
chroot_local_user=YES
# Set a secure chroot() jail at times vsftpd does not require filesystem
secure_chroot_dir=/var/run/vsftpd/empty
# This string is the name of the PAM service vsftpd will use
pam_service_name=vsftpd
# Encrypted connections
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
#
# Additional configuration
force_dot_files=YES
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
pasv_min_port=40000
pasv_max_port=50000
我已将用户添加到 /etc/vsftpd.userlist 文件中,并生成了证书,如下所示:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
vsftp 服务已启用并正在运行。
我已将 ufw 作为防火墙运行,并具有以下规则:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
20/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
8080:8099/tcp ALLOW Anywhere
40000:50000/tcp ALLOW Anywhere
5432/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
20/tcp (v6) ALLOW Anywhere (v6)
21/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
8080:8099/tcp (v6) ALLOW Anywhere (v6)
40000:50000/tcp (v6) ALLOW Anywhere (v6)
5432/tcp (v6) ALLOW Anywhere (v6)
我创建了我的 FTP 用户,如下所示:
sudo /sbin/useradd --home /ftp/<user>/in --password <password> --shell /bin/bash <user>
我在 /etc/ssh/sshd_config 文件中添加了一行,以禁止 FTP 用户使用 SSH,如下所示,然后重新启动 sshd 服务
DenyUsers <user>
我已更新 FTP 文件夹的权限,如下所示:
sudo chown <user>:<user> /ftp/<user>/in/<folder-name>
sudo chmod 750 /ftp/<user>/in/<folder-name>
当我尝试使用 FTP 用户连接到 FTP 时,出现“530 登录不正确”的情况。
Status: Disconnected from server
Status: Connecting to <ip>:21...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: TLS connection established.
Command: USER affinity
Response: 331 Please specify the password.
Command: PASS ****************
Response: 530 Login incorrect.
Error: Critical error: Could not connect to server
以及 /var/log/vsftpd.log 文件:
Mon Jun 6 19:10:51 2022 [pid 8417] CONNECT: Client "::ffff:172.24.8.13"
Mon Jun 6 19:10:52 2022 [pid 8409] [<user>] FAIL LOGIN: Client "::ffff:172.24.8.13"
Mon Jun 6 19:10:54 2022 [pid 8417] DEBUG: Client "::ffff:172.24.8.13", "Control connection terminated without SSL shutdown."
非常有趣且绝对值得一提的是,我在 Debian 10 Linux 服务器上执行了与上面列出的完全相同的过程,运行正常。但是,我在两台不同的 Ubuntu 服务器上复制了此过程,都出现了相同的错误。
调试
我尝试更新 vsftpd.conf 以设置“ssl_enable=NO”并注释掉下面的相关配置行,然后重新启动 vsftpd,但没有成功。
我尝试在启用和禁用 ufw 防火墙的情况下连接 FTP 用户,但两次都出现相同的 530 错误。
我已经检查过 FTP 用户不在 /etc/ftpusers 中。
我已检查 FTP 用户是否在 /etc/passwd 中
图像:/etc/passwd 文件内容显示 FTP 用户使用 /bin/bash shell
我尝试更新 vsftpd.conf 文件,将以下行从 vsftpd 更改为 ftp,如下所示这个帖子,但没有成功。我已经将其恢复为 vsftpd。
pam_service_name=ftp
我已经检查 FTP 用户的登录 shell(/bin/bash)是否在 /etc/shells 中。
我尝试过逐行注释掉每一行,以及 PAM 文件 (/etc/pam.d/vsftpd) 中的所有行,并彻底删除 PAM 文件,每次都重新启动 vsftpd,但都无济于事。以下是 PAM 文件当前包含的内容:
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
我还尝试用已接受答案给出的建议替换 PAM 文件本文,但没有成功。我已经将 PAM 文件恢复为上述配置。
根据同一篇文章,我尝试将“seccomp_sandbox=NO”添加到 vsftpd.conf,但没有成功。
我已经尝试从 /etc/ssh/sshd_config 中删除 deniedUsers 行以防万一,但并没有什么效果。
作为最后的手段,我卸载并重新安装了 vsftpd,如下所示本文,但这没有帮助。
sudo apt-get remove vsftpd
sudo rm /etc/pam.d/vsftpd
sudo apt-get install vsftpd
每次尝试更改配置后,我都会重新启动服务以确保更改生效!
这是我浏览过的一些帖子的列表,但这绝不是详尽的列表(我已经浏览了几天了)
- https://serverfault.com/questions/964773/vsftpd-error-530-login-incorrect-and-various-others-when-trying-other-solution
- vsftpd:530 登录不正确
- https://serverfault.com/questions/364935/vsftp-login-errors-530-login-incorrect
- vsftpd 登录不正确问题
- 530 登录不正确 vsftpd
我已经尽可能多地问问题,回答问题,现在我已经没有主意了。如果有人能帮助我,我将不胜感激!
答案1
正如@steeldriver 指出的那样,我需要设置密码的加密版本,而不是以自由文本形式设置。
换句话说,我需要做的就是运行sudo passwd <user>
,然后在提示时将密码粘贴到 shell 中。
答案2
对我来说,解决方案是 /etc/pam.d/vsftpd 中的某些文件包含对指纹的要求...因此这无法工作,因为我的 ftp 用户无法输入或注册指纹