ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Serv-U 12.1安装配置与被动模式排错实战

Serv-U 12.1安装配置与被动模式排错实战

简介:Serv-U 12.1.0.8 企业金版面向需要在局域网内快速搭建 FTP 服务的运维与开发人员,可用于文件上传下载、目录创建删除及跨平台文件传递等场景。压缩包约 29.91MB,文件总数显示为 0 且类型明细暂无数据,具体安装文件与说明需以下载后的实际目录为准。已有约 500 人浏览学习,说明该版本在 FTP 服务搭建与中文环境适配上具有一定参考价值。资源描述显示其已做破解处理,禁用 UTF-8 项目以改善中文显示,默认建立域并启用 IPv4/IPv6 的 21、22 端口,避免与 IIS 冲突,连续运行多天仍较稳定,建议作为服务启动。读者可据此了解 Serv-U 的域配置、端口规划与中文显示排错思路,适合内网文件服务测试与部署参考。

1. 一台能登上、却列不出目录的 Serv-U 12

上周接手的机器:Windows Server 2016,Serv-U 12.1.0.8 装好了,服务在跑,控制台绿灯。但客户端表现很分裂——在服务器上ftp 127.0.0.1一切正常,换到隔壁机器密码也能过,偏偏卡在「读取目录列表」,三十秒后返回 425。查到最后发现是防火墙只放了 21,被动模式那一段端口一个没开。

Serv-U 12 在中小企业的文件交换场景里太常见了:给外部供应商开个上传目录、给分支机构同步报表、给老设备做固件分发。它装起来十分钟,调通却要两小时,坑几乎全在端口、域和权限三者的交叉点上。下面按我自己的习惯排:先把系统和端口算清楚,再装,再建域配用户,最后拿三条命令验一遍。

2. 装前把账算清:Serv-U 12.1 的系统、端口与目录规划

装 Serv-U 最容易翻车的地方不在安装向导里,而在打开向导之前。系统版本选错、端口被别的服务先占了、安装目录随手建在C:\Program Files (x86)\下面,这三件事任何一件出问题,后面配域的时候都会以完全不相干的形式报出来,让你在错误的方向上查半天。这一章就是把这三件事提前定死。

2.1 版本与系统对照:12.1.0.8 该落在哪种机器上

Serv-U 12.1.0.8 是 12.1 分支上的一个补丁小版本,四段版本号里最后一位代表修订号。同分支内小版本的配置目录结构和控制台界面基本一致,所以下面写的路径、菜单名在 12.1.x 上都对得上,你手上是 12.1.0.6 还是 12.1.0.8,操作步骤不会变。

系统这块,我给的建议很直接:

目标环境建议说明
Windows Server 2016 / 2019 64 位首选长期跑服务稳定,驱动和网络栈成熟
Windows Server 2012 R2可用老机器迁移常见,注意补丁打全
Windows Server 2008 R2能跑但不建议新上系统本身已过生命周期,出问题不好查
Windows 10 / 11 桌面版只做本地验证休眠、快速启动、连接数限制会干扰长连接

新手最容易忽略的是「不要装 IIS 的 FTP 组件」。Windows Server 默认没装,但很多人为了图省事,在「添加角色和功能」里顺手勾了 Web 服务器(IIS)并带上 FTP 服务器,结果微软的 FTP 服务先起来占了 21 端口,Serv-U 启动时监听失败,控制台里看着域是绿的,实际外面连进来的是 IIS 那个空目录。判断方法很简单,装完先用netstat -ano | findstr :21看一眼持有 21 端口的进程 PID,再tasklist对一下是不是 Serv-U 的进程。

资源估算按并发来,别按用户总数来。50 个并发连接,2GB 内存够用;200 个以上并发,按每连接 5~10MB 的缓冲加上系统缓存去估,4~8GB 比较稳。磁盘是 IO 密集型,FTP 传大文件时机械盘的随机读写会成为瓶颈,能用 SSD 就别省。另外主目录所在分区至少留 20% 空闲,Serv-U 写临时文件和日志也要空间,盘满的时候报的错是426 Connection closed; transfer aborted,看着像网络问题,其实是磁盘。

