在 CentOS 上使用 vsftpd 搭建 FTP 并进行文件传输
一 安装与基础配置
- 安装 vsftpd(Very Secure FTP Daemon):执行命令:sudo yum install -y vsftpd。
- 启动并设置开机自启:sudo systemctl start vsftpd && sudo systemctl enable vsftpd。
- 基础安全与功能配置(编辑 /etc/vsftpd/vsftpd.conf):
- 启用本地用户登录:local_enable=YES
- 允许写入:write_enable=YES
- 禁止匿名:anonymous_enable=NO
- 将本地用户限制在其主目录:chroot_local_user=YES
- 允许 chroot 目录可写(避免登录失败):allow_writeable_chroot=YES
- 说明:FTP 使用控制连接端口 21/TCP,数据连接在主动模式由服务器从 20/TCP 发起;被动模式数据端口可自定义范围,便于防火墙放行。
二 防火墙与被动模式端口
- 放行 FTP 控制端口与数据端口范围(推荐被动模式):
- 放行控制端口:sudo firewall-cmd --permanent --add-port=21/tcp
- 放行被动模式数据端口范围(示例为 5000–5500/TCP):
- 配置 vsftpd:pasv_min_port=5000 与 pasv_max_port=5500(写入 /etc/vsftpd/vsftpd.conf)
- 防火墙放行:sudo firewall-cmd --permanent --add-port=5000-5500/tcp
- 使规则生效:sudo firewall-cmd --reload
- 如使用云服务器,还需在云平台安全组放行上述端口。
三 创建用户与目录权限
- 创建专用 FTP 用户(禁止 shell 登录更安全):
- 添加用户:sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
- 设置密码:sudo passwd ftpuser
- 目录与权限示例:
- 若需上传,确保目标目录对 ftpuser 可写,例如在 /var/ftp/pub 测试上传时,设置:sudo chmod 766 /var/ftp/pub;进入目录后再上传更易成功(如先执行 cd pub)。
- 注意:被 chroot 的用户主目录应可写(或使用 allow_writeable_chroot)。
四 客户端连接与文件传输
- 命令行 ftp(系统自带):
- 连接:ftp 服务器IP
- 登录后常用:
- 切换本地目录:lcd /path/to/local
- 切换远端目录:cd /remote/path
- 查看:ls / dir
- 传输模式:二进制传输(通用且安全)bin
- 上传:put localfile;下载:get remotefile
- 图形化客户端:使用 FileZilla/WinSCP,输入服务器 IP、用户名与密码即可拖拽上传/下载。
- 命令行增强工具:安装并使用 lftp(支持断点续传、后台、镜像等):sudo yum install -y lftp,连接:lftp ftp://ftpuser@服务器IP。
五 安全加固与常见问题
- 启用 SSL/TLS 加密(FTPS):
- 生成证书: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:启用 ssl_enable=YES、force_local_data_ssl=YES、force_local_logins_ssl=YES,并指定证书与密钥路径;重启服务。
- 常见故障排查:
- 无法连接:检查 firewalld/安全组 是否放行 21/TCP 与被动端口范围。
- 登录后无法上传:目录权限不足或未在可写目录;必要时设置 chmod 766 目标目录 并确认已进入该目录再上传。
- SELinux 影响:如遇到权限问题,可临时 setenforce 0 验证,或按策略为 FTP 放行相关访问。
- 安全建议:生产环境优先使用 FTPS 或改用更安全的 SFTP/SSH;定期审计日志与账户权限。