Linux下vsftp Server部署

vsftp for Linux

概述

1、FTP概述

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP是C/S系统,FTP协议由FTP服务器和FTP客户端两个部分组成。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

2、VSFTP概述

VSFTP是一个基于GPL许可发布的、使用在类Unix系统上的FTP服务器软件,它的全称是Very Secure FTP ,从此名称可以看出来,编制者的初衷是代码的安全。

vsftp安装配置

安装

1、安装vsftp包

  1. 红帽系安装vsftpd
    [root@localhost ~]# yum install vsftpd
  2. debian系安装vsftpd
    [root@localhost ~]# apt-get install vsftpd

2、Redhat的vsftp Server相关文件/目录

  1. /etc/vsftpd/vsftpd.conf:主配置文件
  2. /usr/sbin/vsftpd:vsftpd的主程序
  3. /etc/rc.d/init.d/vsftpd:sys V风格系统的vsftpd启动脚本
  4. /etc/pam.d/vsftpd:PAM认证文件
  5. /etc/vsftpd/user_list:禁止或允许使用vsftpd的用户列表文件。当/etc/vsftpd/vsftpd.conf文件中userlist_deny=YES时这个文件中指定的用户不能访问FTP服务器(也是默认的缺省情况),当userlist_deny=NO时,则仅允许该文件中指定的用户访问FTP服务器。且use_list文件路径可在vsftpd.conf文件中指定(即也可以是其他文件名)。
  6. /var/ftp:匿名用户主目录;注:本地用户主目录为自己家目录
  7. /var/ftp/pub:匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)

vsftpd基本配置

vsftpd的大多数配置都可以通过编辑/etc/vsftpd.conf文件实现. 这个文件自身有大量注释说明, 所以这一章节只就一些重要的配置予以说明. 如果要了解所有的选顶和文档, 请使用man vsftpd.conf。
/etc/vsftpd.conf文件的设定几乎都采用【参数=设定值】的格式,注意等号两边没有空格。

1、运行方式

  1. stand alone
    独立运行,最普遍的运行方式,vsftpd.conf中配置listen=NO
  2. super daemon
    • 修改vsftpd.conf
      listen=YES
    • 这里若不改成YES,会出现下列错误
      500 OOPS: could not bind listening IPv4 socket
  • 安装配置xinetd

    $ sudo yum install xinetd
    $ sudo vi /etc/xinetd.conf
    service ftp
    {
    socket_type             = stream
    wait                    = no
    user                    = root
    server                  = /usr/sbin/vsftpd
    log_on_success          += DURATION USERID
    log_on_failure          += USERID
    nice                    = 10
    disable                 = no
    }
  • 停止vsftpd,启动xinetd
    sudo service vsftpd stop
    sudo service xinetd start

  • 查看端口
    $ sudo netstat -npltu | grep 21

2、本地账号登录设置

  1. /etc/vsftpd/ftpusers文件
    该文件内的用户一律禁止ftp连接,默认列表包括了root, nobody等。需要禁止某个用户,添加进来便是。此文件是由PAM模块的 /etc/pam.d/vsftpd 指定的

    # cat /etc/pam.d/vsftpd 
    #%PAM-1.0
    session    optional     pam_keyinit.so    force revoke
    auth       required   pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    auth       required   pam_shells.so
    auth       include    password-auth
    account    include    password-auth
    session    required     pam_loginuid.so
    session    include    password-auth
  2. /etc/vsftpd/user_list 文件
    vsftpd自订的列表,跟/etc/ftpusers类似,具体文件名和路径是由用户自己指定的;redhat设计为/etc/vsftpd/user_list

    • 开放所有,限制指定用户
      在vsftpd.conf文件配置如下字段:
      userlist_enable=YES
      userlist_deny=YES
      userlist_file=/etc/vsftpd/user_list
    • user_list文件列表中的用户是禁止登录的用户
    • 限制所有,开放指定用户
      可以反过来,限制一切用户登录,只允许列表文件中的用户,用 userlist,这样:
      userlist_enable=YES
      userlist_deny=NO
      userlist_file=/etc/vsftpd/user_list
    • user_list文件列表中的用户是允许登录的用户

3、匿名用户设置

ftp 和 anonymous用户被vsftpd识别为匿名用户登录。

  1. /etc/vsftpd/vsftpd.conf文件配置

    # 是否允许匿名登录,下面的配置只有此配置为YES时才生效,默认值:YES
    anonymous_enable=YES
    # 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认值:NO
    anon_upload_enable=YES
    # 是否允许匿名用户在某些特定的位置创建新的目录,在write_enable值为YES是生效,并且匿名ftp用户必须对父目录具有写入权限。默认值:NO
    anon_mkdir_write_enable=YES
    # 是否允许匿名用户具有除写、上传并创建目录以外的权限,如删除和重命名,默认值:NO    
    anon_other_write_enable=YES  
    # 匿名用户的掩码,含义:如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644)
    anon_umask=022
    # 仅在ssl_enable值为YES是生效。是否允许匿名用户使用安全的SSL连接。默认值:NO
    allow_anon_ssl=YES
    # 启用后,只允许匿名用户下载可读的文件。 默认值:是
    anon_world_readable_only=YES
  2. 匿名用户家目录:/var/ftp

    • 其实与 ftp 这个账号的家目录有关,比如:
    CentOS
    [root@luci etc]# cat /etc/passwd|grep ftp
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    Ubuntu
    [dream@Mint ~]$ cat /etc/passwd|grep ftp
    ftp:x:125:118:ftp daemon,,,:/srv/ftp:/bin/false
  3. 匿名用户家目录的权限设置
    vsftpd对此 ftp 根目录,有两点特殊要求;该用户所有者必须是root,该目录的权限对其他不能为 w;

  4. 匿名用户不能离开自己的根目录进而浏览其他目录