2.2 端口清单:21 只是开头,43958 和被动段才是重点

Serv-U 12 涉及的不止一个端口。装之前把这张表抄下来,防火墙和网络策略都按这张表走,能省掉后面 80% 的排查时间。

端口协议用途是否对外
21TCPFTP 控制通道(含显式 FTPS)是
20TCP主动模式数据通道(服务端发起)一般不放
990TCP隐式 FTPS 控制通道只有用隐式 FTPS 才开
50000-50100TCP被动模式数据通道是,必须整段放行
43958TCP本地管理控制台连接只允许 127.0.0.1
8080 / 443TCPWeb Client 网页端按业务需要

主动模式和被动模式的区别,用一句话记住:主动模式是服务端回头连客户端,客户端在 NAT 后面就废了;被动模式是客户端连服务端的一个高位端口,所以服务端必须把那段高位端口开出来,并且告诉客户端「来连我这个地址」。绝大多数连不上、能登录但列不出目录的问题,根子都在被动模式这一行。

端口段选 50000-50100 是我的习惯,100 个端口足够撑几十个并发传输,端口范围越窄防火墙规则越好写,也越不容易和别的服务撞。如果并发传输量很大,可以拉到 50000-50200,但别开成 1024-65535 那种全开,安全审计过不去,而且日志里根本分不清是谁在连。

注意:43958 是管理控制台的本地端口,只在服务器本机访问,千万不要在防火墙上对公网放行。管理一律走远程桌面进服务器再开控制台,或者用 Web Client 的独立端口。

2.3 安装目录与数据存放:先想好备份拿得走什么

安装路径我固定用D:\Serv-U\,理由有三个:不带空格、不带中文、和数据盘分开。带空格的路径在某些外部脚本调用 FTP 命令时会掉参数,这个坑很玄学,但只要踩过一次你就会像我一样永远避开。C 盘只放系统,Serv-U 整个目录放在数据盘,重装系统时配置不用重建。

真正要规划的是数据放哪。Serv-U 的域配置、用户列表、日志都落在安装目录下面的子目录里,主目录(用户实际读写的那个文件夹)建议单独放一块盘,比如D:\FTPData\,和程序目录分开。这样做的收益在备份和扩容上:程序目录几百兆,一个压缩包就能带走;数据盘可以单独做快照、单独扩容量。

我一般的备份套路是两步:

# 第一步:停服务,保证配置文件写入磁盘,不停服务直接拷有可能拿到半截配置 Stop-Service -Name "Serv-U" -Force # 第二步:整个程序目录打包,命名里带上日期,方便回滚到任意一天的配置 Compress-Archive -Path "D:\Serv-U\*" -DestinationPath "E:\Backup\ServU_$(Get-Date -Format yyyyMMdd_HHmm).zip" -Force # 第三步:起服务,验证控制台能连上 Start-Service -Name "Serv-U"

Stop-Service加-Force是为了把依赖它的子进程一起停掉,不加的话偶尔会遇到服务状态卡在Stopping。压缩包不要留在同一块盘上,E:是独立备份盘,程序目录在D盘,盘挂了不至于连后悔药一起吃下去。

迁移到新机器时,顺序是:新机器装同版本 Serv-U → 停服务 → 把旧机器的程序目录覆盖过去 → 起服务 → 检查域和用户是否都在。版本号必须一致,12.1 的配置往 15.x 上直接覆盖是行不通的,字段结构变了,反过来也一样。

3. 安装 Serv-U 12.1:从向导第一屏到服务注册

环境账算完就可以动手了。安装向导本身只有五六屏,闭着眼点下一步也能装完,但其中有三四个选择会决定后面好不好维护,值得停下来想一想。这一章把向导逐屏过一遍,再把服务账户和首次登录这两件事说透。

