• vsftpd 配置-使用虚拟账户登录


    概述

    vsftpd 支持三种账户类型登录 ftp,分别是:匿名用户、系统账户、虚拟账户

    匿名用户

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

    系统账户

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

    虚拟账户

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

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

    环境及目标

    VMWare 虚拟机,Ubuntu20.04 64位,vsftpd-3.0.3

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

    搭建过程

    # 安装 vsftpd
    apt install -y vsftpd
    # 找到 pam_userdb.so 位置,后续配置会用到
    find / -name pam_userdb.so
    
    • 1
    • 2
    • 3
    • 4

    建立虚拟宿主用户。

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

    # -d 指定账户的 home 目录
    # -s 指定系统用户登录的 shell,nologin 即不允许系统 login 登录。
    # 使用 nologin 可以增强安全性
    useradd -d /data/ftproot virtusers -s /sbin/nologin
    
    • 1
    • 2
    • 3
    • 4

    建立 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工作目录,可以在此目录读写操作
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 创建相关目录。
    mkdir -p /data/ftproot/vuser1/rootdir
    
    # 进行权限设置。
    chown -R virtusers.virtusers /data/ftproot
    chmod 500 /data/ftproot/vuser1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    配置虚拟用户

    # 创建文件,用于存储虚拟账户名称及对应密码
    vi /etc/vsftpd/vuserlist
    
    # 虚拟用户列表的内容
    # 奇数行为用户名,偶数行为用户密码
    vuser1
    123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    用系统的 db_load 工具来生成 db 文件,出于安全角度修改 vuserlist.db 为 600 权限。
    如果没有这个工具可以通过以下命令安装。

    apt install -y db-util
    
    db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuserlist.db
    chmod 600 /etc/vsftpd/vuserlist.db
    
    • 1
    • 2
    • 3
    • 4

    修改 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
    
    • 1
    • 2
    • 3
    • 4

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

    # 创建虚拟用户的配置文件
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    配置 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         #指定虚拟用户配置文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    记得创建 /etc/vsftpd/chroot_list,否则会报错。

    touch /etc/vsftpd/chroot_list
    
    • 1

    解释说明

    chroot_local_user 和 chroot_list_file 两个配置项是配合使用的。

    chroot_local_user=YES 时,只有 chroot_list_file 中指定的用户才能够 chroot,其他用户禁止 chroot

    chroot_local_user=NO 时, chroot_list_file 中指定的用户禁止 chroot,其他用户可以 chroot

  • 相关阅读:
    微服务开发系列 第五篇:Redis
    数据库中的DECODE函数,SIGN函数
    一文带你了解 Spring 的@Enablexxx 注解
    clickhouse基础介绍
    Linux ALSA驱动之PCM创建流程源码分析
    蓝桥杯刷题-约数的个数
    平面设计师一定要知道的趁手工具
    ansible 中的变量及加密
    Spring注解开发(十)
    UE构建基础和实践:四、使用脚本打包
  • 原文地址:https://blog.csdn.net/kaiyuanheshang/article/details/125571289