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

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

贡献者:

KB小秘书

 · 

更新时间:2020-07-06 09:28:06

提示: 这是一篇由阿里云ACE开发者(Alibaba Cloud Engineer)贡献,针对特定用户问题发布的文章。文档的内容以原稿呈现,阿里云对于文档内容不做任何形式的承诺。阿里云有权在未经通知的情形下对文档内容做出任何形式的修改。

概述

本文主要讲述如何搭建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,支持主动和被动模式。

搭建过程

  • 执行以下命令安装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,否则会报错。
      touch /etc/vsftpd/chroot_list

结果测试

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

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

适用于

  • 云服务器ECS
  • 249

    发布KB

  • 655

    回答问题

  • 12

    粉丝数