3.1 安装向导里的四个关键选择

安装包拿到手,先核对一下文件名和大小,确认是完整的发行包再双击。向导流程大致是这样:

  1. 欢迎页 → 下一步。
  2. 许可协议 → 接受。
  3. 安装路径 → 改成D:\Serv-U\,不要用默认的C:\Program Files (x86)\...。
  4. 程序组名称 → 保持默认,方便在开始菜单里找控制台。
  5. 「是否作为系统服务运行」→ 勾上,这是生产环境的必选项。
  6. 管理端口 → 默认 43958,除非这台机器上已经有别的程序占了,否则别改。
  7. 完成安装,勾选「启动管理控制台」。

第 5 步是重点。不勾「作为系统服务运行」的话,Serv-U 就是个普通桌面程序,用户注销就退出,服务器重启也不会自动起来,等于给自己埋了个定时炸弹,而且炸的时间点通常是半夜。勾上之后它注册成 Windows 服务,开机自启、后台运行、跟登录会话无关。

第 6 步的管理端口,判断有没有冲突:

# 看 43958 有没有被占用,有输出就说明被占了 netstat -ano | findstr "43958" # 有 PID 的话,反查是哪个程序 Get-Process -Id <PID>

如果确实被占,向导里改成 43959 之类的,之后打开控制台时手动指定端口就好,不影响 FTP 业务本身。

提示:安装路径、程序组名称都不要出现中文。Serv-U 的部分日志和缓存文件按路径拼接,中文路径在某些区域设置下会写成乱码文件,看着不影响使用,清理的时候很难受。

3.2 服务账户与开机自启:LocalSystem 不是万能钥匙

装完之后第一件事是确认服务注册成功、启动类型是自动:

# 查服务状态和启动类型,状态应该是 Running,StartType 应该是 Automatic Get-Service -Name "Serv-U" | Select-Object Name, Status, StartType # 看服务是以哪个账户跑的 sc.exe qc "Serv-U"

sc.exe qc的输出里有一行SERVICE_START_NAME,默认是LocalSystem。这个账户在本机权限很高,但有三个明显短板:

一是访问不了网络共享。主目录如果指到\\NAS\share\ftp这种 UNC 路径,LocalSystem 是没有网络凭据的,用户登录后看到的是空目录,报错还特别含糊。二是权限太大,Serv-U 是以它的身份去读写文件,一旦配置出问题,受影响的范围不止主目录。三是不方便审计,日志里所有文件操作都是 SYSTEM,出了事追不到人。

所以只要主目录涉及网络路径,或者公司有服务账户规范,就换成专用账户:

# 把服务改成用指定账户运行,注意 obj= 和 password= 后面必须有一个空格 sc.exe config "Serv-U" obj= ".\svc_servu" password= "这里填密码" # 改完重启服务生效 Restart-Service -Name "Serv-U"

obj=后面那个空格是sc.exe的老毛病,写成obj=".\svc_servu"会直接报参数错误,我第一次配的时候在这卡了十分钟。账户建议用本地账户,别用域管理员;如果必须要域账户,密码策略里把「密码永不过期」勾上,否则 90 天改密那天服务就起不来了,而且报错只体现在事件查看器里。

服务账户的身份确定之后,主目录的 NTFS 权限就得跟着给。这一步很多人漏掉,结果 Serv-U 里权限勾了一堆,用户上传还是失败:

# 给服务账户授予主目录的修改权限,(OI)(CI) 表示文件继承和目录继承,/T 递归子目录 icacls "D:\FTPData" /grant "svc_servu:(OI)(CI)M" /T

M是 Modify,包含读、写、改、删。给F(完全控制)也行,但没必要,多出来的「更改权限」和「取得所有权」对 FTP 服务没有任何用处,反而是风险。

3.3 首次登录管理控制台与许可导入

服务跑起来之后,从开始菜单打开管理控制台。控制台是连本机127.0.0.1:43958的,第一次连会要求设置服务器管理员密码,这个密码只用于管理控制台登录,和 FTP 用户密码是两套体系,不要混。

