新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux 配置 FTP 服务器实现文件上传下载

发布时间:2026/9/29 12:39:07来源:尧图网络
Linux 配置 FTP 服务器实现文件上传下载
前言vsftpdVery Secure FTP Daemon是 Linux 上最主流的 FTP 服务端特点是轻量、稳定、安全性好。适合这些场景给外包/客户开个账号传文件老设备、老系统只支持 FTP内网快速搭个文件中转站先说句实在话FTP 是明文协议账号密码和数据在网上裸奔。除非有历史包袱否则新项目建议直接用 SFTP基于 SSH零配置成本或 FTPS。本文最后会讲怎么给 vsftpd 加上 TLS 加密。环境Rocky Linux 8 / CentOS 7Ubuntu 差异已标注一、安装# Rocky / CentOS dnf install -y vsftpd # Ubuntu / Debian # apt install -y vsftpd vsftpd -v # 确认版本后面有些配置项和版本相关先备份配置这步别省cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak注意路径差异CentOS 系在/etc/vsftpd/Ubuntu 是/etc/vsftpd.conf没有子目录。二、创建 FTP 用户# -d 指定家目录-s 指定不可登录的 shell安全 useradd -d /data/ftp/ftpuser -s /sbin/nologin ftpuser # 设置系统密码 passwd ftpuser # 目录准备 mkdir -p /data/ftp/ftpuser chown -R ftpuser:ftpuser /data/ftp/ftpuser chmod 755 /data/ftp/ftpuser为什么要-s /sbin/nologinFTP 用户只需要能传文件不需要能 SSH 登录服务器。给它/sbin/nologin能有效降低被爆破后的危害。但要注意某些发行版需要把 shell 加入/etc/shells详见 6.2。三、配置 vsftpd.conf完整配置如下同样给精简可用的版本# 基本设置 # 禁止匿名登录重要默认可能是 YES anonymous_enableNO # 允许本地用户登录 local_enableYES # 允许写操作上传、删除、改名都靠它 write_enableYES # 本地用户上传文件的权限掩码022 755 local_umask022 # 目录与日志 dirmessage_enableYES xferlog_enableYES xferlog_std_formatYES connect_from_port_20YES # 以独立模式运行并监听 listenYES listen_ipv6NO # PAM 认证模块 pam_service_namevsftpd userlist_enableYES # 禁锢用户在家目录 # 用户登录后只能在自家目录无法 cd 到上级 chroot_local_userYES allow_writeable_chrootYES # 被动模式NAT/防火墙环境必配 pasv_enableYES pasv_min_port30000 pasv_max_port30100 # 公网访问时必填填服务器的公网 IP # pasv_address203.0.113.10核心参数说明参数说明anonymous_enableNO必改项。默认开启匿名访问等于谁都能传文件write_enableYES不开这个用户只能下载不能上传chroot_local_userYES把用户锁在自家目录防止翻看服务器其他文件allow_writeable_chrootYES关键项见 6.1不加会直接报错登不上pasv_min_port/pasv_max_port被动模式端口范围防火墙要放行这一段pasv_address服务器在 NAT 后面时必须填公网 IP四、启动服务与防火墙systemctl enable --now vsftpd systemctl status vsftpd防火墙firewall-cmd --permanent --add-serviceftp firewall-cmd --permanent --add-port30000-30100/tcp firewall-cmd --reload为什么还要加端口范围FTP 有两种模式主动模式Active服务端主动连客户端。客户端在 NAT 后面时基本用不了。被动模式Passive客户端连服务端的随机高端口。现代客户端默认都是被动模式所以必须放行pasv_min_port~pasv_max_port。SELinuxgetenforce setsebool -P ftpd_full_access on # 允许 vsftpd 读写用户家目录五、验证测试5.1 服务端自测ftp localhost # 输入用户名密码能登录就说明基本 OK5.2 Linux 客户端测试# 方式一ftp 命令 ftp 192.168.1.10 # 方式二lftp更好用支持被动模式切换 dnf install -y lftp lftp -u ftpuser,密码 192.168.1.105.3 curl 测试适合脚本化验证# 下载 curl -u ftpuser:密码 ftp://192.168.1.10/test.txt # 上传 curl -u ftpuser:密码 -T local.txt ftp://192.168.1.10/ # 列目录 curl -u ftpuser:密码 ftp://192.168.1.10/注意curl 默认走主动模式在某些网络环境下会失败。加上--ftp-pasv强制被动模式再试curl --ftp-pasv -u ftpuser:密码 ftp://192.168.1.10/如果加了这个参数就好了说明是主动/被动模式搞错了不是服务端问题。5.4 用 FileZilla 等图形工具连接时把「传输模式」设为被动字符集设为UTF-8中文文件名才不会乱码。六、常见问题排查重点6.1500 OOPS: vsftpd: refusing to run with writable root inside chroot()这是配chroot_local_userYES后最经典的错误。原因你把用户禁锢在家目录了但家目录本身是可写的。用户如果能写自己的根目录就能通过上传.ssh之类的目录实现越权所以 vsftpd 拒绝启动。解法一推荐确认 vsftpd 版本 ≥ 3.0加上allow_writeable_chrootYES解法二更安全不依赖配置项把家目录设成不可写另建子目录给用户写chmod 755 /data/ftp/ftpuser mkdir /data/ftp/ftpuser/upload chown ftpuser:ftpuser /data/ftp/ftpuser/upload这样用户能进家目录只读但要写东西得进upload子目录。安全性比解法一好。版本坑allow_writeable_chroot在 vsftpd 3.0.2 曾被移除3.0.3 又加回来了。如果你加了这行还报unknown option说明版本不对只能用解法二。6.2530 Login incorrect这个错误信息很笼统原因有好几个按下面顺序排查① shell 不在/etc/shells里grep nologin /etc/shells如果没输出说明/sbin/nologin没被列为合法 shellPAM 会拒绝。加上echo /sbin/nologin /etc/shells② 用户被列入了黑名单cat /etc/vsftpd/ftpusers # 这个文件里的用户一律禁止 FTP 登录 cat /etc/vsftpd/user_list # 配合 userlist_enableYES默认是黑名单root默认就在这两个文件里这是故意的不要删。你自己的用户如果也在里面删掉对应行。③ PAM 配置问题检查/etc/pam.d/vsftpd确认pam_shells.so和pam_listfile.so没有误伤。④ 密码本身错了先确认能su - ftpuser切换成功排除密码问题。6.3 能登录能列目录但上传失败检查这三点grep write_enable /etc/vsftpd/vsftpd.conf # 是不是 NO ls -ld /data/ftp/ftpuser # 目录属主对不对 getsebool ftpd_full_access # SELinux 放行了吗文件系统权限和 SELinux 都要过和 NFS 一样是两层校验。6.4 被动模式连不上能登录但列不出目录 / 一直卡住症状能连上、能认证但执行ls就卡住或超时。原因被动模式的数据端口被防火墙拦了。# 确认配置生效 grep pasv /etc/vsftpd/vsftpd.conf # 确认防火墙放行了整个范围 firewall-cmd --list-all | grep -A2 ports如果服务器在云上阿里云/腾讯云别忘了安全组也要放行 30000-30100。这是最容易被忽略的一层。用抓包定位到底卡在哪tcpdump -i any -n port 21 or portrange 30000-301006.5 中文文件名乱码确认客户端用UTF-8编码连接。FileZilla 里站点管理器 → 字符集 → 强制 UTF-8。vsftpd 本身在较新版本默认就是 UTF-8老版本可能需要utf8_filesystemYES七、进阶给 FTP 加上 TLS 加密FTPS既然 FTP 是明文的生产环境强烈建议启用 TLS。① 生成自签证书内网够用公网建议买正式证书openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/vsftpd/vsftpd.key \ -out /etc/vsftpd/vsftpd.crt \ -subj /CCN/STBeijing/LBeijing/OMyOrg/CN192.168.1.10 chmod 600 /etc/vsftpd/vsftpd.key② 配置中追加ssl_enableYES allow_anon_sslNO force_local_data_sslYES force_local_logins_sslYES ssl_tlsv1_2YES ssl_tlsv1_1NO ssl_tlsv1NO ssl_sslv2NO ssl_sslv3NO rsa_cert_file/etc/vsftpd/vsftpd.crt rsa_private_key_file/etc/vsftpd/vsftpd.key require_ssl_reuseNO ssl_ciphersHIGH重启systemctl restart vsftpd客户端就要用FTPS不是 SFTP连接并且因为是自签证书需要选择信任该证书。require_ssl_reuseNO这行建议加上。某些客户端尤其是 FileZilla在 TLS 会话复用上和 vsftpd 有兼容性问题不加这个可能连不上。八、安全加固清单措施做法禁用匿名anonymous_enableNO禁锢目录chroot_local_userYES 不可写家目录限制登录用user_list白名单只放需要的用户禁用 root保持/etc/vsftpd/ftpusers里有 root加密传输启用 TLS第七节限制来源防火墙 云安全组限制源 IP防爆破配合 fail2ban 监控/var/log/secure被动端口收窄pasv_min_port/pasv_max_port范围开小一点九、总结环节关键点用户useradd -s /sbin/nologinshell 要进/etc/shells核心配置anonymous_enableNO、write_enableYES、chroot_local_userYESchroot 报错allow_writeable_chrootYES或改用手法更稳的不可写家目录 子目录防火墙放行 ftp 被动端口范围云服务器还要配安全组SELinuxsetsebool -P ftpd_full_access on排错卡在列目录 被动模式端口没通530 shell/黑名单/PAM最后再提醒一次FTP 明文传输新项目优先考虑 SFTP。如果必须用 FTP请务必按第七节把 TLS 打开。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

