我想在 Ubuntu 22.04.4 中设置一个 VSFTP 服务器,并使用 MySQL 作为后端来存储用户。
我用过本指南进行设置(它适用于 CentOS,但除了上面的部分之外,pam_mysql.so
它适用于 Ubuntu)。
这是我的设置:
- /etc/vsftpd.conf
anonymous_enable=NO
pasv_addr_resolve=YES
pasv_address=ftp.company.com
pasv_min_port=40000
pasv_max_port=41000
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
#user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
pasv_enable=YES
- /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_mysql.so user=vsftpd passwd=mypassword host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3
account required pam_mysql.so user=vsftpd passwd=mypassword host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3
- MySQL 账户表
mysql> select * from accounts;
+----+-----------------------------------+----------------------------------+
| id | username | pass |
+----+-----------------------------------+----------------------------------+
| 1 | [email protected] | [passwordhash] |
+----+-----------------------------------+----------------------------------+
1 row in set (0.00 sec)
在 virtualbox 中的本地测试服务器上一切正常,但是当我在生产服务器上使用相同的配置时,使用 winSCP 连接到 FTP 服务器时出现此错误:
OOPS: cannot read user list file:/etc/vsftpd.user_list
因此显然 vsftp 没有使用 mysql 连接来检索用户,而是正在寻找缺失的用户列表文件。
到目前为止我已经检查了以下内容:
- 已验证
libpam-mysql
并安装 mysql-client - 确保我能够使用 vsftpd 凭据连接到 mysql db
- 禁用 iptables,这样就不会干扰与数据库的连接
但到目前为止我还没能解决这个问题。令人沮丧的是,它在我的 VirtualBox 实例上运行正常,但我看不出这个实例和生产实例之间有什么区别。
请问我该如何排除vsftpd
&之间的连接故障?MySQL
我的生产环境:
- Ubuntu 22.04.4
- MySQL 8.0.36
- vsftpd 3.0.5
- iptables v1.8.7