CentOS 上搭建 FTPServer 的标准做法
在 CentOS 上推荐使用 vsftpd 搭建 FTP/FTPS 服务,以下为从安装到验证的完整步骤,涵盖防火墙、被动模式与 TLS 加密要点。
一 安装与启动服务
- 更新索引并安装 vsftpd
- sudo yum update -y
- sudo yum install vsftpd -y
- 启动并设置开机自启
- sudo systemctl start vsftpd
- sudo systemctl enable vsftpd
- 确认服务状态
- sudo systemctl status vsftpd
二 基础配置 vsftpd.conf
- 编辑配置文件
- sudo vi /etc/vsftpd/vsftpd.conf
- 常用安全与功能项(按需求调整)
- 禁用匿名、启用本地用户与写入
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- 限制用户在主目录
- chroot_local_user=YES
- allow_writeable_chroot=YES(如需要可写)
- 日志与连接
- xferlog_enable=YES
- connect_from_port_20=YES
- 监听设置(IPv4 场景)
- listen=YES
- listen_ipv6=NO
- 被动模式(穿越防火墙必需)
- pasv_enable=YES
- pasv_min_port=1024
- pasv_max_port=1048
- 保存后重启服务
- sudo systemctl restart vsftpd
三 防火墙与被动端口
- 使用 firewalld(CentOS 7+ 常用)
- 开放 FTP 控制端口与被动端口段
- sudo firewall-cmd --permanent --add-port=21/tcp
- sudo firewall-cmd --permanent --add-port=20/tcp
- sudo firewall-cmd --permanent --add-port=1024-1048/tcp
- 或直接使用服务:sudo firewall-cmd --permanent --add-service=ftp
- 重载规则
- sudo firewall-cmd --reload
- 如使用 iptables(如仍在使用)
- sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
- 保存并重启 iptables 服务
四 创建用户与目录权限
- 新建系统用户(禁止登录 shell 更安全)
- sudo useradd -m -s /sbin/nologin ftpuser
- sudo passwd ftpuser
- 如需指定共享目录(示例:/var/ftp/data)
- sudo mkdir -p /var/ftp/data
- sudo chown ftpuser:ftpuser /var/ftp/data
- sudo chmod 755 /var/ftp/data
- 若启用 chroot 且需可写,确保目录对 ftpuser 可写,或使用 allow_writeable_chroot
五 启用 SSL/TLS 加密与连通性测试
- 生成自签名证书(测试或内网可用)
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/pki/tls/private/vsftpd.pem
-out /etc/pki/tls/certs/vsftpd.pem
- 配置 vsftpd 启用 TLS
- ssl_enable=YES
- allow_anon_ssl=NO
- force_local_data_ssl=YES
- force_local_logins_ssl=YES
- ssl_tlsv1=YES
- ssl_sslv2=NO
- ssl_sslv3=NO
- rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
- rsa_private_key_file=/etc/pki/tls/private/vsftpd.pem
- 重启服务
- sudo systemctl restart vsftpd
- 客户端连接测试
- 命令行:ftp your_server_ip(明文)或 lftp ftps://your_server_ip(FTPS)
- 图形工具(如 FileZilla):协议选 FTP over TLS (explicit),端口 21,使用创建的用户登录并测试上传/下载
- SELinux 提示(如遇到权限问题)
- 允许家目录访问:sudo setsebool -P ftp_home_dir on
- 更宽松策略(视场景):sudo setsebool -P allow_ftpd_full_access on