vsftpd(Very Secure FTP Daemon)。以下是完整流程:
一、安装vsftpd
# 1. 更新系统包
sudo yum update -y
# 2. 安装vsftpd
sudo yum install vsftpd -y
# 3. 启动服务并设置开机自启
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
# 4. 检查服务状态
sudo systemctl status vsftpd
二、配置vsftpd
1. 备份原始配置文件
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
2. 编辑配置文件(使用vim或nano)
sudo vim /etc/vsftpd/vsftpd.conf
3. 关键配置项(按需求修改)
# 匿名访问设置
anonymous_enable=NO # 禁止匿名登录
# 本地用户设置
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许写入操作
local_umask=022 # 文件权限掩码
# 目录限制
chroot_local_user=YES # 将用户限制在其主目录
allow_writeable_chroot=YES # 允许chroot目录可写
# 日志设置
xferlog_enable=YES # 启用传输日志
xferlog_file=/var/log/vsftpd.log
# 端口设置
listen=YES # 以独立模式运行
listen_ipv6=NO # 禁用IPv6
# 连接限制
max_clients=50 # 最大连接数
max_per_ip=5 # 每IP最大连接数
# 被动模式设置(重要)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的服务器公网IP # 需修改为实际IP
三、创建FTP用户
方法A:使用系统用户(简单)
# 1. 创建用户并设置主目录
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
# 2. 设置密码
sudo passwd ftpuser
# 3. 设置目录权限
sudo chmod 750 /home/ftpuser
sudo chown ftpuser:ftpuser /home/ftpuser
方法B:虚拟用户(更安全)
# 1. 创建数据库文件
sudo sh -c 'echo "ftpuser" > /etc/vsftpd/virtual_users.txt'
sudo sh -c 'echo "password123" >> /etc/vsftpd/virtual_users.txt'
# 2. 生成数据库
sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
# 3. 修改权限
sudo chmod 600 /etc/vsftpd/virtual_users.*
# 4. 创建PAM配置文件
sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
sudo vim /etc/pam.d/vsftpd
添加以下内容:
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
四、防火墙配置
# 1. 开放FTP端口(如果使用firewalld)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --reload
# 2. 如果使用iptables
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
service iptables save
五、SELinux配置(CentOS 7/8需要)
# 1. 查看SELinux状态
getenforce
# 2. 临时关闭(不推荐)
sudo setenforce 0
# 3. 正确配置SELinux
# 允许FTP访问用户主目录
sudo setsebool -P ftp_home_dir 1
# 允许vsftpd读写文件
sudo setsebool -P allow_ftpd_full_access 1
# 查看相关设置
getsebool -a | grep ftp
六、测试连接
1. 重启服务
sudo systemctl restart vsftpd
2. 本地测试
# 安装ftp客户端
sudo yum install ftp -y
# 测试连接
ftp localhost
# 输入用户名和密码
3. 使用FileZilla等客户端测试
- 主机:服务器IP
- 端口:21
- 协议:FTP
- 加密:普通FTP(不推荐)或FTPS
- 传输模式:主动或被动
七、安全加固建议
1. 使用FTPS(FTP over SSL)
# 生成SSL证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/vsftpd/vsftpd.pem \
-out /etc/vsftpd/vsftpd.pem
# 在vsftpd.conf中添加
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
2. 用户访问限制
# 在配置文件中添加
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO # 仅允许列表中的用户
3. 创建用户列表
sudo echo "ftpuser" >> /etc/vsftpd/user_list
八、常用管理命令
# 查看日志
sudo tail -f /var/log/vsftpd.log
# 重新加载配置
sudo systemctl reload vsftpd
# 查看连接状态
sudo netstat -tulpn | grep ftp
# 限制用户带宽(在配置文件中)
anon_max_rate=512000 # 匿名用户500KB/s
local_max_rate=1024000 # 本地用户1MB/s
九、故障排除
连接被拒绝
- 检查防火墙:
sudo firewall-cmd --list-all
- 检查服务状态:
sudo systemctl status vsftpd
无法上传文件
- 检查目录权限:
ls -ld /home/ftpuser
- 检查SELinux:
getsebool -a | grep ftp
被动模式失败
- 确保配置了正确的pasv_address
- 防火墙开放30000-31000端口
十、替代方案考虑
如果安全性要求高,建议考虑:
- SFTP(基于SSH):
sftp user@host
- FTP over SSH:更安全
- WebDAV:基于HTTP协议
完成上述步骤后,FTP服务即可正常运行。建议初次使用后立即测试并配置适当的安全策略。