4、虚拟用户设置

vsftp安全设置

1、Chroot限制:

限制用户活动的目录,配置之前登录显示的路径为用户在系统中的家目录,比如是/home/test ,改之后则是 /。

这里归类了三种策略

  1. 限制所有

    • 修改vsftpd.conf文件如下配置
      chroot_local_user=YES
    • 重启vsftp
      $ sudo service vsftpd restart
  2. 开放所有,限制指定用户

    • 修改vsftpd.conf文件如下配置
      chroot_local_user=NO
      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list
    • 创建做chroot限制的用户列表
      $ sudo vi /etc/vsftpd/chroot_list 注意:一行一个用户名
    • 重启vsftp
      $ sudo service vsftpd restart
  3. 限制所有,开放指定用户
    上面的规则是限制/etc/vsftpd/chroot_list中的用户,反过来限制所有用户,只解禁/etc/vsftpd/chroot_list的用户

    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd.chroot_list

2、主机访问 — tcp_wrappers配置

stand alone模式下提供基于主机的访问控制的配置
前提是在vsftpd.conf中设定 tcp_wrappers=YES

  1. tcp_wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制,hosts.allow是一个许可表,hosts.deny是一个拒绝表 在hosts.allow中也可以使用DENY,所以通常可以只使用hosts.allow来实现访问控制。 对vsftpd而言,书写hosts.allow有三种语法形式

    1: vsftpd:主机表 (设置允许访问的主机表)
    2: vsftpd:主机表:DENY (设置拒绝访问的主机表)
    3: vsftpd:主机表:setenv VSFTPD_LOAD_CONF 配置文件名 (对指定的主机使用另外的配置)
  2. setenv VSFTPD_LOAD_CONF的值为指定的配置文件名,意图是让vsftpd守护进程读取新的配置项来覆盖主配置文件中的项,实现特定待遇 这有一个小例子来说明tcp_wrappers

    • 功能:
      1. 拒绝192.168.2.0/24访问
      2. 对192.168.1.0/24内的所有主机不作连接限制和最大传输速率限制
      3. 对其他主机的访问限制为:每ip连接数为1,最大传输速率为10kb/s (在主配置文件中设置就好了)
    • 然后编辑
    # sudo vi /etc/hosts.allow 
    vsftpd:192.168.2.0/24: DENY (阻止192.168.2.0子网的访问)
    vsftpd:192.168.1.0/24 (允许192.168.1.0子网的访问)
    vsftpd:192.168.1.0/24: setenv VSFTPD_LOAD_CONF /etc/xxx.conf (对192.168.1.0/24指定专有配置文件xxx.conf,xxx可以自己指定文件名,需要建立)
    • 然后建立xxx.conf文件,并编辑。

3、其他

  1. 限制连接数
    可以为本地用户设定数据传输数率, 最大客户端数以及每个IP的连接数目, 在/etc/vsftpd.conf添加如下行:
    local_max_rate=1000000 // 最大数据传输速率(单位:字节每秒)
    max_clients=50 // 同时在线的最大客户端数目
    max_per_ip=2 // 每个IP允许的连接数

报错排除

1、错误1

  • ERROR:如果连接服务器时获得错误信息:500 OOPS: cap_set_proc
  • 解决方法:你需要在/etc/rc.conf的 MODULES= 一行添加capability

2、错误2

  • ERROR:升级到2.1.0版本后, 连接服务器时可能会出现如下错误:500 OOPS: could not bind listening IPv4 socket
  • 解决方法:
    • 在先前的版本中, 将下述行注释掉就足够了:
      # Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd
      # listen=YES
    • 但在新版本以及未来的版本中, 必须显示的指定守护程序启动方式:
      # Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd
      listen=NO

3、错误3

  • ERROR:开启chroot后报500 OOPS: vsftpd: refusing to run with writable root inside chroot()
  • 原因:为了避免一个安全漏洞,从 vsftpd 2.3.5 开始,chroot启用后的ftp根目录必须不可写
  • 解决方法:
    • 去掉有chroot限制的ftp用户根目录的写权限:chmod a-w /xxx/xxx
      这样的话,我们会想到没有w权限,别人不能上传文件等操作啊,要这有个毛用..... 好吧,我们在ftp用户的根目录建立一个文件夹,让它具有w权限
    • 还可以在vsftpd.conf 中添加allow_writeable_chroot=YES来解决这个问题,但就相对没那么安全了

微信扫一扫,分享到朋友圈

Linux下vsftp Server部署
0
别把想做的事情,留给遥不可及的未来!

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
返回顶部