1.目的
搭建一个多人使用ftp服务器,进行必要的权限隔离。
2.安装与配置
2.1 安装
我的环境为centos,直接yum install -y vsftpd
2.2 配置文件如下:
#禁止匿名登录
anonymous_enable=NO
#开启本地用户访问
local_enable=YES
#允许写入
write_enable=YES
#
local_umask=022
#
dirmessage_enable=YES
#开启日志
xferlog_enable=YES
#设置ftp-data 端口,默认为20
connect_from_port_20=YES
#记录ftp操作日志
xferlog_file=/var/log/xferlog
#格式化日志
xferlog_std_format=YES
#提示信息
banner_file=/etc/vsftpd/welcome.txt
#将ftp活动目录固定在各用户家目录,在chroot_list为例外,即可以去到其他目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
#被动模式,必须设置为YES
pasv_enable=YES
#
listen=YES
#
listen_ipv6=NO
#pam设置
pam_service_name=vsftpd
#
userlist_enable=YES
#
tcp_wrappers=YES
#使用系统时间
use_localtime=YES
#在user_list 才允许登录ftp
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
2.3 限制在家目录访问配置
主要是下面3个参数chroot_local_user、chroot_list_enable、chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user 是否将所有用户限制在家目录,YES表示开启,NO表示禁用;
chroot_list_enable 是否启动限制用户的名单,YES表示启用,NO表示禁用
chroot_list_file=/etc/vsftpd/chroot_list 是否限制在家目录的用户名单,至于是限制还是排除名单,取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,
其为YES时,全部用户被锁定于主目录,
其为NO时,全部用户不被锁定于主目录。
那么我们势必需要在全局设定下能做出一些“微调”,
即,我们总是需要一种“例外机制“,所以当chroot_list_enable=YES时,
表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全
部用户被锁定于主目录“时(即chroot_local_user=YES),”例外”就
是:不被锁定的用户是哪些;当”全部用户不被锁定于主目录”时(即chroot_local_user=NO),
”例外”“就是:要被锁定的用户是哪些。
2.4 限制用户访问
1、利用pam:配置文件:pam_service_name=vsftpd配置,禁止文件/etc/vsftpd/ftpusers用户登录ftp,初始将root也一并禁止了,需要去除。
2、自身限制:使用userlist_enable、userlist_deny、userlist_file
以下配置为允许user_list中用户访问
userlist_enable=YES # 配置为YES,底下userlist_deny才能生效,进行配置
userlist_deny=NO # 开放部分人员访问
userlist_file=/etc/vsftpd/user_list # 具体开放访问人员名单
3.特殊需求实现
3.1 实现只允许上传,不允许下载
需求:建设一个私网,要求实现一个普通用户只能往私网传输文件,不能拷贝出来,在私网内部上传下载不受限制。
实现:使用ftp完成此项工作,需要两个ftp,数据目录为nfs共享目录,方案如下:(项目基于aliyun搭建,使用很多aliyun上限制方案)
1.配置一个ftp,配置公网,用户只能上传不能下载,对用户暴漏此公网ip
1.1 配置只上传,这个仅对ftp生效。在上面配置文件添加,这个配置文件在man vsftp.conf 找不到也是比较奇怪。
download_enable=NO
1.2 设置好后,使用xftp、winscp 使用sftp协议,还是可以下载,需要将/etc/ssh/sshd_config下面配置文件修改如下,将sftp协议引导错误的引导程序。对用户宣传好使用ftp协议连接。
Subsystem sftp /usr/libexec/openssh/sftp-server.sh
2.再在私网搭建一个ftp,只有私网ip,在私网暴漏此ip,这个ftp不做1中相关配置。
3.两个ftp挂载nfs共享目录,保证数据一致。
以上即可完成上述需求。