首先需明确FTP服务使用的端口(默认FTP端口为21,被动模式需额外开放40000-50000等范围端口)是否被其他进程占用。常用命令如下:
sudo ss -tuln(推荐,性能优于netstat);sudo ss -tuln | grep 21 或 sudo lsof -i :21(需安装lsof,命令:sudo apt install lsof)。LISTEN状态且端口为21,则说明该端口已被占用。若端口被占用,需找到占用进程的PID(进程ID)和名称,以便后续处理:
sudo lsof -i :21命令,输出结果中PID列表示进程ID,COMMAND列表示进程名称(如vsftpd、pure-ftpd或其他FTP服务)。根据进程名称和PID,选择以下方式停止进程:
pure-ftpd),可直接停止该服务:sudo systemctl stop pure-ftpd # 替换为实际的FTP服务名称
sudo systemctl disable pure-ftpd # 可选:禁止开机自启
sudo kill -9 <PID> # 替换为实际的PID
若需一次性杀死所有同名进程,可使用:sudo killall <进程名称> # 如sudo killall pure-ftpd
```。
若无法停止占用端口的进程(如系统关键服务),可修改FTP Server的监听端口(以vsftpd为例):
sudo nano /etc/vsftpd.conf;#port=21(默认注释),取消注释并修改为未被占用的端口(如port=2121);vsftpd服务:sudo systemctl restart vsftpd。若更改了FTP端口,需同步更新防火墙规则,允许新端口通过:
sudo ufw allow <新端口>/tcp # 如sudo ufw allow 2121/tcp
sudo ufw reload # 重新加载规则
sudo firewall-cmd --add-port=<新端口>/tcp --permanent # 永久开放
sudo firewall-cmd --reload # 重载规则
sudo iptables -A INPUT -p tcp --dport <新端口> -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4 # 保存规则(Ubuntu需安装iptables-persistent)
```。
sudo ss -tuln | grep <新端口>,确认无其他进程占用;通过以上步骤,可有效解决Ubuntu FTP Server的端口冲突问题。需注意,修改默认端口后,客户端连接时需指定新端口,避免连接失败。