服务器资源

服务器:阿里云CentOS 7.3

安装部署

检测是否已安装

rpm -qa | grep vsftpd   //如果出现相应版本信息表示已安装如:vsftpd-3.0.2-25.el7.x86_64


否则执行以下命令进行安装:

yum install -y vsftpd


等待安装结束执行检测命令查看到相应版本信息表示安装成功。


配置启动

1、配置文件综述:

  • vsftp的默认安装目录是:/etc/vsftpd/  进入改目录即可看到如下几个文件:

/etc/vsftpd/vsftpd.conf     // vsftpd 的核心配置文件

/etc/vsftpd/ftpusers    //用于指定哪些用户不能访问FTP 服务器。 默认禁用登录名单

/etc/vsftpd/user_list://自定义ftp登录用户名单,具体作用稍后讲解

  • 此外为了控制用户登录目录权限,我们自己在次目录下再新建一个以下文件:

/etc/vsftpd/chroot_list  //登录用户能否跳出其用户家目录的控制名单,具体作用稍后讲解


2、创建ftp登录用户:

通常我们你推荐开放匿名用户登录而使用本地用户(vsftp部署服务器的系统用户),因此这里创建一个本地用户,以备配置vsftp的相关用户名单所用:

  • 创建用户:【useradd -d 用户家目录  用户名】

备注:执行以下命令创建用户seally,同时指定并创建家目录为 /usr/local/ftpworkspace/seally

useradd  -d  /usr/local/ftpworkspace/seally seally

  • 设定用户密码:【passwd 用户名】

passwd seally   //跟着提示输入密码


备注:一般用于ftp的登录账号,最好禁用其登录ssh,因此我们可以执行以下命令,禁用制定的账号登录服务器:【chsh  账号  -s  /sbin/nologin】

chsh seally -s /sbin/nologin


3、开始配置:

  • 编辑user_list,将账号 seally 加入到该文件(如果原来有用户列表,可先删除所有默认用户再加入,每个用户独占一行)

  • 编辑ftpusers,清理掉原有所有默认用户列表,该文件中的用户是ftp黑名单用户,加入其中的账号默认不能够登录。特殊情况下要禁用某些账号时才需要配置进去。

  • 编辑vsftpd.conf,清理掉所有原有配置,将最核心的配置进去,如下贴出一个核心配置,拷贝过去适当修改即可:

#vsftp最核心的配置示例:/etc/vsftpd/vsftpd.conf

#允许本地用户写入文件 设置为YES

write_enable=YES

#开启目录限制名单可写 一律设置为YES 否则启动目录限制功能的的用户不能够登录

allow_writeable_chroot=YES

#启用记录上传下载日志

xferlog_enable=YES

#设置日志目录

xferlog_file=/var/log/xferlog

#启用日志格式化

xferlog_std_format=YES

#开启默认情况下的主动模式数据传输使用20端口

connect_from_port_20=YES

#设置空闲连接的超时时间

idle_session_timeout=6000

#设置数据传输的超时时间

data_connection_timeout=1200

#是否启用独立监听

listen=YES

#自定义服务监听端口

listen_port=21

pam_service_name=vsftpd

#启用主机访问控制机制,设置为YES

tcp_wrappers=YES 


#为了安全性,关闭匿名访问 配置为NO

anonymous_enable=NO

#关闭匿名用户上传文件 设置为NO  即使开启也需 write_enable=YES

anon_upload_enable=NO

#关闭匿名用户创建文件目录 设置为NO

anon_mkdir_write_enable=NO

#开启本地账号登录 配置为YES

local_enable=YES

#设置本地账户登录后的主目录,不设置或设置不存在路径则登录后会到各自家目录

local_root=/usr/local/ftpworkspace/

#设备本地用户上传文件的默认文件掩码(022代表最终文件权限为755)

local_umask=022


#使用限制所有用户只能在自己的主目录

chroot_local_user=YES

#是否启用目录切换限制排除名单功能

chroot_list_enable=YES

#指定目录切换限制排除名单文件路径,即自己创建的chroot_list文件

chroot_list_file=/etc/vsftpd/chroot_list


#登录名单限制类型 NO=user_list名单中的用户可登录  YES=名单中的用户不可登录

userlist_deny=NO

#是否启用user_list登录限制名单功能

