Debian安装配置Pure-FTPd,及530错误处理
安装Pure-FTPd:
apt install pure-ftpd
启动Pure-FTPd:
systemctl enable pure-ftpd
配置文件路径:
/etc/pure-ftpd/pure-ftpd.conf
如果需要自己创建运行用户,可使用以下命令创建:
groupadd www
useradd -s /sbin/nologin -g www www
由于Nginx和PHP默认的运行用户都是www-data,所以推荐Pure-FTPd也使用这个用户。
添加FTP账号:
pure-pw useradd ftpuser -u www-data -d /home/wwwroot/www.example.com -m
以上示例中,ftpuser为自定义FTP账号名称,-m参数是为了将信息写入数据库。也可以执行以下命令写入:
pure-pw mkdb
修改密码:
pure-pw passwd ftpuser -m
确保FTP目录所属用户和用户组正确:
chown -R www-data:www-data /home/wwwroot/www.example.com
530错误解决方法
530错误分两种情况,以下提示这种情况一般与账号密码错误有关:
530 Login authentication failed
如果确保在FTP工具输入的账号密码正确,可以做以下检查:
创建账号时是否忘了加-m参数?执行以下命令将账号信息写入数据库:
pure-pw mkdb
建立PureDB链接:
cd /etc/pure-ftpd/auth/
ln -s ../conf/PureDB 50PureDB
ls -l
此时应该看到如下输出:
50PureDB -> ../conf/PureDB
65unix -> ../conf/UnixAuthentication
70pam -> ../conf/PAMAuthentication
另一种530错误提示信息如下:
530 Sorry, but I can't trust you
这种情况可能与MinUID的值有关,该参数限制ID小于此值的用户不能登录。查看www-data用户的ID:
id www-data
如果将MinUID的值修改为小于www-data用户的ID也是可行的,但出于安全考虑,应该将MinUID的值设得大一些,而将www-data用户及用户组的ID修改得更大一些。
查看所有用户:
getent passwd
只查看用户的ID:
getent passwd | awk -F: '{print $3}'
MinUID的值应该至少比拥有Shell权限的用户的ID要高,确保万无一失,我直接设置为了1000
如果在Pure-FTPd配置文件pure-ftpd.conf中设置此值无效,需修改以下文件:
vi /etc/pure-ftpd/conf/MinUID
修改www-data用户和用户组的ID需要先停用Nginx和PHP:
systemctl stop nginx
systemctl stop php-fpm
Debian 10使用APT安装的PHP7.3使用以下命令停用:
/etc/init.d/php7.3-fpm stop
查看www-data用户进程:
ps -u www-data
结束相关进程:
kill -9 PID
修改用户ID:
usermod -u 10000 www-data
修改用户组ID:
groupmod -g 10000 www-data
注意,设置的ID号不能被其他用户已占用,且大于MinUID的值。
修改用户和用户组ID后,还要修改FTP账号所属用户:
vi /etc/pure-ftpd/pureftpd.passwd
将pureftpd.passwd中旧的用户和用户组ID修改,然后写入数据库:
pure-pw mkdb
当然,也可以直接删除旧账号重新添加:
pure-pw userdel ftpuser
重启系统:
reboot
防火墙放行端口
如果还未安装UFW,执行以下命令安装:
apt install ufw
放行SSH端口:
ufw allow 22/tcp
放行FTP连接端口:
ufw allow 21/tcp
放行FTP被动端口:
ufw allow 39000:40000/tcp
如果未放行被动端口会导致FTP能连接但不能传输数据,FTP工具中表现为不显示目录列表。
修改Pure-FTPd配置文件pure-ftpd.conf中PassivePortRange的值:
PassivePortRange 39000 40000
重启Pure-FTPd:
systemctl restart pure-ftpd
如果在配置文件中设置了被动端口仍然不显示目录列表,可以先使用FTP工具连接,然后执行以下命令查看Pure-FTPd监听的端口:
netstat -tulnp | grep ftp
如果看到被动端口不在配置文件中指定的范围,说明配置文件设置无效,需要使用以下方式指定被端口范围:
echo "39000 40000" > /etc/pure-ftpd/conf/PassivePortRange
重启Pure-FTPd再测试登录。