目标
我的目标是安装一个 FTP 服务器(vsftpd),以便我可以向我的 MariaDB 添加用户/密码进行验证。
我一直在使用这个指南: https://www.howtoforge.com/virtual-hosting-with-vsftpd-and-mysql-on-debian-squeeze 以及其他一些人尝试解决我的问题。
问题
在尝试使用 FileZilla 进行连接时,它显示ECONNREFUSED' Connection refused by server
我的服务器似乎根本没有接受连接。
我安装的软件包有:vsftpd
、、libpam-mysql
和MariaDB
如果我只是丢失了一个包裹,请也告诉我,因为这可能是一个简单的修复!
玛拉雅数据库
我的 MariaDB 绝对设置正确,因为我可以查询其他应用程序。我确实有一个名为 vsftpd 的数据库、名为 accounts 的表以及包含两个示例用户的 id、用户名、密码列。
我确实运行了以下命令来授予 vsftpd 权限:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;
我保留密码为 ftpdpass 只是为了尝试让事情运行,但如果我真的可以正确安装它,我会稍后返回并更改它。
vsftpd
我/etc/vsftpd.conf
的如下:
listen=YES
anonymous_enable=NO
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
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
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_user_conf
libpam-mysql
我/etc/pam.d/vsftpd
的如下:
auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
如下所述,我暂时将密码保留为 ftpdpass,直到我找到可行的解决方案
额外的
完成所有这些操作后,我确实重新启动了 vsftpd,但仍然收到拒绝连接的情况。也许更有经验的用户有办法让我检查哪里出了问题?请务必询问我是否需要提供更多信息。非常感谢所有帮助!
另请注意,如果有任何区别,这是在运行 Raspbian / Debian 7 的 Raspberry Pi 上运行的。我刚刚进行了全新安装。
答案1
我设法解决了这个问题。对于将来看到这个问题的人来说,有一件事要注意。如果你想看看 vsftpd 是否真的在运行和监听,请运行以下命令:
netstat -tlpm
您应该vsftpd
在列表中看到正在监听端口 21!
如果没有,则说明它没有监听/运行。对我来说,这是因为我的/etc/vsftpd.conf
程序出了问题。如果 vsftpd 的参数不正确(即输入错误),它根本就不会运行。无论哪种情况,我的新程序/etc/vsftpd.conf
如下:
listen=YES
anonymous_enable=NO
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
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
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_user_conf
pasv_enable=YES
allow_writeable_chroot=YES
我遗漏的关键几行是:
pasv_enable=YES
allow_writeable_chroot=YES
这解决了我的问题,使我可以连接。
解决了不同的问题
我想将此注释添加到遇到同样问题的其他人中。成功连接后,我希望我的用户能够编辑他们的主文件夹。为了做到这一点,我添加新用户的流程如下:
- 将用户名、密码插入我的数据库:INSERT INTO accounts (username,pass) VALUES('newuser',PASSWORD('password'));
*请注意,在密码周围使用 PASSWORD() 非常重要,否则连接将无法起作用!
为用户创建新目录并确保 vsftpd 拥有该目录的所有权
mkdir /home/vsftpd/newuser
chown -R vsftpd /home/vsftpd
chmod -R u+rX /home/vsftpd
现在以新用户身份连接即可工作,并具有对主目录的写/读访问权限!