一、应用场景介绍

1、需求:

①、行政具有查看所有员工文档权限。

②、部门负责人具有查看该本门所有员工文档权限。

③、员工具有部门及公司的公共目录权限。


2.结构图:

ftp企业应用|文档管理_第1张图片

二、安装配置

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(路由器)、××× 、反向代理(iptables)


三、扩展内容

1、为什么使用虚拟用户映射系统用户

答:所有虚拟用户映射到一个系统用户上,无法实现分组,权限划分。