最近需要配置一个支持ipv6的vsftpd服务,但只有ipv4的服务能正常工作。ipv6的客户端连上后,除了pwd命令可以执行外,其他命令都报550Permissiondenied.Passivemoderefused.的错误。经过一番琢磨后发现了问题的所在。下面我来描述下我遇到的问题及解决方法。希望能够帮助到有同样困扰的朋友。
1.本来在/etc/vsftpd/目录下创建两个配置文件,同时监听ipv4和ipv6。
vsftpd.conf
vsftpdv6.conf
按照提示,分别配置如下:
listen=YES
#listen_ipv6=YES
及
#listen=YES
listen_ipv6=YES
然后在两个配置文件中cmds_allowed都是支持这些命令:
FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST,RETR
但是这些配置虽然能使客服端使用ipv6的地址连接上服务端,却无法使用除了pwd之外的命令。报错信息如上。
2.后来在客服端中打开debug模式,发现了两个命令,EPSV,LPSV
搜了下,原来cmds_allowed中的PASV只支持ipv4协议。EPSV才能同时支持ipv4及ipv6。可以参考:
https://superuser.com/questions/801514/in-ftp-what-are-the-differences-between-passive-and-extended-passive-modes
3.最后在listen_ipv6的配置文件的cmds_allowed配置项中添加了EPSV及LPSV。然后就能成功使用ls,cd这样的命令,能成功上传文件了。(我觉得把PASV换成EPSV就能解决问题了,但还没有尝试。)
原文链接:https://blog.csdn.net/endeavor_99/article/details/82951453