Ubuntu 22.04支持多种FTP服务器,最常用的是:
本教程以vsftpd为例。
# 更新包列表
sudo apt update
# 安装vsftpd
sudo apt install vsftpd
# 查看服务状态
sudo systemctl status vsftpd
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
sudo nano /etc/vsftpd.conf
# 允许本地用户登录
local_enable=YES
# 允许上传文件
write_enable=YES
# 本地用户上传文件的umask
local_umask=022
# 允许匿名用户访问(可选)
anonymous_enable=NO
# 禁止匿名用户上传(如果启用匿名访问)
# anon_upload_enable=NO
# anon_mkdir_write_enable=NO
# 使用本地时间而不是GMT
use_localtime=YES
# 日志文件位置
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
# 被动模式设置(用于防火墙/NAT后)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
# 限制用户在其主目录(重要安全设置)
chroot_local_user=YES
allow_writeable_chroot=YES
# 用户列表控制
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO # 仅允许列表中的用户
# 创建用户(不创建主目录)
sudo useradd -m ftpuser
# 设置密码
sudo passwd ftpuser
# 如果需要,将用户添加到vsftpd允许列表
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
# 将现有用户添加到允许列表
echo "your_username" | sudo tee -a /etc/vsftpd.userlist
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.pem \
-out /etc/ssl/private/vsftpd.pem
# 启用SSL
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
# SSL配置
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
# 允许FTP端口(20,21)
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
# 允许被动模式端口范围
sudo ufw allow 40000:50000/tcp
# 启用防火墙(如果未启用)
sudo ufw enable
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
# 本地测试
ftp localhost
# 或使用lftp(功能更全)
sudo apt install lftp
lftp ftp://ftpuser@localhost
ftp your_server_ip
# 或
lftp ftp://username@your_server_ip
ftp://your_server_ip# 创建目录并设置权限
sudo mkdir /home/ftpuser/files
sudo chown ftpuser:ftpuser /home/ftpuser/files
# 在配置文件中限制用户目录
# local_root=/home/$USER/files
# 限制本地用户最大带宽(KB/s)
local_max_rate=102400
# 限制匿名用户最大带宽(KB/s)
anon_max_rate=51200
max_clients=50
max_per_ip=5
# 查看vsftpd日志
sudo tail -f /var/log/vsftpd.log
# 查看系统日志
sudo journalctl -u vsftpd
连接被拒绝
# 检查服务状态
sudo systemctl status vsftpd
# 检查端口监听
sudo netstat -tulpn | grep :21
认证失败
# 检查用户是否在允许列表
sudo cat /etc/vsftpd.userlist
# 检查用户主目录权限
sudo ls -ld /home/username
无法上传文件
# 检查目录权限
sudo chmod 755 /home/username
sudo chown username:username /home/username
sudo apt install fail2ban
如果不需要传统FTP,建议使用SFTP:
# SSH已包含SFTP功能
# 确保SSH服务器已安装
sudo apt install openssh-server
# 配置SFTP限制用户访问
sudo nano /etc/ssh/sshd_config
添加以下配置:
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
这个教程覆盖了从安装到配置的完整过程,你可以根据自己的需求调整配置参数。