如果提示「无法连接到服务器」,先别急着卸载重装,按顺序查三件事:

# 1. 服务是不是真的在跑 Get-Service -Name "Serv-U" # 2. 43958 有没有在监听,LISTENING 才对 netstat -ano | findstr "43958" # 3. 控制台是不是以普通用户权限打开的,UAC 会拦本地回环连接 # 右键开始菜单里的控制台图标,选"以管理员身份运行"再试

三件事都对还是连不上,就去看安装目录下Logs子目录里当天的日志,服务启动失败的原因基本都写在那里面,比盯着控制台猜快得多。

进去之后先处理授权,把许可信息导入,控制台底部会显示当前的授权类型和最大用户数。这一步搞完,界面上「域」节点是空的,说明环境干净,可以开始建域了。

4. 建域配用户:Serv-U 12.1 的监听器、主目录与权限位

Serv-U 的组织方式是三层:服务器 → 域 → 用户。域不是 DNS 里的域名,它更像一个「站点」,把一组用户、一个主目录、一组监听端口绑在一起。一台服务器可以建多个域,分别给不同部门或不同客户用,互不干扰。这一章按建域、配用户、通网络的顺序走。

4.1 新建域与监听器绑定:把 IP 和端口钉死

在控制台左侧树里右键「域」→「新建域」,向导会让你填三样东西:域名、说明、监听器。

域名的作用被严重低估。它不是给 DNS 用的,而是登录时用来区分你连的是哪个域。客户端登录有两种写法:用户名@域名或者域名\用户名。很多人建域的时候随手打了个test,然后发现怎么登都 530,其实就是忘了带后缀,或者带了但拼错了。

监听器决定这个域在哪个 IP、哪个端口上接客。多网卡机器上这一步必须绑具体 IP,别绑「所有 IP」:

# 监听器配置的等价描述,实际在控制台"域 → 监听器"里添加 域: corp-ftp 监听器 1: 10.0.0.10 : 21 ; 内网网卡,给内部员工 监听器 2: 203.0.113.20 : 21 ; 对外网卡,给外部供应商

绑具体 IP 的好处是可控:以后加第二块网卡、改网络规划,不会突然多出一个不该对外暴露的入口。另外,同一个 IP 上不同域不能用同一个端口,如果两个域都要 21,就得用两块网卡或者换端口。

建完域立刻做一次自检:

# 看 21 端口是不是被新域接住了,应该能看到 LISTENING netstat -ano | findstr ":21 " # 在本机用 ftp 客户端连一下,确认握手能过 ftp -A 127.0.0.1

本机能连上再往下走,否则后面配用户、配权限全是白费功夫。

4.2 用户与主目录:锁定、配额、上传下载速率

用户配置是 Serv-U 里选项最多的地方,但真正决定能不能用的只有几个。

主目录和「锁定用户到主目录」是必须成对出现的。只设主目录不勾锁定,用户登录后可以用cd ..一路退到盘符根目录,把整台机器的文件结构看个遍,这是最经典的安全事故。勾上之后..只能在本目录内循环,退不出去。

每个用户的账号页面上,这几项值得逐条设置:

配置项建议值影响
主目录该用户专属子目录隔离用户数据
锁定到主目录勾选防止目录穿越
磁盘配额按业务定,如 10240 MB防止单用户占满磁盘
上传速率2048 KB/s防止一个人吃满带宽
下载速率4096 KB/s同上
最大并发连接2~4多线程客户端会开多个会话
空闲超时300 秒太短会断大文件传输
最大上传文件大小按需,0 为不限控制单文件体积

权限位分目录和文件两组,分开配是有道理的。目录权限管的是「能不能列、能不能进、能不能建、能不能删、能不能改名」;文件权限管的是「能不能读、能不能写、能不能追加、能不能删」。最常见的误配是把目录权限给全了,文件权限只给了读,结果用户能看见目录、能建文件夹,就是传不上文件,报错还只说权限不足,不说哪个权限不足。

