本地FTP上传文件至Linux服务器报错

本地不是Tomcat服务器测试,生产环境部署vsftpd服务,一开始偷懒使用匿名用户登录ftp上传文件,指定匿名用户关联的路径:

配置/etc/vsftpd/vsftpd.conf文件

匿名用户登录必须配置密码包含@,即邮箱地址,比如anonymous/[email protected]。无法连接到服务器,本地测试连接服务器ftp 192.168.10.12 14888,无法连接。怀疑是防火墙的原因,关闭防火墙之后连接成功,但是不能创建目录和上传文件,修改vsftpd.conf的配置local_umask=022,改为local_umask=000,具有777的权限:

匿名用户可以创建文件夹,但是仍然无法上传文件,网上搜索说是需要使用被动模式,这样ftp服务会分配固定端口来和客户端交互,所以在代码中连接ftp服务器之后添加ftpClient.enterLocalPassiveMode();表示使用被动模式:

ftpClient.connect(hostname, port); //连接ftp服务器
ftpClient.login(username, password);//登录ftp服务器
ftpClient.enterLocalPassiveMode();// 被动模式连接

然后可以上传文件,但是为了安全期间还是新建用户专门用于ftp,并且有需求ftp用户要和指定目录关联,使用命令如下:

useradd -d 目录名 用户名
passwd 用户名

由于使用该命令会自动创建指定的目录,而服务器上已存在该目录,产生了警告,需要删除用户和该目录重新创建用户,需要删除干净,否则会导致创建用户失败:

userdel -rf 用户名

现在就可以使用新建的用户ftp登录了,且登录的是指定的路径,但是服务器防火墙启动之后还是不能上传,由于生产环境防火墙的限制,只对10000以上的端口开放,而被动模式ftp服务分配的端口也是随机的,外网ip也不是固定的,不方便在防火墙加白名单,所以需要修改vsftpd.conf中关于被动模式的端口范围的配置,可以通过配置pasv_min_port和pasv_max_port相同来是客户端上传文件连接的ftp端口固定下来:

现在ftp服务被动模式接收客户端上传的文件就会使用固定端口14000,然后启动防火墙,上传文件也是成功的。

另外,使用Windows部署Tomcat向Linuxftp服务上传文件需要注意路径的问题,因为代码使用的File.separator做分隔符,它是自动识别系统的,Windows系统的路径分隔符是“\”而Linux系统的路径分隔符是“/”,所以如果使用Windows测试linux的ftp服务时一定要注意路径分隔符的问题。

你可能感兴趣的:(Linux)