光开关原理、选型与调试实战:从.doc文档到1×2保护系统搭建 2026/9/29 13:31:47

光开关原理、选型与调试实战:从.doc文档到1×2保护系统搭建

简介:这份文档面向光通信、光电子及微机电系统方向的学习者与工程技术人员,系统梳理光开关的分类与工作原理,帮助读者理解不同技术路线的适用边界与选型依据。内容涵盖机械式、电光、定向耦合型、M-Z干涉仪型、偏振强度调制型、热光、液晶、磁…

阅读更多 →
AI大模型金融数字化落地:本地部署与RAG实战方案 2026/9/29 13:31:47

AI大模型金融数字化落地:本地部署与RAG实战方案

简介:这份PPT方案面向金融机构数字化负责人、AI产品经理与金融科技研究者,系统梳理大模型在金融行业的落地路径。内容围绕技术概述、客户服务与交互升级、智能风控与信用评估、财富管理与投资决策、运营效率优化及前沿场景展望六大模块展开,涵…

阅读更多 →
信创终端散热设计与长效稳定方案丨蓝速科技(larxu) 2026/9/29 13:31:40

信创终端散热设计与长效稳定方案丨蓝速科技(larxu)

在政务服务大厅或繁忙的工业产线上,我们常遇到这样一种令人头疼的场景:一台看似配置不错的信创终端,刚上线时运行流畅,但连续工作几天后就开始莫名卡顿,甚至直接死机重启。运维人员反复排查软件日志,往往找…

