FTP(File Transfer Protocol)是用于在网络上进行文件传输的标准协议。它使用TCP端口20(数据连接)和21(控制连接)。
sudo apt update
sudo apt install vsftpd
# 匿名用户配置
anonymous_enable=NO # 禁止匿名登录
anon_root=/var/ftp # 匿名用户根目录
# 本地用户配置
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许写操作
local_umask=022 # 文件权限掩码
# 目录限制
chroot_local_user=YES # 将用户限制在其主目录
allow_writeable_chroot=YES # 允许可写chroot目录
# 连接设置
listen=YES # 以独立模式运行
listen_port=21 # FTP端口
max_clients=50 # 最大客户端数
max_per_ip=5 # 每个IP最大连接数
# 超时设置
idle_session_timeout=600 # 会话超时(秒)
data_connection_timeout=120 # 数据连接超时
# 日志设置
xferlog_enable=YES # 启用传输日志
xferlog_file=/var/log/vsftpd.log
# 创建系统用户
sudo useradd -m ftpuser
sudo passwd ftpuser
# 或创建仅FTP用户(禁止shell登录)
sudo useradd -m -s /sbin/nologin ftpuser
# 被动模式设置
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
pasv_address=your_server_ip
SSL/TLS加密配置:
# SSL设置
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
# 证书路径
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
用户限制列表:
# 创建允许/禁止用户列表文件
echo "ftpuser" | sudo tee -a /etc/vsftpd.user_list
# 配置文件添加
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO # 只允许列表中的用户
sudo apt install proftpd
ServerName "My FTP Server"
ServerType standalone
DefaultServer on
# 端口设置
Port 21
# 用户限制
User proftpd
Group proftpd
# 超时设置
TimeoutIdle 600
TimeoutLogin 120
# 目录限制
<Directory /var/ftp>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
# vsftpd安全配置
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
hide_ids=YES
tcp_wrappers=YES
# 生成自签名证书
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.crt
# 开放FTP端口
sudo ufw allow 21/tcp
sudo ufw allow 40000:40100/tcp # 被动模式端口范围
# 基本连接
ftp ftp.example.com
# 使用lftp(支持被动模式)
lftp ftp://username:password@ftp.example.com
# 使用curl
curl -u username:password ftp://ftp.example.com/
# 检查服务状态
sudo systemctl status vsftpd
# 检查端口监听
sudo netstat -tulpn | grep :21
被动模式失败:
# 确保配置正确的公网IP
pasv_address=your_public_ip
pasv_min_port=40000
pasv_max_port=40100
# vsftpd日志
sudo tail -f /var/log/vsftpd.log
# 系统日志
sudo journalctl -u vsftpd
# 增加并发连接
max_clients=200
max_per_ip=10
# 优化传输
async_abor_enable=YES
# 使用sendfile加速
use_sendfile=YES
# 调整缓冲区
session_send_buffer=65536
session_recv_buffer=65536
#!/bin/bash
# FTP服务器自动部署脚本
set -e
echo "开始安装vsftpd..."
apt update
apt install -y vsftpd
echo "备份原始配置文件..."
cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
echo "应用新配置..."
cat > /etc/vsftpd.conf << EOF
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
EOF
echo "重启服务..."
systemctl restart vsftpd
systemctl enable vsftpd
echo "配置防火墙..."
ufw allow 21/tcp
ufw allow 40000:40100/tcp
echo "FTP服务器安装完成!"
FTP服务器搭建需要注意:
安全性:禁用匿名访问、使用chroot、启用SSL 网络配置:正确配置被动模式和防火墙 权限管理:合理设置用户权限和目录访问控制 监控维护:定期检查日志,更新软件对于现代应用,建议考虑更安全的替代方案如SFTP(SSH File Transfer Protocol)或FTPS(FTP over SSL)。