Netapp存储FTP功能配置
平时工作中总有人问我,现在都什么年代了,还有人在用FTP传数据?说实话,在企业存储和业务系统对接这块,FTP不仅没被淘汰,反而活得挺好。老旧的业务系统、第三方数据交换平台、跨网段文件采集任务,很多都只认FTP协议。我前段时间就帮一家客户在某品牌的Netapp存储上,从零开始把FTP功能配置了起来。这活儿看着简单,实际上一头扎进去全是细节,从SVN配置到导出策略,再到认证权限和防火墙设置,每一步都藏着坑。今天把整个配置过程完整复盘一下,包括中间踩过的坑和排除思路,给后面要搞这块的兄弟留个参考。
FTP在Netapp存储上跑,本质上不是简单开个服务就完事,它是一个完整的协议栈对接流程。因为Netapp存储默认不启用FTP功能,需要先在ONTAP中开启相应协议服务,再配置SVM(存储虚拟机)、数据逻辑接口(LIF)、导出策略和用户认证,这些环节缺一个,连接就失败。老实说,很多人配置完FTP连不上,排查半天最后发现是导出策略没放行,或者FTP用户没有映射到Unix账号,这类小问题特别容易让人头大。这篇文章会把完整链路捋一遍,从最基础的协议选型讲到最后能正常上传下载文件,适合刚接触Netapp的运维新人,也给有经验的工程师做个避坑清单。
1. 项目背景与整体设计思路
1.1 为什么企业还在用FTP对接存储
在准备配置之前,先得搞清楚一个问题,FTP都这么老了,为什么还有客户指定要在存储上开FTP服务?
我碰到的实际需求大致有三类。第一类是老的业务系统对接,比如某些生产管理系统、财务系统的文件交换模块,开发年代比较早,当时留下的代码就只支持FTP协议,不会走NFS或CIFS,更不要提SFTP。第二类是跨组织、跨部门的数据递交场景,对方单位的交换服务器只开放FTP端口,两边要定期传输批处理文件。第三类是一些自动化脚本和定时任务,很多运维平台内置的传输插件并不支持复杂的SFTP密钥配发,反而FTP账号密码的方式它们最省事。
所以说,FTP不是不好用,而是在特定环境里它就是最容易被各方接受的公约数。对于存储侧而言,Netapp ONTAP原生支持FTP和FTP over SSL(FTPS),相较于另外起一台FTP服务器软件,省了单独的服务器成本和维护节点,数据直接在存储上读写,对带宽利用也更直接。只要控制好访问权限和网络安全边界,FTP照样可以做到实用与安全兼顾。
1.2 配置方案选型:SVM按需开启FTP
Netapp存储上的FTP配置,核心思路是以SVM为边界来做协议服务。一台Netapp存储可以创建一个或多个SVM,每个SVM相当于一个独立的文件服务实体,拥有自己的命名空间、逻辑接口、导出策略和安全认证方式。你可以理解为每台SVM就是一套大楼的门禁系统,FTP功能就是在门禁上开一个专用通道,进来以后能走到哪个楼层、能进哪几个房间,分别靠导出策略和账号权限来管控。
在具体选型上要注意,每个SVM同一时刻只能有一个FTP服务实例在运行。比如你建了三个SVM,想让三个SVM同时提供FTP服务,这在ONTAP上默认是不支持的,同一时间所有SVM里只能有一个FTP服务处于活动状态。所以在规划初期就要想清楚,到底是单独用一个SVM来做FTP业务,还是把FTP和现有业务合并在一个SVM里。我给客户做的方案就是单独创建一个专用SVM做FTP数据交换,好处是权限收敛、流量隔离、后期排查问题也简单,坏处是需要额外规划IP和存储资源,但对于企业核心数据交换场景,这种隔离绝对是值得的。
1.3 功能轮廓:FTPS模式与普通FTP模式并存
ONTAP的FTP支持两种模式:普通FTP和FTP over SSL(FTPS,通常叫隐式FTPS)。普通FTP就是传统21端口的明文传输,密码和数据都裸奔,只适合在公司内网、管理网段等受信环境使用。FTPS则是在连接建立初期就通过SSL/TLS握手把整个会话加密起来,端口通常是990,需要客户端也支持FTPS方式。
我这边建议客户在生产环境优先选用FTPS,即使只是小文件传输也建议开启加密。因为运维审计和等保合规都盯得很紧,明文FTP的账号密码一旦被网络抓包,问题性质就变了。但如果某些老客户端真的不支持FTPS,那普通FTP至少要限制源地址,也就是只在防火墙或者存储的IP过滤规则中允许特定来源IP访问。
2. 配置前置条件与基础环境准备
2.1 检查License和FTP支持的协议组件
很多人不知道,Netapp的FTP/FTP over SSL功能不是装上去就能用,它依赖基础NFS License组件。理论上,只要存储的License中有NFS基础授权,FTP服务就能启用,不需要额外的FTP专属License。但我在实际配置中还是建议先到命令行里确认一下:
::> system license show看一下NFS License字段的状态,如果显示的是“合法”或者“有效”,就可以继续;如果是“未安装”或“过期”,哪怕界面能开FTP,最终客户端连接也可能起不来。另外,FTP依赖SVM的NFS导出逻辑,因为FTP访问的本质上还是通过导出策略控制的FlexVol卷。
2.2 创建专用SVM与数据LIF
配置FTP服务之前,先在存储上准备好了专门的SVM和数据逻辑接口(LIF)。
创建SVM的命令很直白:
::> vserver create -vserver svm_ftp -rootvolume ftp_root -aggregate aggr1 -rootvolume-security-style unix需要注意的是,rootvolume的security-style,如果创建的是面向FTP+NFS混合访问的环境,建议直接用unix风格,统一权限处理逻辑。如果整个SVM只走FTP,不搭配CIFS,unix风格会省去很多SMB映射的麻烦。当然,如果是Windows环境习惯的客户,也可以后改,但改组会涉及现有安全描述符的转换,麻烦且容易出权限问题,所以一开始就要想好。
SVM创建好之后,给它配上数据LIF。FTP和其他NAS协议共享同一LIF即可,不需要单独起一个仅供FTP用的接口。但IP地址规划要清楚,如果要限制只有办公网段能访问FTP,那就把LIF放在对应的广播域中。命令参考:
::> network interface create -vserver svm_ftp -lif lif_ftp_1 -role data -data-protocol nfs -home-node node01 -home-port e0e -address 10.10.12.20 -netmask 255.255.255.0注意data-protocol参数,如果SVM打算以后也跑CIFS或者NFS,可以写成nfs或者不限,实际数据协议在LIF上可以同时承载FTP、NFS等类型,因为FTP走的是TCP端口和连接关系,和NFS的端口栈不同,天然共存没有问题。我习惯把这一个LIF同时挂NFS和FTP,反正不同协议之间互不影响,少占IP资源。
2.3 启动和停止FTP服务的两条命令
SVM准备好、LIF建好之后,就能在SVM上启动FTP服务了。ONTAP的FTP服务启停命令是在vserver services ftpd这个上下文里完成的。
先启用:
::> vserver services ftpd enable -vserver svm_ftp如果想停掉:
::> vserver services ftpd disable -vserver svm_ftp如果不带-vserver参数,默认会在当前vserver上下文里执行。如果所在集群有多个SVM,一定得显式带上-vserver参数,否则容易操作到别的SVM上,酿成服务停错事故。这个“上下文默认值”问题,我吃过亏,所以现在写命令一律加显式参数,不依赖系统默认。
2.4 配置FTP根目录与默认FTP目录
FTP服务启动后,客户端登录进去看到的初始目录,默认是SVM的root volume。但这往往不是我们想要的,因为root volume下面空间规划一般是零散的,真正的业务数据大概率在独立的数据卷里。这时候有两种做法:一种是在FTP账号的家目录中设置指向具体卷的路径;另一种是直接把FTP根目录参数指向一个业务卷。
ONTAP中通过vserver services ftpd modify来设置FTP根目录相关属性:
::> vserver services ftpd modify -vserver svm_ftp -root-directory /vol/ftp_public这条命令里的-root-directory参数,会让FTP用户登录后直接被定位到指定卷的根目录。但我通常不是很推荐把整个卷根目录直接晾给FTP,更好的做法是在卷下再建一个子目录作为FTP专属空间,比如在volume里创建ftp_root目录,然后权限控制到这个目录。这样就算账号被攻破,黑客看到的也只是这个子目录的视图,而不是整个卷的目录列表,风险相对较小。子目录的方式可以用-default-directory参数来设置,具体细节看后面的实操部分。
3. 核心配置环节:导出策略、用户认证与访问权限
3.1 理解FTP和导出策略的关系
很多刚接触Netapp的同事都很好奇,为什么FTP连接都通了,但登录成功后列目录却报Permission Denied,或者干脆卡住无法切换路径?根源在于,ONTAP的FTP协议虽然由ftpd进程提供,但最终落到文件系统层面的访问控制,走的还是NFS那一套导出策略和Unix权限体系。
什么概念呢,你可以把导出策略理解成一张“门禁表”,而Unix文件权限是“房间锁”。FTP用户的TCP连接到了存储,只是到了大楼门口,能不能进入某个具体的卷和目录,还需要门禁表放行。如果导出策略没有为对应客户端IP或网段配置一个带访问权限的规则,那么即使账号密码完全正确,FTP会话也无法读取文件列表。
这就有个非常经典的坑:NFS挂载没放行、FTP登录也报但目录为空。很多老手都会在检查了UNIX文件权限后陷入死胡同,忘了回头去看导出策略。所以在配置FTP的时候,记得同步检查SVM的数据卷导出策略,尤其当这个卷还被NFS同时使用时。
3.2 配置导出策略规则:放行FTP客户端网段
以我刚才创建的svm_ftp为例,对应的数据卷可能是vol_ftp_data,我们为它配置一条允许内网网段读写的导出规则。
::> vserver export-policy rule create -vserver svm_ftp -policyname vol_ftp_data_export -protocol nfs -client-match 10.10.12.0/24 -rorule any -rwrule any -superuser none这里有个细节值得展开说。FTP访问在ONTAP内部的映射机制里,最终的使用者会以Unix用户身份去访问文件,所以导出策略里的-rorule和-rwrule要设置为any,但同时-superuser不能随意设为any,否则客户端连接后如果以root身份映射,权限会放大到整个卷的管理级权限。建议安全收敛,-superuser设置为none,就是不允许客户端以超级用户权限挂载。如果确实需要某个账号能够完全控制目录,应该用普通Unix用户配合目录属主权限来控制,而不是靠superuser参数大开方便之门。
还有,如果FTP客户端来源比较分散,规则比较多,可以用多个client-match来分开写,比如先放行业务网段,再放备份网段。每条规则按顺序从上到下匹配,实际使用中我喜欢把更具体的IP放在前面,把大网段放在后面,这样可以避免大网段把某些原本要走特殊权限的地址提前吞掉。
3.3 配置FTP用户认证:匿名、本地认证与PAM集成
Netapp存储上的FTP认证有几种模式。在vserver services ftpd modify的参数中,有个-authentication-mode,可选项一般是anonymous、ftp-user和none。
- anonymous模式:允许匿名访问,这个除非是特定公开下载场景,一般不建议在生产环境开启。
- ftp-user模式:要求使用FTP用户和密码进行认证,可以配合SVM的本地用户和LDAP/AD域用户。
- none模式:表示不做FTP层面的额外认证,一般不会单独使用,因为它容易造成无凭据访问。
我实际场景中用得最多的是ftp-user模式。客户环境往往有一套企业AD域或者LDAP,Netapp SVM可以加入域,然后FTP用户通过域账号认证。这样好处是不用在存储上单独维护密码,账号生命周期跟着AD走,人员离职自动失效。但如果客户这边没有域控,那就直接在SVM里建本地登录用户:
::> vserver services ftpd modify -vserver svm_ftp -authentication-mode ftp-user ::> vserver security login create -vserver svm_ftp -user-or-group-name ftp_user1 -application ftp -authmethod password注意,创建本地用户时,-application ftp这个参数很重要,它决定了这个账号只在FTP协议场景下生效。如果你创建账号的时候忘了指定application,后面登录时会发现FTP登录总是认证失败,因为你还没有为FTP应用添加对应的登录许可。
另外,即使认证模式是ftp-user,ONTAP还是会把FTP用户映射到Unix身份去访问文件系统。没有密码也映射不了,所以在创建本地用户之后,需要为它设置一个Unix用户映射。如果这个本地用户同时也要在存储里访问NFS导出的文件,建议先创建同名的Unix用户,再把FTP用户和Unix用户绑定:
::> vserver name-mapping create -vserver svm_ftp -direction nfs-ftp -pattern ftp_user1 -replacement ftp_user1_unix这步操作极其容易漏。如果漏了,FTP客户端输入账号密码后,存储侧找不到对应的Unix身份,同样会导致会话异常,甚至登录成功之后对文件没有权限。
3.4 FTP根目录限制与目录视图隔离
对于FTP服务,账号进来之后落在哪个目录,也是一个需要重点考虑的点。ONTAP的vserver services ftpd modify支持两个关键路径参数:-root-directory和-default-directory。
一个是FTP进程的根目录,一个是用户登录后默认进入的目录。如果只设置root-directory到一个卷,但不对default-directory做设定,用户登录后就在root-directory的根上。如果想要不同账号登录后进到不同业务子目录,就需要为每个用户设置不同的默认目录,比如ftp_user1进来直接到/vol/ftp_public/user1,ftp_user2进来直接到/vol/ftp_public/user2。
设置命令是:
::> vserver services ftpd modify -vserver svm_ftp -root-directory /vol/ftp_public -default-directory /vol/ftp_public/user1但这里有个限制,default-directory只能设置一个全局值,做不到按用户分开多个路径。如果确实需要多用户各进各的目录,那就要靠纯Unix权限控制,让用户在根目录下列表时只能看到自己有权限的目录,其他目录列不出来。这需要在卷下的子目录设置好所有者和权限位,比如user1的目录属主是ftp_user1,权限为700,user2的目录属主是ftp_user2,权限为700,这样它们互相之间看不到对方的东西。这是一个很常见的目录视图隔离做法。
这部分做得好的话,多个业务线共用一个FTP服务就可以不用建多个SVM,省资源也省管理成本。但是要注意权限设置时别只改目录要求,因为卷的根目录的默认权限可能是755,那样用户虽然进不了别人的子目录,但可以在根目录下看到别人的目录名。要求严格的话,把根目录的权限改到711或者750,就能只保留进入和列出自身子目录的权限。
4. 关键细节优化与安全配置
4.1 开启FTPS加密通道
之前提到,生产环境尽量开FTPS。ONTAP开启FTPS需要两件事:一是给SVM配置SSL证书并启用FTPS,二是客户端得用支持FTPS的软件,比如FileZilla、WinSCP等。
启用FTPS的命令大致是在vserver services ftpd modify里把-enable-ftps参数改成true:
::> vserver services ftpd modify -vserver svm_ftp -enable-ftps true但信号到这里还没完,FTPS必须和证书绑定,否则客户端连接过来会报证书不可信或握手失败。证书可以用存储自签名证书,但那样客户端每次都会弹警告,运维体验不太好。规划时可以考虑提前导入企业内部的CA证书,这样客户端首次信任后,后续不会再出现证书告警。
证书和ftps具体绑定,需要查看vserver ssl的配置。我通常建议在配置FTP之前,先确认SVM是否已经有可用的SSL证书,免得FTP已经启用后,FTPS又连不上,再回头补证书,排查链路更长。
4.2 启用FTP always-login和连接审计
ONTAP的ftpd还提供一些连接控制的参数,日常中容易被忽略,但生产维护时往往很关键。
一个比较实用的是:-always-login。这个参数如果设置为true,FTP用户每次连接都必须输密码,不能使用匿名FTP进行部分命令交互。我记得某些老式FTP客户端在连接时不会主动带账号密码,需要进入交互式登录流程。开启-always-login反而可以强制客户端进入标准认证流程,避免某些脚本假登录把FTP的空会话数占满。
另外,ONTAP里FTP会话的审计日志是跟着vserver services ftpd一起走的,可以用:
::> vserver services ftpd show查看当前FTP服务状态和启用的认证模式。要想查看具体会话日志,在EMS(事件管理系统)事件里可以筛选出FTP相关事件。生产环境建议把级别调到notice或info,才能确认客户端连接来源、认证结果和断连原因。有时候客户端反馈传文件到一半断开,翻存储日志你会发现是连接空闲超时被服务端切断,-timeout参数可以调整空闲断开策略。默认值对某些长时间挂机客户端可能太短,具体数值要看业务实际情况,之后可以在modify里调大。
4.3 防火墙与被动模式端口规划
FTP这个协议,最让人头疼的就是主动模式和被动模式的端口差异。主动模式下,FTP客户端连服务器的21端口,然后服务器主动连客户端的随机端口,这在现代网络环境里基本会被防火墙拦头打断。被动模式下,客户端连服务器21端口,然后再连服务器开放的一个高位数据端口区间。
所以Netapp上启用了FTP后,如果客户端在远端跨网段访问,必须提前在防火墙上放行21端口(或FTPS的990端口),还要放行被动模式的数据端口段。ONTAP的FTP被动端口范围需要通过vserver services ftpd modify里的相关参数去设置,比如把范围限定在某个连续区间:
::> vserver services ftpd modify -vserver svm_ftp -pasv-address 10.10.12.20 -pasv-min-port 50000 -pasv-max-port 50100-pasv-address指定被动模式回复给客户端的IP地址,如果LIF的IP和客户端实际访问的IP不一致,比如经过了NAT,这个参数尤其重要。如果不写,服务器会默认用LIF的IP回复,客户端在NAT环境下连接数据端口时就会失败。
实践中最容易翻车的坑就在这里。很多人在防火墙上只放了21端口,结果列目录和传文件时卡死,抓包一看,客户端在尝试连接一个高位端口,防火墙直接丢包。所以配置Netapp FTP,被动端口规划一定要和网络同事提前沟通,把端口范围固定下来,在防火墙上同步放行,不然就算存储侧配置全对,连接照样跑不通。
4.4 FTP与SMB/NFS并存时的权限冲突
客户环境经常出现同一个卷既通过NFS给Linux服务器挂载,又通过FTP给业务部门上传文件。这种场景下,最容易出现权限冲突。FTP落地的文件,属主和权限位,取决于FTP账号映射到的Unix用户,而不是Windows域账号。如果FTP上传的文件属主是ftp_user1,而NFS挂载的Linux进程是以root或者另一个uid运行,两边就会因为属主不同产生权限隔离问题。
为了避免这种SMB/NFS之间的权限混乱,建议在规划阶段就把FTP和NFS的目录区分开。比如卷下建两个目录,nfs_data和ftp_data,分别赋予不同的属主和权限,不同协议各管一摊,互不干扰。如果实在避免不了同一个目录多协议访问,那就需要让FTP映射的Unix用户和NFS客户端使用的账号对齐,统一uid和gid。
这里特别提醒一句:不要轻易在存储层直接用chmod 777这种权限来解决问题,一旦开放了777,后面任何安全审计都过不了,业务数据的安全性也没法保证。权限规划还是要认真做,该建用户建用户,该分组分组。
5. 常见故障排查与实操心得
5.1 连接失败类问题排查思路
我把自己配置过程中遇到的高频问题和对应的排查思路整理了一个速查表,给后面的人参考。这些故障表现和原因归类如下:连接直接被拒,多是服务没启动或防火墙挡了21/990端口;连接能建立但登录时报“530 Login incorrect”,一般是账号没建或application没指定为ftp;登录后列目录为空或报权限错误,优先查导出策略和Unix权限;传输文件时报“425 Can't open data connection”,多半是被动模式端口段未放行或NAT场景下pasv-address没配置。
FTP连接问题速查表
| 故障现象 | 常见原因 | 排查思路 |
|---|---|---|
| 连接被拒绝 | FTP服务未启动或端口被防火墙拦截 | 检查ftpd状态、放行21/990端口 |
| 登录认证失败 | 本地用户未创建或未绑定ftp应用 | 创建账号并指定application为ftp |
| 登录成功但目录为空 | 导出策略未放行或Unix权限不足 | 检查导出规则和目录属主/权限位 |
| 列表和传输卡住(数据连接失败) | 被动模式端口段未放行或NAT环境需配pasv-address | 固定被动端口范围并在防火墙放行 |
| 莫名断连 | 空闲超时或客户端/服务端FTP模式不匹配 | 调整timeout参数、匹配主动被动模式 |
| 文件上传后属主不对 | FTP用户与Unix用户映射缺失 | 检查name-mapping并修正用户映射 |
5.2 一个典型的FTPS证书交互案例
我在做FTPS调试的时候有一次特别无语的体验。存储端把FTPS开起来后,用FileZilla连接,结果客户端直接报了证书错误,大概意思是证书不受信任,而且是自签名证书,所以拒绝继续。我当时第一反应是存储的证书过期了,于是去system license和security certificate show查看,发现证书有效期没问题,但证书类型是默认的自签名证书,且没有加入到客户端所在机器的信任列表里。
这里面的问题在于,FTPS的证书校验比HTTPS还严格,客户端浏览器的证书信任库,和操作系统的证书信任库,虽然大体相通,但像FileZilla这种客户端又有自己的一套证书管理界面。你必须在FileZilla里手工信任这个自签名证书,或者直接用企业CA签发的证书,否则客户端怎么连都是证书握手失败。
后来我就学乖了,凡是生产环境要启用FTPS,我会提前申请一张企业CA签发的服务器证书,把证书和私钥按格式导入到SVM的SSL配置中,再用vserver ssl modify绑定到指定服务。这样既不用在每台客户端手工添加信任,也给后续等保合规留了记录。还有一个细节,导入证书后记得检查证书的“服务器名称”,也就是Common Name(CN),一定要和FTP访问的域名或IP对应,否则就算整个链路都正常,客户端还是会因为域名不匹配而中断连接。
5.3 超时断连与批量上传的应对策略
有一次客户反馈,说是大量文件传了一个小时后,FTP连接掉线了,任务失败。排查后发现是空闲超时(timeout)给惹的。FTP客户端在长时间分批次传文件的过程中,某一段时间内没有数据传输,存储端空闲断连,客户端也没有重连机制,于是整个任务就卡死在那里。
解决办法有两个方向。一个是把服务端timeout调大,设置足够长,保证整个任务期间不会因为空闲而断开:
::> vserver services ftpd modify -vserver svm_ftp -timeout 3600另一个方向是在客户端侧设置“保持活跃”机制,开启FTP的NOOP命令定期发送,这样可以维持会话不被服务端清理。但注意,Netapp的timeout参数设得过大,也会让存储侧长期挂着一堆僵尸连接,浪费少量内存文件描述符,所以也不能无脑调大。我一般给的建议是:正常情况下设置600秒(10分钟),批量传输关键任务尽量在客户端开启连接保活,让客户端定时发送NOOP,服务端timeout设成900秒左右就算比较稳妥了。
5.4 多SVM环境下FTP服务互斥的坑
前面反复提到的多SVM下FTP互斥问题,实际故障现场我也碰到过。客户有两个SVM,一个做文件共享,一个做备份归档,两个团队分别提了工单要求开FTP,我就分别在两个SVM上执行了vserver services ftpd enable。结果第二个SVM的命令执行完,第一个SVM的FTP立刻就不通了。
这事的原理是,ONTAP里的ftpd服务在整个集群里同一时间只支持一个实例在运行。你启用第二个SVM的FTP时,它会抢占前一个服务实例,虽然两个SVM的命令都能执行成功,但在底层FTP协议服务却是全局排他的。所以规划阶段一定要约定好,到底由哪个SVM对外提供FTP服务。假设真的需要多个业务线用FTP,可以通过在一个SVM下建多个卷和多个FTP目录来做隔离,而不是寄望于多SVM同时开FTP。
我当时排查这个断连问题的时候,一开始也以为是防火墙或者SVM网络问题,检查了一圈才发现是第二个SVM启用了FTP,第一个SVM的ftpd被自动停掉了。所以如果你发现自己配置的FTP服务偶尔通、偶尔不通,又排除了网络层面的因素,很值得去检查一下是不是有其他SVM抢占了FTP服务实例。
5.5 FileZilla与WinSCP实测对比
配置完FTP之后,我在测试环境里用FileZilla和WinSCP做了几轮功能验证,这里记录下两个客户端在实际对接Netapp FTP时的表现差异。
FileZilla在FTPS模式下兼容性很不错,支持显式和隐式FTPS两种模式,我推荐使用隐式FTPS配置,连990端口,对整个会话加密,比较稳妥。配置时需要指定“使用显式的FTP over TLS”或“使用隐式的FTP over TLS”根据实际开启模式选择,如果选了和存储配置不匹配的模式,连接会直接在握手阶段失败。
WinSCP默认偏向SFTP,很多人用它连Netapp FTP时第一反应是找不到SFTP选项,实际上需要手动把文件协议改成FTP或者FTPS,再对应填写端口和加密方式。WinSCP对显式FTPS的支持比较好,但对隐式FTPS需要额外设置。另外,WinSCP对目录列表中Unicode文件名的支持比FileZilla要好一些,比如存储卷下有中文名文件时,WinSCP显示更不容易乱码。如果业务上经常有中文文件名的场景,我建议优先考虑用WinSCP测试。
还有一个小细节,测试完单文件传输后,最好测一次多个文件的批量传输,因为批量传输过程中如果文件名带特殊字符,客户端和服务端之间的字符集协商不一致会直接造成任务中断,那种问题在单个文件测试时根本暴露不出来。测试环境的文件名最好覆盖普通英文字母、数字、中文和特殊符号,尽量贴近生产实际情况。
6. 从配置到交付:运维检查清单
最后把这套配置从头到尾检查一遍,整理成一份可直接使用的复盘清单,给负责交付的同事参考。第一,确认NFS基础License有效,这是FTP功能启用的前提。第二,确认SVM、LIF、广播域规划合理,避免多个SVM抢用FTP实例。第三,确认FTP服务启动,FTP认证模式为ftp-user。第四,确认FTP用户已创建并绑定ftp应用,且完成了Unix用户映射。第五,确认导出策略放行客户端网段,且superuser权限为none。第六,确认FTPS证书有效且CN匹配,被动模式端口段固定并已跟防火墙对齐。第七,确认根目录和默认目录按业务划分完毕,用户权限做好隔离。第八,验证普通FTP和FTPS两条链路都能正常上传、下载、删除、重命名文件,同时测试批量传输和大量小文件场景,确认超时参数和生产匹配。
个人在实际操作中的体会是,Netapp存储FTP配置本身命令不多,大部分时间其实是花在跨部门协调和细节检查上,尤其是导出策略、被动模式和FTP账号绑定这三点,属于“配置三连坑”。按照上面的检查清单走一遍之后,基本能避免初次部署时绝大多数连接异常问题。如果后面有人遇到类似的FTP不通的情况,也可以对照本文的故障速查表做逐步排查,比从头盲查日志要高效得多。