一、应用场景介绍
1、需求:
①、行政具有查看所有员工文档权限。
②、部门负责人具有查看该本门所有员工文档权限。
③、员工具有部门及公司的公共目录权限。
2.结构图:
二、安装配置
1、配置情况
系统:CentOS 6.8 x86_64
ftp类型:vsftpd
vsftp版本: version 2.2.2
2、安装
[root@localhost ~]# yum -y install vsftpd
3、文件介绍
ftpusers:配置不允许访问FTP用户列表。
user_list:配置不允许访问FTP用户列表。
vsftpd.conf:vsftpd配置文件。
vsftpd_conf_migrate.sh:定义变量和设置脚本。
注意:ftpusers与user_list区别,查看以下配置解释。
4、配置vsftpd.conf
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
配置以下信息:
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=NO xferlog_file=/var/log/vsftp.log xferlog_std_format=YES chroot_local_user=NO listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES local_root=/data/ftpdata pasv_enable=YES pasv_min_port=12345 pasv_max_port=12456 |
说明:
anonymous_enable=NO #禁止匿名访问。
local_enable=YES #允许系统实体帐号(/etc/passw)登录。
write_enable=YES #允许用户上传数据,还要看实际的目录权限。
local_umask=022 #新建目录或文件的权限,目录权限755,文件644。
anon_upload_enable=NO #不允许匿名用户具有上传权限。
anon_mkdir_write_enable=NO #不具有建立目录权限。
dirmessage_enable=YES #进入目录会显示注意内容,显示文档默认 .message 。
xferlog_enable=YES #开启日志。
connect_from_port_20=NO #主动模式传输数据时是有20端口。
xferlog_file=/var/log/vsftp.log #定义日志输出绝对路径。
xferlog_std_format=YES
chroot_local_user=NO #不限制用户在家目录内。
listen=YES #以独立方式启动vsftpd。
pam_service_name=vsftpd #指定使用模块,模块位置/etc/pam.d/vsftpd。
userlist_enable=YES #允许使用抵挡机制禁用账户。
tcp_wrappers=YES #支持tcp wrappers。
local_root=/data/ftpdata #定义ftp数据根目录。
pasv_enable=YES #启用被动模式。
pasv_min_port=12345 #定义最小端口。
pasv_max_port=12456 #定义最大端口。
注意:
userlist_enable=no,user_list列表不生效,列表内外用户都可以登录。
userlist_enable=yes,userlist_deny=no,允许user_list列表以外用户登录,以命令方式登录。
userlist_enable=yes,userlist_deny=yes,允许user_list列表生效,列表以外用户可以登录,默认情况是userlist_deny不存在vsftpd配置中,默认为yes。
5、防火墙配置
[root@localhost ~]# vim /etc/sysconfig/iptables
添加一下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 12372:12512 -j ACCEPT |
或者限定固定IP访问
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 12372:12512 -j ACCEPT |
6、文件结构属性
[root@localhost ftpdata]# ll
drwxrwx--- 3 xq rw 4096 2月 9 00:11 A部门
drwxrwxrwx 2 xq xq 4096 2月 9 18:09 公共
drwxrwx--- 3 xq lf 4096 2月 9 00:11 B部门
drwxrwx--- 5 xq bt 4096 2月 9 17:41 C部门
drwxrwx--- 3 xq lw 4096 2月 9 00:11 D部门
drwxrwx--- 4 xq xq 4096 2月 9 17:15 HR部门
[root@localhost ftpdata]# ll C部门/
总用量 12
drwxrwx--- 2 bt zx 4096 2月 9 17:40 zx
drwxrwx--- 2 bt zc 4096 2月 9 00:55 zc
drwxrwx--- 2 bt zv 4096 2月 10 19:28 zv
drwxrwx--- 2 bt bt 4096 2月 9 17:41 公共
[root@localhost ftpdata]# ll c部门/zc/
总用量 24
-rw-r--r-- 1 zc zc 11940 2月 9 17:09 mod_auth_mysql-3.2.tar.gz
-rw-r--r-- 1 zc zc 4542 2月 9 17:10 asd.png
-rw-r--r-- 1 zc zc 0 2月 10 19:28 testfile
drwxr-x--- 2 zc zc 4096 2月 11 00:16 test
注意:
当zc进入到自己家目录创建属于自己的文件或目录时,文件的所属主和所属组都为zc,C部门bt负责人是没有权限对zc目录的子目录及文件操作。
解决方式:撰写脚本实现部门成员登录创建目录或文件,修改属主为部门负责人,属组为成员本人。
root@localhost ~]# vim modify.sh
#!/bin/sh path=/data/ftpdata #Modify the department members user and group function dept_member(){ for ((i=2;i<=$list;++i)) do a1=`ls -l |awk -v var=$i -F ‘ ‘ ‘NR==var {print $3}‘` a2=`ls -l |awk -v var=$i -F ‘ ‘ ‘NR==var {print $4}‘ ` a3=`ls -l |awk -v var=$i -F ‘ ‘ ‘NR==var {print $9}‘ ` chown -R $a1.$a2 $a3 done } #Traverse the department for d in `ls $path` do if [ $d = 公共 ] then chmod -R 777 $path/$d else cd $path/$d list=`ls |wc -l` dept_member fi done exit |
将脚本加入计划,一分钟执行一次。完美解决部门成员新建文件及目录,负责人无法查看问题。
7、实现外网访问
实现方式:一对NAT(路由器)、VPN 、反向代理(iptables)
三、扩展内容
1、为什么使用虚拟用户映射系统用户
答:所有虚拟用户映射到一个系统用户上,无法实现分组,权限划分。
本文出自 “Scorpions丶毒” 博客,请务必保留此出处http://scorpions.blog.51cto.com/7138036/1918002
原文地址:http://scorpions.blog.51cto.com/7138036/1918002