文档

如何搭建VSFTP及配置虚拟用户

更新时间:

概述

本文主要讲述如何搭建VSFTP及配置虚拟用户。

详细信息

说明

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改

VSFTP服务支持三种用户模式。

  • 匿名用户:默认VSFTP是支持匿名用户的,该用户登录FTP服务使用anonymous用户直接登录,不需要输入密码。

  • 系统用户:可以使用Linux系统本身存在的用户,作为FTP用户,具体哪些用户可以登录FTP,可以通过配置文件指定。

  • 虚拟用户:虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。

说明

说明:虚拟用户在登录过程中会被隐射成匿名用户,因为匿名用户的权限是统一配置的,那么如果想区分匿名用户的权限,默认情况是无法实现的。

环境及目标

  • 阿里云公共镜像,Centos 7.6 64位, Linux Version 3.10.0-957.21.3.el7.x86_64

  • vsftpd-3.0.2-25.el7.x86_64

  • 目标是搭建一个FTP,可以使用虚拟用户vuser1登录ftp,支持主动和被动模式。

搭建过程

说明

说明:CentOS 6与CentOS 8操作系统版本结束了生命周期(EOL),按照社区规则,CentOS 6/8的源地址内容已移除。当您在CentOS 6/8系统内继续使用默认配置的源地址时会发生报错。建议您先切换CentOS 6/8的源地址,然后再进行操作。具体操作,请参见CentOS 6 EOL如何切换源?CentOS 8 EOL如何切换源?

  • 执行以下命令安装vsftpd服务。

    yum install vsftpd -y

  • 执行以下命令确认pam_userdb.so模块的位置。

    说明

    说明:cenos7.6 64位系统的位置一般是/lib64/security/pam_userdb.so。

    ls -l /lib64/security/pam_userdb.so

  • 建立虚拟宿主用户。 虚拟用户并不是系统用户,也就是说这些FTP的用户在系统中是不存在的。他们的总体权限其实是集中映射在一个系统用户身上,所谓vsftpd的[虚拟宿主用户],就是这样一个支持着所有虚拟用户的宿主用户。执行以下命令将虚拟用户映射在virtusers这个用户上。

    useradd -d /data/ftproot virtusers -s /sbin/nologin
    
    说明

    说明:-d指定家目录,这里指定之前的ftp根目录 /data/ftproot 。 -s指定系统用户登录的shell,nologin即不允许系统login登录。

  • 建立FTP相关工作目录,以及权限管理。 最新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录。所有上传、下载、删除、重命名等操作只能在子目录中进行,虚拟用户vuser1的ftp目录是/data/ftproot/vuser1/,没有w权限,设置权限为500,以下是相关目录权限设置参考。

    /data                                                  #数据目录,便于后期数据备份
    └── [drwxr-xr-x]  ftproot                              #FTP服务目录
        └── [dr-x------]  vuser1                         #虚拟用户主目录,后期可以增加vuser2、vuser3...
            └── [drwxr-xr-x]  rootdir                 #虚拟用户FTP工作目录,可以在此目录读写操作
    说明

    说明:此处采用目录结构树的形式展现个子目录权限。

    • 执行以下命令创建目录。

      mkdir -p /data/ftproot/vuser1/rootdir

    • 执行以下命令进行权限设置。

      chown -R virtusers.virtusers /data/ftproot
      chmod 500 /data/ftproot/vuser1

配置虚拟用户

  • 执行以下命令生成虚拟用户列表。

    vi /etc/vsftpd/vuserlist
    • 虚拟用户列表的内容

      vuser1
      123456
      说明

      说明:奇数行为用户名,偶数行为用户密码。

  • 用系统的db_load工具来生成db文件,出于安全角度修改vuserlist.db为600权限。

    db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuserlist.db
    chmod 600 /etc/vsftpd/vuserlist.db

  • 修改PAM验证。 修改/etc/pam.d/vsftpd,这个文件名与/etc/vsftpd.conf中的pam_service_name=vsftpd相对应。注释掉所有参数,在最后面加入以下两行内容。

    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist

  • 创建及配置虚拟用户的配置文件。

    • 创建虚拟用户的配置文件

      mkdir /etc/vsftpd/vuser_conf/

    • 配置虚拟用户的配置文件

      vi /etc/vsftpd/vuser_conf/vuser1

    • 添加以下配置信息

      local_root=/data/ftproot/vuser1
      anon_upload_enable=YES
      anon_world_readable_only=NO
      anon_mkdir_write_enable=YES
      anon_other_write_enable=YES

  • 配置VSFTP的/etc/vsftpd/vsftpd.conf主配置文件。

    • 配置配置项

      listen=YES                                     #开启IPv4监听
      listen_ipv6=NO                                 #关闭IPV6监听
      chroot_local_user=YES
      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list
      pam_service_name=vsftpd                        #如果前面/etc/pam.d/vsftpd没有改文件名,就不修改
      virtual_use_local_privs=YES                    #虚拟用户使用本地用户的权限
      guest_enable=YES                               #开启虚拟用户
      guest_username=virtusers                       #指定虚拟用户的宿主用户
      user_config_dir=/etc/vsftpd/vuser_conf         #指定虚拟用户配置文件
      pasv_enable=YES                                #开启被动模式
      pasv_min_port=30100                            #被动模式最小端口,本示例设置为30100
      pasv_max_port=30200                            #被动模式最大端口,本示例设置为30200
      pasv_address=X.X.X.X                           #被动模式的IP地址,VPC环境下需要设置为服务器公网地址
      

    • 记得创建文件/etc/vsftpd/chroot_list,并且在文件中添加ftp用户,否则连接ftp会报错。

      touch /etc/vsftpd/chroot_list

      修改文件,文件中添加ftp用户,本文档示例中的ftp用户是vuser1

      vim /etc/vsftpd/chroot_list

      添加的用户列表内容

      vuser1

结果测试

使用Filezilla等FTP客户端测试,虚拟用户vuser1可以选择主动或被动模式正常访问FTP,并且在工作目录rootdir下可以正常读写文件,创建删除修改目录。

说明

说明:如果被动模式无法访问,请检查安全组是否放行被动模式的端口。

适用于

  • 云服务器ECS

  • 本页导读 (1)