背景
最近玩了下 ftp 服务的搭建,过程并不复杂,但是有两点值得整理记录。
一个是 ftp 相关的配置中有一项违反常规思路的配置,不注意就无法访问 ftp 服务;另一个是用户权限问题,root 用户上传的文件 ,普通 ftp 用户访问、执行删除操作时,操作结果为 false ,文件删除失败,权限问题值得关注。
vsftp
VSFTP 是一个基于 GPL 发布的类 Unix 系统上使用的 FTP 服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是 FTP 服务的安全。
本文通过安装该软件实现 Linux 主机的 FTP 功能。
服务安装
执行 service vsftp start 命令,如果结果显示“Failed to issue method call: Unit vsftp.service failed to load: No such file or directory.” 说明本机未曾安装 ftp 服务。
使用 yum install vsftpd 命令安装 vsftpd :
再次启动服务,OK。
创建 ftp 访问用户
创建一个普通用户,用户的根目录为 ftp 软件下的某个目录:如果需要禁用 ftp 用户通过 shell 登录到系统,可以加上 -s /bin/false 参数。这里创建一个可以登录的 ftp 用户,方便进行文件上传测试。
useradd -d xxx username
操作示例:
创建用户并修改密码。
修改 ftp 配置
vsftp 有三个配置文件,位于 /etc/vsftpd 目录:
这里有一些反常规思路的配置,比如这些配置
ftpusers 指不能访问 ftp 服务的用户;
user_list 则是可以访问 ftp 服务的用户,需要加上刚刚创建的用户。
默认配置下,新添加的用户即使在该文件中添加过了,也是不能访问 ftp 服务的,会存在权限问题:
为了使新加用户能够访问 ftp 服务,需要修改几项配置:1、编辑 user_list ,在最后一行加上刚刚新建的用户 ftptest1;2、编辑 vsftpd.conf ,启用用户列表
这里的 userlist_enable 默认是 YES ,需要改为 NO,才能添加 ftp 用户列表,有点违反人的正常思维,明明启用是 YES,为什么需要改成 NO 后才生效呢?
最后一行是默认文件路径,如果不是用默认的user_list,可以通过该参数修改。重启服务后,在 window 上通过 ftp 命令连接OK:
apach FTPClient 操作
apache 的 FTPClient 删除 ftp 目录上的文件时,如果目标文件没有访问权限,deleteFile 操作不会报错,但是方法返回 false ,这点不太合理,直接返回 false 而没有失败原因对于开发人员来说不好进行排错啊。
测试删除好几遍都失败,后来突然意识到是权限问题,进入目录一看权限果然是。
另外 FTPClient 的 deleteFile 方法的文件名称可以是全路径,也可以仅仅是文件名称,前提是需要先切换到该文件所在的目录。