userlist_enable=YES

#登录名单文件路径(每个用户独占一行)

userlist_file=/etc/vsftpd/user_list

备注:vsftpd.conf文件中两个比较绕的配置说明如下:

  • 关于登录名单  

由3个配置项【userlist_deny、userlist_enable、userlist_file】共同决定,如果userlist_deny配置为NO表示允许userlist_file中的用户登录,如果userlist_deny设置为YES表示拒绝userlist_file中的用户登录,userlist_enable表示是否启用userlist_file的自定义用户用户列表,开启后即在userlist_deny=NO时控制userlist_file中的账号能够登录,当userlist_deny=YES时userlist_file中的用户不能够登录,因此通常我们会userlist_deny配置为NO,将分配的账号添加到userlist_file中,以达到只有分配的用户可登录。

  • 关于限制目录切换名单 

由4个配置项【allow_writeable_chroot、chroot_local_user、chroot_list_enable、chroot_list_enable、chroot_list_file】共同决定,allow_writeable_chroot一律设置为YES,否则在chroot_local_user开启后用户不能够登录(暂时不明原因,通过测试发现该现象),chroot_local_user表示是否限制所有用户只能在主目录切换,YES=表示所有用户都只能在主目录切换,NO=表示所有用户都可在任意目录切换,为了方便安全管理,通常设置为YES,chroot_list_enable表示是否添加为chroot_local_user的限制添加排除项用户,如果设置为YES则表示chroot_list_file中的用户不受chroot_local_user的限制,且刚好意义与其相反,即如果chroot_local_user=YES限制所有用户,那么chroot_list_file中的用户则不受限制可任意切换目录,如果chroot_local_user=NO不限制所有用户,那么chroot_list_file中的用户则没有这么自由,只能在主目录切换。

综上所述:

登录控制通常情况下的组合设置为如下:

userlist_deny=NO、userlist_enable=YES、userlist_file中加入允许登录的账号。

目录切换控制的组合设置为如下:

chroot_local_user=YES、chroot_list_enable=YES、chroot_list_file中加入允许跳出其主目录的账号。


4、启动服务,浏览器访问测试:

  • 执行以下命令启动服务:

/bin/systemctl  restart  vsftpd.service

使用java客户端登录或是浏览器输入地址 ftp://www.seally.cn/ 其中www.seally.cn为部署vsftp服务器的域名或是ip,根据弹出的提示输入seally用户及其密码即可登录。

扩展配置

    通常我们在创建新用户同时指定好其家目录后,将该新用户添加到ftp登录用户列表文件中后,重启ftp服务新的用户便能够进行登录了,同时该用户的ftp工作目录也便限制在其家目录里面,只能上传文件至其指定的目录,ftp的主配置文件中只能指定一个主目录,因此我们只能把许多用户的家目录建立在此主目录之下,这样有个弊端,不同的用户可以看到别人的目录,因此我们进一步扩展为不同的用户单独指定其家目录,来屏蔽它看到别人的目录:

这里假如又新加了一个ftp用户seally2,目前两个用户的家目录情况是:

seally  -->  /usr/local/ftpworkspace/seally

seally2  -->  /usr/local/ftpworkspace/seally2

    我们主配置文件vsftpd.conf中设置的本地用户主目录为:local_root=/usr/local/ftpworkspace/

因此账号seally、seally2登录后会进入/usr/local/ftpworkspace/ 即能够互相看到彼此的家目录,虽然不能上传文件到彼此家目录里面去,但是也不太合适,因此增加各自的家目录配置来规避这个问题:

  • 创建多用户配置文件目录:

mkdir  /etc/vsftpd/userconfig

  • 进入该配置目录,建立与用户名相同的文件如此处需要为seally建立单独的登录目录:

vi seally  并输入:local_root=/usr/local/ftpworkspace/seally  然后保存。

vi seally2  并输入:local_root=/usr/local/ftpworkspace/seally2  然后保存。

  • 编辑主配置文件vsftpd.conf 加入以下配置项:

user_config_dir=/etc/vsftpd/userconfig/

  • 重启服务在两个账号各自的家目录下放置不同的文件登录查看即可验证!

有需要的小伙伴儿们,赶快试试吧,如果觉得好用,不妨帮我点个赞,鼓励鼓励我在分享的路上永不止步哦...!