Learning together

Learning together with open source fans. QQ群:8021887


  • 网站首页

  • 站内留言

  • 关于本站

  • 我的相册

  • 联系羽飞

  • 内容订阅
  • 第五章:VSFTP服务全攻略

    作者: 羽飞 | 发布时间: 星期五, 02/05/2010 - 12:20 |

    内容简介
    FTP服务的简介
    FTP的工作原理
    主动模式和被动模式
    VSFTP服务的安装
    VSFTP的三种用户形式
    案例详解

    FTP服务的简介
    FTP是文件传输控制协议。它可以使文件通过网络从一台主机传送到另一台主机上,而不受计算机类型和操作系统类型的限制。无论是PC机、服务器、大型机,还是DOS操作系统、Windows操作系统、Linux操作系统,只要双方都支持FTP协议,就可以方便地传送文件。

    FTP的工作原理
    FTP服务的具体工作过程如下(图1)。
    ① 当FTP客户端发出请求时,系统将动态分配一个端口(如1032)。
    ② 若FTP服务器在端口21侦听到该请求,则在FTP客户端的端口1032和FTP服务器的端口21之间建立起一个FTP会话连接。
    ③ 当需要传输数据时,FTP客户端再动态打开一个连接到FTP服务器的端口20的第2个端口(如1033),这样就可在这两个端口之间进行数据的传输。当数据传输完毕后,这两个端口会自动关闭。
    ④ 当FTP客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放掉。

    图片1.png

    主动模式和被动模式
    根据数据连接的建立方式,FTP服务的数据传输可以分为Port(主动)模式和Passive(被动)模式。
    主动模式是FTP服务器向FTP客户端传输数据的默认模式。当FTP客户端请求以主动模式传输数据时,由客户端向服务端发送准备接收数据的IP地址和端口Y,该端口是大于1024的非特权端口。服务端主动发起并建立连接到指定的IP地址和端口Y,所以称为”主动”模式。
    在被动模式下,客户端通过PASV命令获得服务端IP地址和数据端口,然后向服务端发起连接请求,从而建立数据连接。因此,服务器端只是被动地监听在指定端口上的请求,所以称之为”被动”模式。

    主动模式和被动模式
    在主动模式中,FTP客户端随机开启一个大于1024的端口X向服务器的21号端口发起控制连接请求,然后开放X+1号端口进行监听;FTP服务器接受请求并建立控制连接会话。如果客户端在控制会话中发送数据连接请求,那么服务器在接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口X+1进行数据传输 。(图2)

    图片2.jpg

    被动模式的控制连接和数据连接都是由FTP客户端发起的。
    首先FTP客户端随机开启一个大于1024的端口X向服务器的21端口发起连接,同时会开启X+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个端口Y(20)进行监听,然后用PORT Y命令通知客户端,自己的数据端口是Y。客户端收到命令后,会通过X+1号端口连接服务器的端口Y,然后在两个端口之间进行数据传输。这样就能使防火墙知道用于数据连接的端口号,而使数据连接得以建立。 (图3)

    图片3.png

    vsftp服务的安装
    rpm -qa |grep vsftpd
    rpm -vih vsftpd-2.0.5
    rpm -ivh db4-utils

    Vsftpd的三种用户形式
    1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问
    2、本地用户形式:以/etc/passwd中的用户名为认证方式
    3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。
    对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。

    匿名用户名设置
    anonymous_enable=YES   #是否启用匿名用户
    no_anon_password=YES   #匿名用户login时不询问口令

    下面这四个主要语句控制这文件和文件夹的上传、下载、创建、删除和重命名。
    anon_upload_enable=(yes/no); #控制匿名用户对文件(非目录)上传权限。
    anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
    anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
    anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名

    注:匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。
    若想让匿名用户能上传和删除权限,必需设置
    write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限的话,就要开启他)
    anon_root=(none) #匿名用户主目录
    anon_max_rate=(0)#匿名用户速度限制
    anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
    chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
    chown_username=whoever #匿名上传文件所属用户名

    本地用户设置
    write_enable=YES #可以上传(全局控制) 删除,重命名
    local_umask=022 #本地用户上传文件的umask
    userlist_enable=YES #限制了这里的用户不能访问
    local_root #设置一个本地用户登录后进入到的目录
    download_enable #限制用户的下载权限
    chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
    chown_username=whoever #匿名上传文件所属用户名
    chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
    chroot_list_file=/etc/vsftpd/chroot_list #指定限制的用户文件
    user_config_dir= #后面跟存放配置文件的目录。用来实现不同用户不同权限。
    #在vsftpd.conf文件中加入这一句,
    #在相应的目录里面,为每个用户创建自己的配置文件,用来实现不同的权限
    #设置用户的单独配置文件,用哪个帐户登陆就用哪个帐户命名

    虚拟用户设置
    虚拟用户使用PAM认证方式
    pam_service_name=vsftpd #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd
    guest_enable= YES/NO #启用虚拟用户。默认值为NO
    guest_username=ftp #这里用来映射虚拟用户。默认值为ftp
    virtual_use_local_privs=YES/NO #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。
    #当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。
    #默认情况下此参数是关闭的(NO)。

    案例详解
    【案例1】建立基于虚拟用户的FTP服务器,并根据以下要求配置FTP服务器。
    (1)配置FTP匿名用户的主目录为/var/ftp/anon,下载带宽限制为100kB/s。
    (2)建立一个名为abc,口令为xyz的FTP账户。下载带宽限制为500kB/s。
    (3)设置FTP服务器同时登录到FTP服务器的最大链接数为100;每个IP最大链接数为3;用户空闲时间超过限值为5分钟。
    mkdir /var/fpt/anon
    useradd abc
    passwd abc

    vim /etc/vsftpd/vsftpd.conf
    主要内容如下
    anonymous_enable=YES
    anon_root=/var/ftp/anon
    anon_max_rate=100000
    local_enable=YES
    local_max_rate=500000
    max_clients=100
    max_per_ip=3
    connect_timeout=300

    以上是本地的LOCAL用户
    下面是用虚拟用户来实现
    vim /etc/vsftpd/vuser
    内容如下
    tom
    123

    生成数据库文件
    db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
    chmod 600 /etc/vsftpd/vuser.db

    vim /etc/pam.d/vsftpd
    注释掉原来的内容
    然后加入
    auth required pam_userdb.so db=/etc/vsftpd/vuser
    account required pam_userdb.so db=/etc/vsftpd/vuser

    最后编辑VSFTPD.CONF加入下面两句
    guest_enable=YES
    guest_username=abc

    大家可以自行测试。

    【案例2】
    1、新建一分区,10G空间,ext3 文件系统,挂在到 /ftp下,作为 ftp服务器数据存放地方。2、四个部门:dep1,dep2, dep3, dep4,分别对应目录 /ftp/dep1,/ftp/dep2,/ftp/dep3,/ftp/dep4。另外设定一个公共目录 /ftp/public。3、五个用户:admin,user1,user2,user3,user4。其中:user 1/2/3/4分别对应部门dep 1/2/3/4,他们只能访问自己所述部门的目录和public目录。如:user1只能访问dep1和public目录,不能访问其它目录。admin为管理员用户,可以访问 ftp 服务器上的任何目录。4、用户访问权限限制:user1/2/3/4在所能访问的目录,具有上传文件、下载文件的功能,但是不能够删除文件、更改文件权限等功能。admin管理员用户对所有目录具有文件上传、下载、删除、权限更改等功能。5、对每个部门定制一个 quota,设置该账户的文件配额为1000个;磁盘配额为2G。6、匿名用户不能访问。
    第一、增加一块硬盘,然后分区,把分区挂载情况写入/etc/fstab
    # fdisk /dev/hdb
    # mkfs.ext3 /dev/hdb1
    # mkidr /ftp
    # mount /dev/hdb1 /ftp -o usrquota,grpquota

    # vim /etc/fstab
    加入下面一句
    /dev/hdb1 /ftp ext3 defaults,usrquota,grpquota 0 0
    第二、建立用户组和用户和相应的文件夹并更改权限,达到题目要求
    # groupadd dep1
    # groupadd dep2
    # groupadd dep3
    # groupadd dep4
    # groupadd boobooke
    # usradd -G dep1,boobooke user1
    # usradd -G dep2,boobooke user2
    # usradd -G dep3,boobooke user3
    # usradd -G dep4,boobooke user4
    # usradd -G dep1,dep2,dep3,dep4,boobooke admin
    # passwd user1
    # passwd user2
    # passwd user3
    # passwd user4
    # passwd admin
    # mkdir /ftp/dep1
    # mkdir /ftp/dep2
    # mkdir /ftp/dep3
    # mkdir /ftp/dep4
    # mkdir /ftp/public
    # chown uesr1:dep1 /ftp/dep1
    # chown uesr2:dep2 /ftp/dep2
    # chown uesr3:dep3 /ftp/dep3
    # chown uesr4:dep4 /ftp/dep4
    # chown admin:boobooke /ftp/public
    # chmod 770 /ftp/dep1
    # chmod 770 /ftp/dep2
    # chmod 770 /ftp/dep3
    # chmod 770 /ftp/dep4
    # chmod 770 /ftp/pubic

    最终结果如下
    -rw——- 1 root root 8192 Jul 26 11:46 aquota.group
    -rw——- 1 root root 7168 Jul 26 11:46 aquota.user
    drwxrwx— 2 user1 dep1 4096 Jul 25 20:47 dep1
    drwxrwx— 2 user2 dep2 4096 Jul 25 20:47 dep2
    drwxrwx— 2 user3 dep3 4096 Jul 25 20:47 dep3
    drwxrwx— 2 user4 dep4 4096 Jul 25 20:47 dep4
    drwx—— 2 root root 16384 Jul 25 20:44 lost+found
    drwxrwx— 2 admin boobooke 4096 Jul 25 20:48 public

    第三、创建quota,配置磁盘配额
    #mount /dev/hdb1 /ftp -o usrquota,grpquota
    # quotacheck -cuvg /dev/sdb1
    # quotaon -a
    # edquota -g dep1
    Disk quotas for group dep1 (gid 503):
    Filesystem blocks soft hard inodes soft hard
    /dev/hdb1 0 1024000 2048000 0 500 1000
    # edquota -g -p dep1 dep2 dep3 dep4(-u -g将源用户组和群组的quota设置套用至其他用户或群组。)

    第四、编辑VSFTPD.CONF
    # vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
    加入
    local_root=/ftp
    user_config_dir=/etc/vsftpd/ftp_config_dir

    开启chroot
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

    第五、建立用户的独立文件
    # mkdir /etc/vsftpd/ftp_config_dir
    # vim /etc/vsftpd/ftp_config_dir/user1
    cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,HELP,LIST,MODE,MDTM,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER
    # cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user2
    # cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user3
    # cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user4

    第六、测试
    ★★★★★★★★★★★★★★★★★视频观看地址★★★★★★★★★★★★★★★★★★
    http://www.boobooke.com/v/bbk3290
    http://www.boobooke.com/v/bbk3291
    http://www.boobooke.com/v/bbk3292
    http://www.boobooke.com/v/bbk3293
    http://www.boobooke.com/v/bbk3294
    http://www.boobooke.com/v/bbk3295

    相关文章

    发表评论