NTFS 权限和 Serv-U 权限是两套,取交集生效。Serv-U 里给足了写权限,但服务账户对目录只有读权限,结果还是写不进去。这就是 3.2 里那条icacls的意义,两边都配到位才行。

建完用户之后按这个顺序验:

  1. 用 FTP 客户端以用户@域的格式登录。
  2. pwd确认当前目录就是主目录。
  3. cd ..试一下,应该回到同一层或者被拒,不能跳到盘符根。
  4. 上传一个小文件,再下载回来,比对一下大小。
  5. 用管理员账号在控制台看该用户的当前连接数和已用配额。

4.3 被动模式与防火墙:一条 PowerShell 规则搞定端口段

被动模式是 Serv-U 最需要主动配置的一块。原理不复杂:客户端发起传输时,服务端会回一个地址和端口,说「你连我这个端口」。这个端口默认是随机的,随机端口在防火墙上没法放行,所以必须把它固定成一段。

配置位置在域属性里的被动模式设置,填上端口范围,比如50000-50100。如果服务器在 NAT 后面(云主机、机房里的内网机器都算),还要额外指定「对外通告的 IP」,填公网地址或者映射后的地址。不填这一项,服务端会把内网 IP 塞给客户端,客户端拿着10.0.0.10去连,永远连不上——这就是第 1 章开头那个「能登录、列不出目录」的真凶。

防火墙规则用 PowerShell 写,比点界面对话框清楚得多:

# 控制通道:21 端口放行,给所有来源 New-NetFirewallRule -DisplayName "Serv-U FTP Control" ` -Direction Inbound -Protocol TCP -LocalPort 21 -Action Allow # 被动模式数据通道:整段放行,这是最容易漏的一条 New-NetFirewallRule -DisplayName "Serv-U FTP PASV" ` -Direction Inbound -Protocol TCP -LocalPort 50000-50100 -Action Allow # 隐式 FTPS,用才加,不用就别开 New-NetFirewallRule -DisplayName "Serv-U FTPS Implicit" ` -Direction Inbound -Protocol TCP -LocalPort 990 -Action Allow # 给内网网段单独放行管理面,43958 只对本机以外的运维网段开 New-NetFirewallRule -DisplayName "Serv-U Admin" ` -Direction Inbound -Protocol TCP -LocalPort 43958 ` -RemoteAddress 10.0.0.0/24 -Action Allow

反过来,习惯用netsh的老机器上等价写法是:

netsh advfirewall firewall add rule name="Serv-U FTP Control" dir=in action=allow protocol=TCP localport=21 netsh advfirewall firewall add rule name="Serv-U FTP PASV" dir=in action=allow protocol=TCP localport=50000-50100