阅读更多 →
YOLOv11工业缺陷检测实战:从模型训练到产线部署全流程解析 2026/9/29 13:31:34

YOLOv11工业缺陷检测实战:从模型训练到产线部署全流程解析

简介:这份PDF文档面向工业质检工程师、计算机视觉开发者与深度学习学习者,系统讲解如何用YOLOv11完成工业缺陷检测的完整落地路径。内容从工业缺陷检测背景与传统方法局限切入,梳理YOLO系列演进及YOLOv11在骨干网络、特征融合、自适应锚框与轻…

阅读更多 →
多租户后台管理系统实战:数据隔离、权限模型与Vue3落地 2026/9/29 13:31:07

多租户后台管理系统实战:数据隔离、权限模型与Vue3落地

做过多租户后台管理系统的人大概都有这种体会:第一次听到"多租户"三个字,脑子里浮现的是"多加个字段而已",真正上手之后才发现,这是一场从数据库到前端路由、从权限模型到部署方式的全链路重构。我这几年从零…

阅读更多 →
Godot 4.x 实用 GDScript 片段库:生命周期、信号与性能优化实战 2026/9/29 13:31:07

Godot 4.x 实用 GDScript 片段库:生命周期、信号与性能优化实战

如果你刚开始学 Godot,多半会有一种体验:教程里每个片段都不长,真到自己动手写项目时,卡住的全是那些“片段之间怎么搭配”的问题。我把过去两年项目里高频复用的 Godot 实用代码按场景筛了一遍,整理成一套可以随查随用…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