Serv-U 12.1.0.8 安装配置与被动模式排错指南
简介Serv-U 12.1.0.8 企业金版安装包面向需要在局域网或本机快速搭建FTP服务的运维人员、开发者及小型团队解决文件上传下载、目录维护与多协议访问等基础需求。压缩包约29.91MB上游未提供文件明细与类型构成实际文件以包内为准该版本已做中文显示适配默认建立域并启用IPv4/IPv6的21、22端口可减少与IIS常见端口的冲突。已有500人浏览学习适合用作内网文件交换、测试环境搭建及FTP协议学习的对照环境。部署后可支持同一网络内文件或目录的复制、移动、创建和删除并可按服务方式启动以保持连续运行便于读者获得可直接使用的FTP服务端配置与验证场景。1. 装到第三遍才通Serv-U 12.1.0.8 到底卡在哪儿上周给一台还在跑 Windows Server 2012 R2 的老机器补文件对接服务对方系统只认 FTP我选了 Serv-U 12.1.0.8。第一遍装完能登录列目录却要等半分钟第二遍改完端口能连上传文件卡在 425第三遍才发现反解析、被动模式 IP、服务账户权限三处问题叠在一起单独修哪一个都不见效。这个版本在内网文件交换、老 ERP 附件目录、第三方接口对接里出现的频率比想象中高装不顺的结果就是每天有人来问一句「为什么传不上去」。下面按我实际重装的顺序走一遍从环境核对到验证收尾新手照做能通老手可以重点看版本差异和那几处参数取舍。2. 装前把环境钉死Windows 版本、依赖组件与端口占用Serv-U 12.1.0.8 是 12.x 分支上比较靠后的一个构建安装包不大装起来也快快就容易让人跳过前置检查。我踩过的坑里至少一半不是软件本身的问题而是系统版本、运行库、端口占用这几件事没提前清干净装完才暴露排查方向全被带偏。先说定位。12.x 这一代把配置集中写在安装目录下的Serv-U.Archive这个文件里域、用户、监听器、证书路径全在里面。好处是备份极其简单复制一个文件就带走了整套配置坏处是文件一旦损坏或者被覆盖整个域配置一起没没有增量恢复这一说。所以我在任何机器上装完的第一件事都是把这个文件复制一份出来单独存。再后来更新的 15.x 分支界面和安装路径都调整过如果你的对接方只要求「FTP 能通、账号能隔离」12.1.0.8 完全够用没必要为了新界面折腾一轮回归测试。老系统上跑老版本稳定性往往比新特性重要。2.1 系统版本与运行时依赖对照12.1.0.8 官方支持的范围覆盖到 Windows Server 2008 R2 到 2016桌面端 Windows 7 到 Windows 10 也能装但生产环境我一般不建议装在桌面系统上——休眠、自动更新重启、用户登录状态都会影响服务连续性。下面这张表是我实际装过的几种组合遇到没列出来的系统按「同代内核往上兼容一代」的经验先试装不上再回退。操作系统安装结果需要额外补的东西备注Windows Server 2008 R2 SP1正常.NET Framework 4.0 以上、VC 2010/2013 运行库系统太老先打齐补丁再装Windows Server 2012正常.NET Framework 4.5默认组件基本够Windows Server 2012 R2正常.NET Framework 4.5.2 以上我装得最多的一种组合Windows Server 2016正常无注意 UAC 和 Defender 拦截Windows 10 专业版正常无仅测试用不做生产运行库这块安装程序启动时如果弹「缺少 xxx.dll」八成是 VC 运行库没装。服务器上装运行库有个习惯我一直在用先装 x86 再装 x64两个都装不要问「64 位系统为什么还要装 32 位」——Serv-U 的部分辅助组件是 32 位的缺了会在某个不起眼的功能上炸比如证书导入。# 装之前先确认 .NET 版本Release 值对照官方表换算 Get-ItemProperty HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full | Select-Object Version, Release # 确认 VC 运行库是否已存在 Get-ChildItem C:\Windows\System32\vcruntime140.dll, C:\Windows\SysWOW64\vcruntime140.dll -ErrorAction SilentlyContinue第一段读注册表里的Release值它是个整数不是版本号378389对应 4.5393295对应 4.6往上还有更多直接看Version字符串更快但精确到小版本还得靠Release。第二段同时查System32和SysWOW64两个目录就是前面说的 32/64 位都要在只查一个目录会误判成已装好。2.2 端口与服务预检Serv-U 默认会占用一批端口其中 21 是最容易撞车的。IIS 的 FTP 角色、某些杀毒软件的文件防护模块、老的备份代理都可能悄悄占着 21。装之前不查装完启动服务失败日志里只给一句「绑定失败」看不出是谁占的。端口协议用途什么时候必须开21TCPFTP 控制连接只要用 FTP 就必须20TCP主动模式数据连接客户端走 PORT 模式才需要990TCP隐式 FTPS 控制连接用隐式加密才需要22TCPSFTP 子系统用 SFTP 客户端才需要80 / 443TCPWeb 客户端、HTTP 方式访问用浏览器方式传文件才需要50000-50100TCP被动模式数据连接自定义范围只要走被动模式就必须最后一行是重点也是最多人漏掉的。被动模式下客户端连上 21 之后服务端会再开一个高位端口等客户端来连这一整段端口都得在防火墙上放开只放 21 是绝对不够的。REM 逐项查端口占用最后一列是 PID拿去任务管理器对进程名 netstat -ano | findstr :21 netstat -ano | findstr :22 netstat -ano | findstr :990 netstat -ano | findstr :50000 REM 拿到 PID 之后反查是哪个程序 tasklist /FI PID eq 4findstr :21 后面的空格不能省否则会把 2100、21000 这类端口一起匹配进来排查时白白多花十分钟。查到 PID 是 4 的说明是系统进程占用通常是 HTTP.sys 或者别的内核态服务这种情况就别硬抢端口了把 Serv-U 的监听端口改成 2121 之类的备用值更省事。提示改控制端口之前先确认对接方能改。很多第三方系统把 21 写死在配置里你这边改成 2121对面连不上还是你的锅。2.3 安装包来源与静默安装参数安装包的来源要卡住。网上流传的各种「绿色版」「增强版」安装包改过的可执行文件里面塞了什么没人说得清出了问题日志对不上、数字签名是空的排查的时候连求助都没法求助。我这边一律只用带完整数字签名的原始安装包拿到手先验签名和哈希哈希值记在部署记录里下次重装对比一下就知道包有没有被动过。# 验证安装包的数字签名状态Status 必须是 Valid Get-AuthenticodeSignature -FilePath D:\install\Serv-U-12.1.0.8-x64.exe | Format-List Status, StatusMessage, SignerCertificate # 记录 SHA256写进部署记录 Get-FileHash -Algorithm SHA256 D:\install\Serv-U-12.1.0.8-x64.exeGet-AuthenticodeSignature返回Valid才说明签名有效且文件未被篡改返回NotSigned或者HashMismatch直接丢掉重下不要抱着「先装上试试」的心态。Get-FileHash的结果粘到部署文档里半年后重装同一台机器时比对一下能提前发现下载源被换掉的情况。批量部署的时候会用静默安装。Serv-U 的安装包是打包过的 exe不同构建对参数的响应不完全一致稳妥做法是先加/?或/h探一下看它吐出哪些开关再决定用哪套。REM 先探参数看安装包自己支持什么 Serv-U-12.1.0.8-x64.exe /? REM 常见静默写法之一装到指定目录并不弹界面 Serv-U-12.1.0.8-x64.exe /s /v/qn INSTALLDIR\D:\ServU\ REM 装完确认服务是否注册成功 sc query Serv-U/s是外层封装的静默开关/v/qn是传给内层 MSI 的参数/qn表示完全无界面。INSTALLDIR这种属性名不是所有构建都认探参数那一步就是为了确认它到底认哪个名字。sc query查到STATE : 4 RUNNING才算装完真的起来了只看到服务存在但状态是STOPPED说明装是装上了配置有问题。3. 从安装向导到第一个能登录的域安装向导总共十几屏大部分是「下一步」真正需要动脑的只有四个地方。这四个地方填错后面要么连不上要么连上了看不到目录要么能看到目录但写不进去全都是「看起来装好了其实没用」的状态。3.1 安装向导里四个必须拍板的选项第一个是安装目录。默认在系统盘我一般改到数据盘理由很直接FTP 目录树会长得很快附件、备份包、日志全堆在系统盘半年后 C 盘告急扩容还得停机。改路径的时候注意路径里不要有空格和中文虽然现在支持得不错但老版本的某些组件在带空格路径下处理临时文件会出岔子。第二个是服务运行账户。默认是本地系统账户单机、本地磁盘、不涉及网络共享的场景用默认的没问题。只要目录放在网络共享上UNC 路径就必须改成有网络访问权限的域账户本地系统账户访问远程共享永远是拒绝访问这个坑后面还会细说。第三个是管理控制台的访问密码。这个密码不是 FTP 用户的密码是进管理界面的密码强度要够。我见过把管理密码设成admin123而且管理端口对全网开放的环境等于把整个文件服务器的控制权挂在公网上。第四个是是否启用 Web 客户端。不用浏览器传文件就关掉少开一个 80/443 就少一处暴露面。选项默认值我的建议值影响安装目录系统盘 Program Files数据盘如D:\ServU影响后续扩容和备份服务账户本地系统账户本地磁盘用默认网络共享改域账户决定能否访问 UNC 路径管理密码安装时自设16 位以上独立保管决定管理面安全Web 客户端启用不用就关决定是否开 80/4433.2 建域、绑监听器、配 IPServ-U 的组织方式是「服务器 → 域 → 用户」一台服务器上可以挂多个域域之间完全隔离各有各的用户和目录。做对接的时候我习惯一个对接方一个域出问题好定位权限也好收。建域的时候有三个字段容易填错。域名字段只是个内部标识随便起不参与网络通信别在这里填域名解析记录。域 IP 字段决定这个域监听哪块网卡多网卡机器上必须选对内网那块选错了外网怎么连都连不上。监听器Listener是真正绑定端口的地方一个域可以挂多个监听器分别对应 FTP、FTPS、SFTP。域: partner-a ├── 监听器 1: 0.0.0.0:21 协议 FTP 用途 内网普通对接 ├── 监听器 2: 0.0.0.0:990 协议 FTPS 用途 需要加密的对接方 └── 监听器 3: 0.0.0.0:22 协议 SFTP 用途 走密钥认证的对接方同一个端口不要被两个监听器重复绑定绑定冲突在日志里表现为「地址已在使用」但实际可能是同机的另一个域抢了端口不要只往系统层面查。监听器建好之后管理界面里能看到监听状态。显示绿色或者「正在监听」才算真的起来了。这里有个细节改完监听器配置后某些版本需要手动重启一次域才生效不是保存即生效。我第一次装的时候改完端口直接测怎么都不通重启域之后立刻好了白白怀疑了半小时防火墙。3.3 用户、目录访问规则与配额用户配置是整套环境里最需要较真的部分。Serv-U 的目录访问规则是「主目录 权限位」的组合权限位包括读、写、追加、删除、重命名、执行、列表、创建、子目录看着多实际常用的就几组。场景一只读下载账户 主目录: D:\FtpRoot\public 权限: 读、列表、子目录 场景二上传专用账户对接方只往上扔文件 主目录: D:\FtpRoot\inbox 权限: 写、追加、列表、子目录 注意: 不给「删除」和「重命名」避免对面误删已上传文件 场景三双向同步账户 主目录: D:\FtpRoot\sync 权限: 读、写、追加、删除、重命名、列表、子目录第二种最容易配错。「写」和「追加」是两个不同的权限位只给「写」的话客户端覆盖已有文件可以追加到文件末尾或者断点续传就会被拒日志里报的是 550 权限拒绝看不出具体缺哪个位。断点续传依赖「追加」这一点在传大文件的时候特别明显——传了 3 个 G 断了重连续传失败就是少了这个权限。配额和速率限制在同一屏里。对接方带宽有限的时候把单用户上传速率限到 2MB/s能避免一个大批量任务把整条链路占满把别的对接方挤掉。配额按用户设单位是 MB设了之后超出会直接拒绝写入返回 552这个错误码见到就知道是配额满了不用往权限方向查。# 建目录时顺手把权限配对避免装完之后补 $root D:\FtpRoot New-Item -ItemType Directory -Path $root\inbox, $root\public, $root\sync -Force # 断掉继承只给服务账户和被授权用户组 icacls $root\inbox /inheritance:r icacls $root\inbox /grant SVC_SERVU:(OI)(CI)M icacls $root\inbox /grant Administrators:(OI)(CI)F/inheritance:r一定要在授权之前执行顺序反了的话先授的权限会被继承清理一起带走。(OI)(CI)表示对象继承和容器继承少了这两个标记新建的子目录拿不到权限上传到二级目录就失败。M是修改权限对应 Serv-U 里的读写删改这一组F是完全控制只给管理员。注意不要图省事给Everyone完全控制。FTP 目录一旦对 Everyone 开放等于这台机器上任何进程都能读写业务文件出事了连审计都做不了。4. 能登录不代表能用被动模式、证书与目录权限装完能登录只是第一步。FTP 这个协议的控制连接和数据连接是分开的登录走 21传文件走另一条连接两段链路任何一段不通表现都是「能登录但传不了」。这一章处理的都是「能登录但用不了」的问题。4.1 被动模式端口范围与 NAT 回写主动模式和被动模式的区别用一句话说清楚主动模式是服务端主动连客户端的数据端口被动模式是客户端主动连服务端的数据端口。客户端在防火墙后面的时候主动模式基本没戏因为服务端连不进去所以现代环境默认都走被动模式。被动模式的问题出在服务端要告诉客户端「你来连我这个 IP 和端口」。如果服务器在 NAT 后面它报给客户端的是内网地址客户端在外网当然连不上表现就是登录成功、LIST卡住、最后超时。解决办法是在域设置里指定被动模式对外公布的固定 IP让它报公网地址。端口范围也在这里设。默认范围很宽宽到防火墙规则不好写我一般收窄到 50000-50100一百个端口够几十个并发连接用。# Windows Server 2012 以上用这个一次放开整段被动端口 New-NetFirewallRule -DisplayName Serv-U PASV 50000-50100 -Direction Inbound -Protocol TCP -LocalPort 50000-50100 -Action Allow # 2008 R2 用 netsh命令长一点但是等效 netsh advfirewall firewall add rule nameServ-U PASV dirin actionallow protocolTCP localport50000-50100两条命令做的是同一件事按系统版本选一条。-LocalPort支持范围写法中间用减号写成逗号列表也行但不好维护。规则建完用Get-NetFirewallRule -DisplayName Serv-U PASV*确认一下确实生效了有些环境有组策略下发本地规则建了会被组策略覆盖这种情况得在域策略层面加。云主机还有一层安全组防火墙开了安全组没开照样不通两边都要放。这个是我吃过亏的地方本地防火墙放行了测试一直超时最后发现是云平台的安全组只开了 21数据端口一个没放。4.2 FTPS 与 SFTP 的证书、密钥配置走加密的对接方越来越多Serv-U 支持两种FTPS 是 FTP over SSL还是 FTP 协议套一层 TLSSFTP 是 SSH 文件传输完全不同的协议栈走 22 端口。两个都叫「安全 FTP」但客户端配置完全不同对接前先问清楚对方要哪一种别自己猜。FTPS 需要一个证书。测试环境用自签证书就行生产环境用正式的。证书导入到 Serv-U 之后要绑定到对应的监听器上没绑定的监听器还是明文。自签证书的问题是客户端默认不信任会报证书校验失败两种处理方式把自签根证书装到客户端受信任列表或者干脆用正式证书。对接方是外部系统的时候让对方装证书基本不现实直接上正式证书省事。# 生成一张自签证书用于内网测试正式环境跳过这一步 $cert New-SelfSignedCertificate -DnsName ftp.internal.example -CertStoreLocation Cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(3) # 导出成带私钥的 PFX导入 Serv-U 时用 $pwd ConvertTo-SecureString -String 临时口令 -Force -AsPlainText Export-PfxCertificate -Cert $cert -FilePath D:\cert\servu-test.pfx -Password $pwd-DnsName填客户端实际访问用的名字填 IP 的话部分客户端会校验证书里的 SAN 字段对不上照样报错。-NotAfter设三年生产环境按公司规范定。导出的 PFX 里带私钥文件权限要收紧别放在共享目录里。SFTP 是另一套逻辑用的是主机密钥服务端生成一对客户端首次连接时确认指纹。Serv-U 里启用 SFTP 之后会自动生成主机密钥指纹在管理界面能看到。对接方首次连接会弹指纹确认把指纹发给他们核对这一步别跳过跳过等于放弃了中间人防护。4.3 目录权限与虚拟路径的落点目录这块有两个层面容易混Windows 层面的 NTFS 权限和 Serv-U 层面的目录访问规则。两层都要对任何一层不对都表现为「进得去目录但操作失败」。NTFS 层面服务账户必须有目标目录的修改权限。前面提过服务用本地系统账户跑本地磁盘没问题一旦目录放在网络共享上本地系统账户访问 UNC 路径永远是拒绝。这种情况要么改服务账户要么把目录挪到本地磁盘。改服务账户之后记得重启服务改完不重启不生效这个细节坑过我一次。Serv-U 层面的虚拟路径是个好用但容易配歪的功能。它可以把服务器上任意位置的目录映射成用户主目录下的一个子目录用户看起来是/data实际指向E:\OtherApp\Export。用户主目录: D:\FtpRoot\partner-a 虚拟路径: /data - E:\OtherApp\Export 只读给对接方拉取 /upload - D:\FtpRoot\inbox 只写给对接方上传配虚拟路径的时候被指向的目录同样要满足 NTFS 权限要求很多人只配了虚拟路径映射忘了给源目录授权结果访问/data报 550。另外虚拟路径不要形成环路/a指向/a/b这种写法会让目录遍历陷入死循环客户端直接卡死。真发生了最快的判断方式是看服务端日志里同一个请求重复出现。5. 迁移与排查Serv-U 12.1.0.8 上最容易翻车的五处老机器要下线整套 FTP 服务得搬到新机器上。Serv-U 的迁移其实不难配置就一个文件难的是搬完之后那些「看起来一样但其实不一样」的地方路径变了、账户变了、证书没带过来、防火墙规则没跟过来。5.1 整机搬迁要带走的三样东西要带走的是配置、证书、目录树加上一条容易被忽略的注册表项。REM 第一步停服务不停服务拷配置会拷到写了一半的状态 net stop Serv-U REM 第二步备份主配置文件整个域配置都在这个文件里 copy /Y C:\Program Files\RhinoSoft\Serv-U\Serv-U.Archive D:\backup\Serv-U.Archive.bak REM 第三步导出注册表项安装路径和部分运行参数在这里 reg export HKLM\SOFTWARE\WOW6432Node\RhinoSoft\Serv-U D:\backup\servu.reg /y REM 第四步确认备份文件大小不为 0 dir D:\backup\Serv-U.Archive.baknet stop必须先执行Serv-U 运行期间会持续往配置文件里写运行状态热拷贝出来的文件可能处于中间状态恢复到新机器上表现为部分域丢失或者用户列表不全。WOW6432Node这个路径说明装的是 32 位版本装 64 位版本的话路径里没有这一段导出前先用reg query确认一下。目录树用robocopy搬比复制粘贴靠谱能保留权限和时间戳。REM /E 含空目录 /COPYALL 连权限一起搬 /R:2 失败重试两次 /LOG 留日志 robocopy D:\FtpRoot E:\FtpRoot /E /COPYALL /R:2 /W:2 /LOG:D:\backup\robocopy.log/COPYALL是关键不加的话 NTFS 权限不会跟过去搬完发现所有目录都是继承来的默认权限Serv-U 层面配得再对也白搭。搬完打开日志看最后几行失败项数量必须是 0非 0 的话逐条看原因通常是某个文件被占用。搬完之后要改的地方新机器路径变了域设置里的目录路径、虚拟路径映射、证书文件路径全部要改一遍。这些在管理界面里逐个域检查别指望它能自动适配。5.2 五条踩坑记录第一条登录成功列目录卡半分钟才出来现象是客户端连上很快输入账号密码也很快敲ls之后光标转圈二三十秒后才出结果之后就正常了。原因是服务端在做反向 DNS 解析把客户端 IP 拿去查主机名查不到就等超时。内网没有反解记录的环境每次都等一遍。解决办法是在服务器设置里关掉「允许反向 DNS 查询」或者在内网 DNS 里给客户端网段配好 PTR 记录。我一般选前者快刀斩乱麻。第二条登录成功传文件报 425 Cant open data connection这是被动模式没配通。可能是被动端口段没在防火墙放开可能是 NAT 环境下报给客户端的是内网 IP也可能两者都有。排查顺序先在服务器本机用ftp 127.0.0.1连一下本机能传说明服务本身没问题问题在链路再看域设置里被动模式的固定 IP 填了没有最后核对防火墙和安全组两处端口。第三条目录能进文件列表是空的访问控制列表里少了「列表」权限位。Serv-U 的权限位是独立的「读」不包含「列表」只给读权限客户端能按已知文件名下载但列不出目录内容。这个坑在只读下载账户上特别常见对接方反馈「连上了但看不到文件」第一反应都是去查网络实际是权限位没勾。第四条网络共享目录怎么都访问不了目录放在\\fileserver\share上Serv-U 里配好了路径用户访问一直报拒绝访问。原因是服务用本地系统账户跑这个账户在网络上的身份是机器账户对远程共享没有权限。改服务账户为有权限的域账户重启服务。改完还不行的话检查共享权限和 NTFS 权限两层共享层给「完全控制」、NTFS 层只给「读」最终生效的是两层的交集这个逻辑经常被忽略。第五条迁移到新机器后加密对接方全部连不上明文 FTP 正常FTPS 一律握手失败。原因是证书没搬过来。Serv-U.Archive里存的是证书的引用路径不是证书本身。旧机器上的 PFX 文件没复制到新机器同样的路径下引用断链握手自然失败。处理方式是复制证书文件到新机器路径保持一致或者在新机器上重新导入一次证书并重新绑定监听器。迁移清单里我后来固定加了一条证书文件单独列出来跟配置一起搬。6. 装完怎么验证三层自检把 FTP、FTPS、SFTP 全跑一遍装完不做验证等于把问题留到对接方那边爆发。我的做法是三层自检从内到外逐层排除。第一层在服务器本机绕开所有网络因素只验证服务本身是活的。用命令行客户端连回环地址走一遍登录、列表、上传、下载、删除。REM 本机自检只验证服务本身 ftp 127.0.0.1 REM 输入用户名密码后依次执行 dir put D:\backup\test.txt test.txt get test.txt test-download.txt delete test.txt bye每一步都要看返回码。230是登录成功226是传输完成550是权限或路径问题425是数据连接问题。本机这一层都不通就别往下测了先把服务和配置弄对。第二层从内网另一台机器测验证网络链路。这一层能测出防火墙和被动模式的问题。用同一个账号在客户端机器上执行同样的操作重点看传输过程中有没有卡顿、大文件能不能续传。测试文件不要用小文件至少传一个 500MB 以上的小文件瞬间传完很多问题暴露不出来。第三层从对接方那一侧测验证加密和外部可达性。这一层我一般准备一张检查表让对接方按项回复比来回问「能连上吗」高效得多。检查项验证方式通过标准控制连接telnet 服务器 21返回 220 欢迎信息登录认证客户端输入账号密码返回 230目录列表执行ls/dir3 秒内返回完整列表大文件上传传 500MB 以上文件完成且校验一致断点续传中途断开后重新传从断点续上不重头加密连接FTPS 或 SFTP 客户端连接握手成功证书或指纹匹配权限边界用只读账号尝试上传被拒绝返回 550大文件那项一定要做校验不只看传完了没。我习惯传完在服务器上算一遍哈希跟源文件比对网络抖动导致的静默损坏只有这一步能查出来。最后还有一个习惯装完当天就把Serv-U.Archive、证书文件、注册表导出、防火墙规则列表、验证结果表格五样东西打包放到备份目录文件名带上版本和日期。从那以后我每次装任何一台文件服务器都强制走一遍这个打包流程——不是怕装的时候出错是怕半年后机器蓝屏重装发现当初怎么配的全忘了只能从头再猜一遍。希望帮到你。本文还有配套的精品资源点击获取