反引号`是 PowerShell 的续行符,后面不能有空格,有空格就断行了。-LocalPort支持区间写法,一条规则顶一百条,比逐个端口加清爽。规则名起得规范一点,以后排查网络问题时Get-NetFirewallRule -DisplayName "Serv-U*"一眼就能看全。

如果服务器前面还有硬件防火墙或者云上的安全组,同样的端口段要再放一遍。云主机尤其注意:安全组是有状态的,21 放行了不代表 50000 段也放行,两处都得开。

5. 排查与避坑:Serv-U 12.1 装完连不上的五个现场

装机十分钟,调通两小时,这两小时基本都花在下面五种故障上。每一条我都按「现象 → 原因 → 解决」写,遇到对应症状直接对号入座,不用重新推一遍。

5.1 现象:本机能登录,别的机器卡在「读取目录列表」

现象很典型:登录验证通过了,目录列表转圈,三十秒后客户端报超时,或者服务端日志里出现425 Failed to establish connection。本机用ftp 127.0.0.1完全正常,换台机器就废。

原因是被动模式的数据通道没打通。要么防火墙只放行了 21,50000 段没开;要么服务器在 NAT 后面,Serv-U 把内网 IP 通告给了客户端,客户端拿到10.x.x.x在公网上根本路由不到。这两件事经常同时存在,改了其中一个还是不通,就以为改错了。

解决分三步走:先在域的被动模式设置里把端口段钉成50000-50100,再在防火墙和云安全组两处放行这一段,最后在 NAT 环境下把「对外通告 IP」填成公网地址。三步做完用curl验证:

# --ftp-pasv 强制走被动模式,-v 打印完整握手过程,能看到 PASV 回的地址和端口 curl -v --ftp-pasv --user "test@corp-ftp:密码" ftp://203.0.113.20/

输出里会有一行227 Entering Passive Mode (203,0,113,20,195,80),括号里前四段是 IP,后两段是端口的高位和低位字节。195×256+80=50000,端口落在配置范围内,IP 是公网地址,就说明被动模式通告正确了。如果括号里是10,0,0,10,说明「对外通告 IP」没填。

5.2 现象:530 登录失败,密码明明是对的

客户端提示530 User cannot log in或者530 Not logged in,密码反复确认没问题,同一个账号在控制台里看着是启用的。

最常见的原因就是用户名格式。Serv-U 建了域之后,登录名要带域标识,写成用户名@域名或域名\用户名。很多人只填了用户名,服务端在默认域里找不到这个人,直接拒掉。其次是用户被禁用、最大连接数被设为 0(等于禁止登录)、IP 访问规则把来源网段挡在外面,以及密码里带@和域名分隔符撞了,客户端解析错位。

解决的顺序是:先用用户名@域名完整格式重试;不行就进控制台看这个用户的「账号」页状态和「限制」页里的 IP 访问规则;再看服务器日志里那条拒绝记录,Serv-U 的日志会写明是哪条策略拒的,比客户端返回的那句 530 详细得多。密码带特殊字符的,先在记事本里试一遍,确认客户端没有做转义。

5.3 现象:大文件传到 1GB 左右必断

小文件秒传,几百兆的文件传着传着停了,重连续传能接上但很快又断,日志里是426 Connection closed; transfer aborted。

这类问题的三个来源按概率排:空闲超时太短、NAT 会话老化、磁盘或配额满。空闲超时是指控制连接多久没动作就断,默认值往往只有 60~120 秒,而大文件传输期间控制通道确实没有新命令。NAT 设备也有会话老化时间,通常 300~3600 秒,短于传输时长就会把数据连接静默回收。

解决方法是把域里的空闲超时调到 300 秒以上,传输超大文件可以设 600;中间的 NAT 和负载均衡设备会话时间调到 3600 秒;同时看一眼主目录所在磁盘的剩余空间和该用户的已用配额,这两个满了同样会中断,而且报错长得一模一样。

5.4 现象:中文文件名变问号或者乱码

同一个中文文件名,在 WinSCP 里显示正常,用浏览器或者老版本客户端打开就是???,下载下来名字也变了。

根源在字符集协商。Serv-U 12 默认按 UTF-8 处理文件名,现代客户端也走 UTF-8,两边一致就没问题。但有些老客户端、老脚本、以及部分嵌入式设备的 FTP 实现只认本地代码页(GBK),双方各说各话,文件名就成乱码了。

处理方式取决于对接方:能升级客户端的一律升到支持 UTF-8 的版本,这是正解;实在要兼容老设备,就在对接的那一个域里放宽字符集设置,同时约定文件名只用 ASCII 字符,中文名用编号代替,两边都不难受。我一般倾向于后一种,因为改服务端的全局字符集会影响其他正常的域,为了一个老设备拖累所有业务不划算。

5.5 现象:管理控制台提示无法连接到服务器

打开控制台就弹「无法连接到 127.0.0.1:43958」,但 FTP 业务是正常的,用户能上传下载。

FTP 正常说明主服务在跑,问题出在管理面上。四种可能:控制台没有以管理员权限运行,UAC 把本地回环连接拦了;43958 被别的程序抢了;安装时改过管理端口,控制台还在按默认端口连;服务虽然显示 Running,但管理模块初始化失败。

排查就三条命令,按顺序走:

# 1. 确认服务和启动类型 Get-Service -Name "Serv-U" | Format-List Name, Status, StartType # 2. 确认 43958 在监听,以及是哪个 PID netstat -ano | findstr "43958" # 3. 拿 PID 反查进程名,如果不是 Serv-U 的进程,就是端口被抢了 Get-Process -Id <PID> | Select-Object Id, ProcessName, Path

如果第 2 步没输出,说明管理模块没起来,去安装目录的Logs里翻当天的日志;如果有输出但进程名不对,就在安装向导里改过的端口上重连,或者把冲突程序挪走。这条故障最后那句「FTP 正常但控制台连不上」特别能迷惑人,因为它让你以为整套服务都健康,实际上你连配置都改不了,等于失去了对服务器的控制权。

6. 验证跑通:三条命令确认 Serv-U 12.1 真在干活

装完、配完,别急着交付。控制台的绿灯只能说明进程活着,说明不了端口通、权限对、被动模式可用。我固定用三条命令做验收,覆盖服务面、控制面、数据面三层,任何一层不通都能立刻定位。

第一条,看服务与端口占用:

# 服务状态 + 21/43958 两个关键端口的监听情况,一次看全 Get-Service -Name "Serv-U" | Select-Object Status, StartType netstat -ano | findstr -Pattern ":21 |:43958"

期望输出是Running+Automatic,以及两行LISTENING。如果 21 的 PID 和 43958 的 PID 不是同一个进程,基本可以断定 21 被别的服务抢了,回去查 IIS FTP。

第二条,从另一台机器验证被动模式和认证:

# 列目录,强制被动模式,输出里能看到 PASV 通告的 IP 和端口 curl -v --ftp-pasv --user "test@corp-ftp:密码" ftp://203.0.113.20/ --max-time 20

返回目录列表就说明控制通道、认证、被动模式数据通道三件事全通了。这一步必须从另一台机器做,本机测永远是通的,测了等于没测。

第三条,验证上传下载和权限位:

# 上传一个 10MB 的测试文件,再下载回来比对大小 dd if=/dev/zero of=/tmp/probe.bin bs=1M count=10 curl -T /tmp/probe.bin --user "test@corp-ftp:密码" ftp://203.0.113.20/upload/ curl -o /tmp/probe_back.bin --user "test@corp-ftp:密码" ftp://203.0.113.20/upload/probe.bin ls -l /tmp/probe.bin /tmp/probe_back.bin

两个文件大小一致,说明写入、读取、配额、NTFS 权限全部正确。再补一个反向验证:用一个只有读权限的账号做上传,应该被拒;用一个普通账号cd ..,应该退不出主目录。这两个拒绝是「预期内的失败」,比一堆成功更能说明配置有效。

我把这套检查整理成一张表,交付前逐行打勾:

验证项方法通过标准
服务自启Get-ServiceRunning / Automatic
端口归属netstat -ano21 与 43958 同属 Serv-U 进程
被动模式curl --ftp-pasv -v227 回包 IP 为对外地址,端口在段内
上传下载curl -T/curl -o文件大小一致
目录隔离客户端cd ..无法跳出主目录
权限边界只读账号上传被拒绝

最后两步最容易省,也最容易在交付后出事。目录隔离没验,等于把整台机器的文件结构暴露给外部供应商;权限边界没验,等于不知道自己的权限配置到底生效了没有。

从那以后,我每次装完 Serv-U 都强制走一遍这套验收,尤其是「从另一台机器跑一次curl --ftp-pasv」这一条,不管客户多急、不管是不是内网环境,一次都不跳。血泪经验换来的一句话:控制台的绿灯只是黑匣子里的一盏灯,真正能说明问题的,是外面的人能不能连进来、能不能把文件完整地拿走。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表