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再测试登录。

Typora