精华内容
下载资源
问答
  • vsftpd虚拟用户的配置

    2017-08-08 10:35:17
    vsftpd虚拟用户的配置
  • yum -y install vsftpd*yum -y install db4*============================================================================先建立一个包含虚拟用户名及其口令的文本文件 , 然后在此基础上生成虚拟用户口令库文件 :...
  • 3、在添加及导入时,如发现未安装配置vsftpd虚拟用户,则先安装配置并执行添加导入操作 4、添加、删除时严格控制输入是否正确 5、导入文件时,检查文件内容是否符合用户密码一 一对应 脚本内容: #!/bin/bash #auth ...

    要求:

    1、可以添加、删除单个或多个虚拟用户
    2、可以导入虚拟用户列表
    3、在添加及导入时,如发现未安装配置vsftpd虚拟用户,则先安装配置并执行添加导入操作
    4、添加、删除时严格控制输入是否正确
    5、导入文件时,检查文件内容是否符合用户密码一 一对应

    脚本内容:

    #!/bin/bash
    #auth by toyix
    #202072510:57:44
    #auto add delete import vsftpd_vname
    ####################################
    
    LOCAL_ROOT="/data/ftp"
    mkdir -p /data/ftp >/dev/null 2>&1
    #定义函数 - 检查是否安装vsftpd及虚拟用户,没有装安装
    INSTALL_CONFIG_VSFTPD_VNAME () {
            #check vsftpd installd
            rpm -qa|grep  vsftpd >/dev/null 2>&1
            if [ $? -ne 0 ];then
                    echo -e '\033[32m--------------------------------------------------\033[0m'
                    echo -e '\033[32m----vsftpd is not installd, now install vsftpd----\033[0m'
                    echo -e '\033[32m--------------------------------------------------\033[0m'
                    yum install -y pam* libdb-utils vsftpd* --skip-broken
                    cat >/etc/vsftpd/vsftpd.conf <<-EOF
                    #关闭匿名
                    anonymous_enable=NO
                    #用户不可出根目录
                    chroot_local_user=YES
                    #出根目录白名单
                    chroot_list_enable=YES
                    chroot_list_file=/etc/vsftpd/chroot_list
                    allow_writeable_chroot=YES
                    pasv_enable=YES
                    #使用被动模式40005000端口
                    pasv_min_port=4000
                    pasv_max_port=5000
                    local_enable=YES
                    write_enable=YES
                    local_umask=022
                    #使用本地时间
                    use_localtime=YES
                    dirmessage_enable=YES
                    #日志文件配置,并开启xferlog与vsftp.log双日志,xferlog记录上传与下载信息,vsftpd.log记录登录、上传、下载、删除等详细信息
                    dual_log_enable=YES
                    xferlog_enable=YES
                    log_ftp_protocol=YES
                    xferlog_std_format=YES
                    reverse_lookup_enable=NO
    
                    connect_from_port_20=YES
                    xferlog_std_format=YES
                    listen=NO
                    listen_ipv6=YES
                    userlist_enable=YES
                    tcp_wrappers=YES
    
                    #虚拟用户配置-----------
                    #开启pam模块登录认证
                    pam_service_name=vsftpd
                    guest_enable=YES
                    #映射虚拟用户至系统用户(指定系统用户)
                    guest_username=ftpuser
                    #虚拟用户配置目录
                    user_config_dir=/etc/vsftpd/vsftpd_user_conf
                    #禁锢虚拟用户的主目录,同时禁止访问除主目录之外的目录
                    virtual_use_local_privs=YES
                    EOF
                    mkdir -p /etc/vsftpd/chroot_list
                    mkdir -p /etc/vsftpd/vsftpd_user_conf
                    cat >/etc/pam.d/vsftpd<<-EOF
                    auth    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                    account required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                    EOF
            fi
            rpm -qa|grep pam >/dev/null 2>&1
            if [ $? -ne 0 ];then
                    yum install -y pam*
            fi
            rpm -qa|grep libdb-utils >/dev/null 2>&1
            if [ $? -ne 0 ];then
                    yum install -y libdb-utils
            fi
            VFTPUSER=`cat /etc/vsftpd/vsftpd.conf |grep -w 'guest_username'|awk -F"=" '{print $2}'`
            #检查是否配置了虚拟用户,没有则创建虚拟用户
            cat /etc/vsftpd/vsftpd.conf |grep -w '^guest_username'
            if [ $? -ne 0 ];then
                    \cp /etc/vsftpd/vsftpd.conf{,.bak}
                    cat >>/etc/vsftpd/vsftpd.conf<<-EOF
                    #虚拟用户配置-----------
                    #开启pam模块登录认证
                    pam_service_name=vsftpd
                    guest_enable=YES
                    #映射虚拟用户至系统用户(指定系统用户)
                    guest_username=ftpuser
                    #虚拟用户配置目录
                    user_config_dir=/etc/vsftpd/vsftpd_user_conf
                    #禁锢虚拟用户的主目录,同时禁止访问除主目录之外的目录
                    virtual_use_local_privs=YES
                    EOF
                    useradd -s /sbin/nologin ftpuser
                    cat >/etc/pam.d/vsftpd<<-EOF
                    auth    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                    account required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                    EOF
                    #新建虚拟用户配置文件目录
                    mkdir -p /etc/vsftpd/vsftpd_user_conf
            fi
            VFTPUSER=`cat /etc/vsftpd/vsftpd.conf |grep -w 'guest_username'|awk -F"=" '{print $2}'`
            USER_CONFIG_DIR=`cat /etc/vsftpd/vsftpd.conf |grep -w 'user_config_dir='|awk -F"=" '{print $2}'`
            VSFTPD_LOGIN_DB="`cat /etc/pam.d/vsftpd|grep -w 'vsftpd'|sed '1p' -n|awk -F"=" '{print $2}'`.db"
    
    
    }
    
    if [ $UID -ne 0 ];then
            echo -e '\033[33m Permission no enough,please use root!!! \033[0m'
    fi
    
    
    if [ "$1" == "-a" ];then
            shift 1
            ADD_NR=`expr $# % 2`
            if [ $ADD_NR -ne 0 ];then
                    echo -e '\033[33m mUsage:{/bin/sh $0= add: "-a vname1 passwd vname2 passwd" |help} \033[0m'
                    exit 1
            fi
            #调用函数 - 检查是否安装vsftpd及虚拟用户,没有装安装
            INSTALL_CONFIG_VSFTPD_VNAME
            VSFTPD_ADD_VFUSERS_PWDS="$*"
            VSFTPD_ADD_VFUSERS=`echo ${VSFTPD_ADD_VFUSERS_PWDS}|awk '{print $1" " $3 " " $5" "$7" "$9" " $11}'`
            a=`expr $# % 2`
            if [ $a -ne 0 ];then
                    echo -e '\033[33m --------------------------------------------------------------------------------- \033[0m'
                    echo -e '\033[33m mUsage:{/bin/sh $0= add: "-a vname1 passwd vname2 passwd" |help} \033[0m'
                    echo -e '\033[33m --------------------------------------------------------------------------------- \033[0m'
            fi
    
            #把用户密码逐行追加至临时文件
            for VSFTPD_ADD_VFUSERS_PWD in ${VSFTPD_ADD_VFUSERS_PWDS}
            do
                    echo ${VSFTPD_ADD_VFUSERS_PWD}>>/etc/vsftpd/vfuser.txt
            done
    
            db_load -T -t hash -f /etc/vsftpd/vfuser.txt ${VSFTPD_LOGIN_DB}  
            chmod 700 /etc/vsftpd/vsftpd_login.db
    
            for VSFTPD_ADD_VFUSER in ${VSFTPD_ADD_VFUSERS}
            do
                    mkdir -p ${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}
                    echo "${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}"
                    chown -R ${VFTPUSER}:${VFTPUSER} ${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}
                    cat>${USER_CONFIG_DIR}/${VSFTPD_ADD_VFUSER}<<-EOF
                    #${VSFTPD_ADD_VFUSER}虚拟用户配置文件目录,即家目录
                    local_root=${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}
                    #允许登录用户有可写权限
                    write_enable=YES
                    #允许匿名用户下载,然后读取文件
                    anon_world_readable_only=YES
                    #允许匿名用户上传文件权限,只在write_enable=YES时生效
                    anon_upload_enable=YES
                    #允许匿名用户创建目录,只有在write_enable=YES时生效
                    anon_mkdir_write_enable=YES
                    #允许匿名用户其他权限,例如删除、重命名等                
                    anon_other_write_enable=YES
                    EOF
            done
            /etc/init.d/vsftpd restart >/dev/null
            echo ""
            echo -e '\033[32m -------------------------------------------------------\033[0m'
            echo -e '\033[32m -----------add finish! select db file---------------\033[0m'
            echo -e '\033[32m -------------------------------------------------------\033[0m'
            /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'
    
    elif [ "$1" == '-d' ];then
            shift 1
            #检测$*是否正确
            VSFTPD_DEL_VFUSERS="$*"
            echo $VSFTPD_LOGIN_DB
            if [ -z "${VSFTPD_DEL_VFUSERS}" ];then
                    echo -e '\033[33m mUsage:{/bin/sh $0 delete: -d vnames  filename |help} \033[0m'
                    exit 1
            fi
            
            #检查是否配置了虚拟用户
            cat /etc/vsftpd/vsftpd.conf |grep -w '^pam_service_name' >/dev/null 2>&1
            if [ $? -ne 0 ];then
                    echo -e '\033[33m 虚拟用户未配置,请重新执行此脚本 -a vnames \033[0m'
                    exit 1
            else
                    VFTPUSER=`cat /etc/vsftpd/vsftpd.conf |grep -w 'guest_username'|awk -F"=" '{print $2}'`
                    USER_CONFIG_DIR=`cat /etc/vsftpd/vsftpd.conf |grep -w 'user_config_dir='|awk -F"=" '{print $2}'`
                    VSFTPD_LOGIN_DB="`cat /etc/pam.d/vsftpd|grep -w 'vsftpd'|sed '1p' -n|awk -F"=" '{print $2}'`.db"
                    echo -e "\033[32m VFTPUSER=${VFTPUSER} \033[0m"
                    echo -e "\033[32m USER_CONFIG_DIR=${USER_CONFIG_DIR} \033[0m"
                    echo -e "\033[32m VSFTPD_LOGIN_DB=${VSFTPD_LOGIN_DB} \033[0m"
            fi
    
            /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'>/etc/vsftpd/vfuser.txt
            for VSFTPD_DEL_VFUSER in ${VSFTPD_DEL_VFUSERS}
            do
                    #删除密码行
                    sed -i -E "/^${VSFTPD_DEL_VFUSER}$/{n;d}" /etc/vsftpd/vfuser.txt
                    #删除用户行
                    sed  -i -E "/^${VSFTPD_DEL_VFUSER}$/d" /etc/vsftpd/vfuser.txt
            done
            rm -rf ${VSFTPD_LOGIN_DB}
            db_load -T -t hash -f /etc/vsftpd/vfuser.txt ${VSFTPD_LOGIN_DB}
            chmod 700 ${VSFTPD_LOGIN_DB} 
            /etc/init.d/vsftpd restart >/dev/null
            echo ""
            echo -e '\033[32m -------------------------------------------------------\033[0m'
            echo -e '\033[32m -----------delete finish! select db file---------------\033[0m'
            echo -e '\033[32m -------------------------------------------------------\033[0m'
            /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'
    elif [ "$1" == '-i' ];then
            shift 1
            if [ ! -f $1 ];then
                    echo -e '\033[33m ----文件不存在---- \033[0m'
                    echo -e '\033[33m mUsage:{/bin/sh $0= add:-a vname1 passwd vname2 passwd  | delete: -d vnames | Import: -i filename |help} \033[0m'
                    exit 1
            fi
            NR_LIST=`cat "$1" |awk '{print NR}'|sed '$p' -n`
            NR_LIST_YU=`expr ${NR_LIST} % 2`
            if [ ${NR_LIST_YU} -ne 0 ];then
                    echo -e '\033[33m --------------please check the NR-------------- \033[0m'
                    echo -e '\033[33m mUsage:{/bin/sh -i
                     name1
                     passwd
                     name2
                     passwd
                     \033[0m'
                    echo -e '\033[33m ------------------------------------------------- \033[0m'
                    exit 1
            fi
            #调用函数,检查是否安装配置了vsftpd虚拟用户,没有则安装配置
            INSTALL_CONFIG_VSFTPD_VNAME
    
            I_ADDVFUSERS=`cat $1|awk 'NR%2==0 {next}{print $0}'`
            for I_ADDVFUSER in ${I_ADDVFUSERS}
            do
                    mkdir -p ${LOCAL_ROOT}/${I_ADDVFUSER}
                    echo "${LOCAL_ROOT}/${I_ADDVFUSER}"
                    chown -R ${VFTPUSER}:${VFTPUSER} ${LOCAL_ROOT}/${I_ADDVFUSER}
                    cat>${USER_CONFIG_DIR}/${I_ADDVFUSER}<<-EOF
                    #${I_ADDVFUSER}虚拟用户配置文件目录,即家目录
                    local_root=${LOCAL_ROOT}/${I_ADDVFUSER}
                    #允许登录用户有可写权限
                    write_enable=YES
                    #允许匿名用户下载,然后读取文件
                    anon_world_readable_only=YES
                    #允许匿名用户上传文件权限,只在write_enable=YES时生效
                    anon_upload_enable=YES
                    #允许匿名用户创建目录,只有在write_enable=YES时生效
                    anon_mkdir_write_enable=YES
                    #允许匿名用户其他权限,例如删除、重命名等                
                    anon_other_write_enable=YES
                    EOF
            done
            db_load -T -t hash -f $1 ${VSFTPD_LOGIN_DB}
            chmod 700 ${VSFTPD_LOGIN_DB}
            
            /etc/init.d/vsftpd restart >/dev/null
            echo ""
            echo -e '\033[32m -------------------------------------------------------\033[0m'
            echo -e '\033[32m -----------Import finish! select db file---------------\033[0m'
            echo -e '\033[32m -------------------------------------------------------\033[0m'
            /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'
    
    else
            echo -e '\033[33m -------------------------------------------------------------------------------------------------------- \033[0m'
            echo -e '\033[33m mUsage:{/bin/sh $0= add:-a vname1 passwd vname2 passwd  | delete: -d vnames | Import: -i filename |help} \033[0m'
            echo -e '\033[33m -------------------------------------------------------------------------------------------------------- \033[0m'
            exit 1
    fi
    
    

    执行结果 - 添加虚拟用户

    [root@localhost /]# sh autoA_D_I_vfuser.sh -a aaaa 123456 bbbb 123456 cccc 123456
    guest_username=ftpuser
    /data/ftp/aaaa
    /data/ftp/bbbb
    /data/ftp/cccc
    
     -------------------------------------------------------
     -----------add finish! select db file---------------
     -------------------------------------------------------
    aaaa
    123456
    bbbb
    123456
    cccc
    123456
    [root@localhost /]# 
    

    连接测试
    在这里插入图片描述

    执行结果 - 删除用户

    [root@localhost /]# sh autoA_D_I_vfuser.sh -d cccc bbbb
    
     VFTPUSER=ftpuser 
     USER_CONFIG_DIR=/etc/vsftpd/vsftpd_user_conf 
     VSFTPD_LOGIN_DB=/etc/vsftpd/vsftpd_login.db 
    
     -------------------------------------------------------
     -----------delete finish! select db file---------------
     -------------------------------------------------------
    aaaa
    123456
    [root@localhost /]
    

    执行结果 - 文件列表导入

    [root@localhost /]# sh autoA_D_I_vfuser.sh -i txt 
    guest_username=ftpuser
    /data/ftp/xiaolu
    /data/ftp/xiaoxi
    /data/ftp/xiaoliu
    /data/ftp/xiaowang
    /data/ftp/xiaohuang
    /data/ftp/ibbi
    
     -------------------------------------------------------
     -----------Import finish! select db file---------------
     -------------------------------------------------------
    aaaa
    123456
    ibbi
    123456
    xiaohuang
    123456
    xiaolu
    12345622222
    xiaowang
    123456
    xiaoxi
    123456
    xiaoliu
    123456
    [root@localhost /]# 
    

    连接测试
    在这里插入图片描述

    注:如发现连接不通,需要关闭selinux及开启防火墙端口
    [root@localhost /]# setenforce 0
    [root@localhost /]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
    [root@localhost /]# firewall-cmd --zone=public --add-port=4000-5000/tcp --permanent
    [root@localhost /]# firewall-cmd --zone=public --add-port=21/tcp --permanent
    [root@localhost /]# firewall-cmd --reload

    --------------------------end

    展开全文
  • vsftpd虚拟用户

    2020-03-16 11:01:09
    虚拟用户: 所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录 各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定 虚拟用户帐号的存储方式: 文件:...

    虚拟用户:

    1. 所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录

    2. 各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

    虚拟用户帐号的存储方式:

    1. 文件:编辑文本文件,此文件需要被编码为hash 格式Berkeley DB database,奇数行为用户名,偶数行为密码

    2. 关系型数据库中的表中:实时查询数据库完成用户认证

    vsftpd 支持mysql库:pam要依赖于pam-mysql

    /lib64/security/pam_mysql.so
    /usr/share/doc/pam_mysql-0.7/README

    实现基于文件验证的虚拟用户

    创建用户数据库文件

    [root@centos8 ~] rpm -qf `which db_load`
    libdb-utils-5.3.28-37.el8.x86_64
    [root@centos8 ~] vim /etc/vsftpd/vusers.txt
    wang
    wangpass
    mage
    magepass
    [root@centos8 ~] db_load -T -t hash -f /etc/vsftpd/vusers.txt
    /etc/vsftpd/vusers.db
    [root@centos8 ~] chmod 600 /etc/vsftpd/vusers.* 
    

    创建用户和访问FTP目录

    [root@centos8 ~] useradd -d /data/ftproot -s /sbin/nologin -r vuser
    [root@centos8 ~] mkdir -pv /data/ftproot/upload
    [root@centos8 ~] setfacl -m u:vuser:rwx /data/ftproot/upload
    
    #chmod a=rx /data/ftproot/ 如果自动创建家目录,需修改权限
    

    创建pam配置文件

    [root@centos8 ~] vim /etc/pam.d/vsftpd.db
    
    auth required pam_userdb.so db=/etc/vsftpd/vusers
    account required pam_userdb.so db=/etc/vsftpd/vusers
    

    指定pam配置文件

    [root@centos8 ~] vim /etc/vsftpd/vsftpd.conf
    
    guest_enable=YES
    guest_username=vuser
    pam_service_name=vsftpd.db
    

    虚拟用户建立独立的配置文件

    #指定各个用户配置文件存放的路径
    [root@centos8 ~] vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers.d/
    
    #创建各个用户配置文件存放的路径
    [root@centos8 ~] mkdir /etc/vsftpd/vusers.d/
    
    #创建各用户自已的配置文件,允许wang用户可读写,其它用户只读
    [root@centos8 ~] vim /etc/vsftpd/vusers.d/wang  
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
    #创建各用户自已的配置文件
    [root@centos8 ~] vim /etc/vsftpd/vusers.d/mage  
    
    #登录目录改变至指定的目录
    local_root=/data/ftproot2 
    

    实现基于mysql验证的vsftpd虚拟用户

    利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

    项目网站:https://sourceforge.net/projects/pam-mysql/

    因此项目年代久远不再更新,只支持CentOS 6,7,不支持CentOS 8

    环境:本实验在两台主机上实现, CentOS 7 一台做为FTP服务器,一台做MySQL 数据库服务器

    在数据库服务器安装mysql数据库

    #注意:MySQL8.0由于取消了PASSWORD()函数,不支持
    
    [root@centos8 ~] yum –y install mariadb-server
    [root@centos8 ~] systemctl enable --now mariadb.service
    

    在数据库服务上配置数据库支持vsftpd服务

    #建立存储虚拟用户数据库和表
    [root@centos8 ~] mysql
    mysql> CREATE DATABASE vsftpd;
    mysql> USE vsftpd;
    mysql> CREATE TABLE users (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    name CHAR(50) BINARY NOT NULL,
    password CHAR(48) BINARY NOT NULL
    );
    
    #添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
    mysql> INSERT INTO users(name,password) values('wang',password('magedu'));
    mysql> INSERT INTO users(name,password) values('mage',password('magedu'));
    
    #创建连接的数据库用户
    mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.0.%' IDENTIFIED BY 'magedu';
    mysql> FLUSH PRIVILEGES;
    

    在FTP服务器上安装vsftpd

    [root@centos7 ~] yum install vsftpd 
    

    在FTP服务器上安装pam_mysql包

    对centos6:

    [root@centos6 ~] yum install pam_mysql
    

    对于 centos7 和 8:无对应rpm包,需手动编译安装

    pam_mysql源码编译:

    #安装相关包
    [root@centos7 ~] yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
    
    #下载pam-mysql源码进行编译
    [root@centos7 ~]wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql0.7RC1.tar.gz
                         https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gz
                         
    [root@centos7 ~] tar xvf pam_mysql-0.7RC1.tar.gz
    [root@centos7 ~] cd pam_mysql-0.7RC1/
    
    [root@centos7 pam_mysql-0.7RC1] ./configure --with-pam-mods-dir=/lib64/security
    #如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误
    #checking if the second argument of pam_conv.conv() takes const pointer... no configure: error: Your system doesn't appear to be configured to use PAM.Perhaps you need to specify the correct location where the PAM modules reside.
    
    [root@centos7 pam_mysql-0.7RC1] make install
    [root@centos7 pam_mysql-0.7RC1] ll /lib64/security/pam_mysql*
    -rwxr-xr-x 1 root root    882 Dec 17 14:34 /lib64/security/pam_mysql.la
    -rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so
    

    在FTP服务器上建立pam认证所需要的文件

    [root@centos7 ~] vim /etc/pam.d/vsftpd.mysql
    
    #添加如下两行
    auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd
    table=users usercolumn=name passwdcolumn=password crypt=2
    
    account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver
    db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    

    crypt 加密方式:

    0表示不加密
    1表示crypt(3)加密
    2表示使用mysql password()函数加密
    3表示md5加密
    4表示sha1加密

    配置字段说明

    1. auth 表示认证
    2. account 验证账号密码正常使用
    3. required 表示认证要通过
    4. pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言 也可以写绝对路径;后面为给此模块传递的参数
    5. user=vsftpd为登录mysql的用户
    6. passwd=magedu 登录mysql的的密码
    7. host=mysqlserver mysql服务器的主机名或ip地址
    8. db=vsftpd 指定连接msyql的数据库名称
    9. table=users 指定连接数据库中的表名
    10. usercolumn=name 当做用户名的字段
    11. passwdcolumn=password 当做用户名字段的密码
    12. crypt=2 密码的加密方式为mysql password()函数加密

    建立相应用户和修改vsftpd配置文件

    #建立虚拟用户映射的系统用户及对应的目录
    [root@centos7 ~] useradd -s /sbin/nologin -d /data/ftproot -r vuser
    #centos7 需除去ftp根目录的写权限
                  
    [root@centos7 ~] mkdir -pv /data/ftproot/upload
    [root@centos7 ~] setfacl –m u:vuser:rwx /data/ftproot/upload
    
    #确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
    [root@centos7 ~] vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    
    #添加下面两项
    guest_enable=YES
    guest_username=vuser
    
    #修改下面一项,原系统用户无法登录
    pam_service_name=vsftpd.mysql
    
    #启动vsftpd服务
    [root@centos7 ~] systemctl enable --now vsftpd
    

    在FTP服务器上配置虚拟用户具有不同的访问权限

    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

    #配置vsftpd为虚拟用户使用配置文件目录
    [root@centos7 ~] vim /etc/vsftpd/vsftpd.conf
    
    #添加如下选项
    user_config_dir=/etc/vsftpd/vusers.d/
    
    #创建所需要目录,并为虚拟用户提供配置文件
    [root@centos7 ~] mkdir /etc/vsftpd/vusers.d/
    
    #配置虚拟用户的访问权限
    #虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
    #注意:需确保对应的映射用户对于文件系统有写权限
    [root@centos7 ~] vim /etc/vsftpd/vusers.d/wang
    
    anon_upload_enable={YES|NO}
    anon_mkdir_write_enable={YES|NO}
    anon_other_write_enable={YES|NO}
    
    #登录目录改变至指定的目录
    local_root=/data/ftproot2 
    
    展开全文
  • 1.vsftpd虚拟用户配置文件 anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 userlist_enable=YES # userlist_deny=yes userlist_file=/etc/vsftpd/user_list chroot_local_user=YES # ...

    vsftpd部署自行百度

    1. vsftpd虚拟用户配置文件

    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    userlist_enable=YES
    # userlist_deny=yes
    userlist_file=/etc/vsftpd/user_list
    chroot_local_user=YES

    # made for virtual user
    guest_enable=YES
    guest_username=vftpuser
    pam_service_name=/etc/pam.d/vsftpd
    user_config_dir=/etc/vsftpd/vuser_conf
    anon_umask=022
    listen=YES
    ftpd_banner="欢迎登陆运维专用FTP服务器!!!"

    2.  虚拟用户配置文件解析

    [root@salt002.pbs /etc/vsftpd/vuser_conf]# pwd
    /etc/vsftpd/vuser_conf
    [root@salt002.pbs /etc/vsftpd/vuser_conf]# cat download 
    local_root=/app/salt-files/fileStorage/
    virtual_use_local_privs=NO
    guest_username=vftpuser 
    anon_umask=022
    write_enable=YES
    anon_world_readable_only=NO
    anon_upload_enable=NO

    权限控制:virtual_use_local_privs参数

    当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;

    当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO; 也就是对自己的新根目录什么权限都没有。

    当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。

    当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,

    anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。

    当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

    anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。

    当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

    anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。

    当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

    anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。

    当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

    anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。

    展开全文
  • vsftpd虚拟用户设置权限
  • vsftpd 虚拟用户详细配置

    千次阅读 2018-07-18 17:28:58
    如果企业用户太多,创建太多的系统账户显然是不明智,这时候我们就需要利用虚拟账户,vsftpd虚拟账户的数据保存在Berkeley DB格式的数据文件中,所以需要安装db4-utils工具来创建这样的数据文件。以下适用于Linux...

    如果企业用户太多,创建太多的系统账户显然是不明智,这时候我们就需要利用虚拟账户,vsftpd虚拟账户的数据保存在Berkeley DB格式的数据文件中,所以需要安装db4-utils工具来创建这样的数据文件。以下适用于Linux(contos6,redhat6,oracle linux6)其他尚未测试。

    版本7.0以上安装vsftpd没有db4 需要安装 

    yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI 
    

    需要在vsftpd.conf 配置文件添加一行

    allow_writeable_chroot=YES  

    不添加报错

    500 OOPS: vsftpd: refusing to run with writable root inside chroot()

    错误原因为:

    - Add stronger checks for the configuration error of running with a writeable
    root directory inside a chroot(). This may bite people who carelessly turned
    on chroot_local_user but such is life.
    

    上面是7系统和6不一样的地方,其他配置都一样

    1)系统安装完成后配置静态IP 

    ​
    vi  /etc/sysconfig/network-scripts/ifcfg-eth0
    
    DEVICE=eth0
    HWADDR=00:0C:29:ED:3B:E5
    TYPE=Ethernet
    UUID=45ad3dc1-032c-43e4-85e4-6d5ebd9ecc88
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    IPADDR=192.168.1.168      ##根据自己需求更改
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1

    2)关闭selinux

    vi  /etc/selinux/config 
    
    SELINUX=disabled     ##将enabled改为disabled

    3)配置yum

    mv  /etc/yum.repos.d/rhel-source.repo  /etc/yum.repos.d/rhel-source.repo.bak    ##重命名源文件
    
    vi /etc/yum.repos.d/eld.repo                  ##创建新文件
    
    [EL]
    name =Linux 6.5 DVD
    baseurl=file:///media/Server/
    gpgcheck=0
    enabled=1
    ##保存退出
    
    mount  /dev/cdrom  /media/                    ##挂载光盘
    
    yum list                                      ##测试yum

    4)开始安装vsftpd

    yum -y install vsftpd                     ##安装vsftpd服务
    
    yum -y install db4 db4-utils db4-devel    ##安装虚拟用户数据库相关文件

    5)修改vsftpd的PAM验证配置文件

    Linux一般都通过PAM设置账户的验证机制,修改login认证配置文件,在文件中的db选项指定并验证账户和密码的数据库文件,注意数据库文件无须.db名称后缀(注意系统版本,如果你是64bit系统,是调用/lib64目录下的模块)估计现在32位用的比较少吧。

    vi /etc/pam.d/vsftpd                 ##屏蔽默认的行添加最最下面两行,注意32位系统是/lib目,64位系统是/lib64目录               
    #%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
    auth required          /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_login
    account required      /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_login

    6)添加Linux本地用户及虚拟用户名和密码

    useradd  -s  /sbin/nologin   ftptest           ##创建Linux本地用户不登录
     
    vi /etc/vsftpd/virtual_login                  ##创建虚拟用户文件,注意第一行是虚拟用户,第二行是虚拟用户的密码             
    test1     ##虚拟用户
    testpas   ##虚拟密码
    test2     ##虚拟用户
    testpas   ##虚拟密码
    
    

    7)编译文件及修改文件权限

     db_load -T -t hash -f /etc/vsftpd/virtual_login /etc/vsftpd/virtual_login.db      ##编译之前创建的虚拟用户文件为db
     chmod 600 /etc/vsftpd/{virtual_login,virtual_login.db}

    8)修改vsftpd配置文件

    cp  -rp /etc/vsftpd/vsftpd.conf   /etc/vsftpd/vsftpd.conf.bak    ##源配置文件
    
    
    vi  /etc/vsftpd/vsftpd.conf                                      ##修改原配置文件,参数解释请查看本博客内vsftpd简介  https://blog.csdn.net/make_zhf/article/details/73799945
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    chown_uploads=YES
    chown_username=ftptest                              ##注意:这里是步骤(6)创建的Linux本地用户ftptest,不改这里虚拟用户将不能下载文件
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    idle_session_timeout=600
    data_connection_timeout=180
    ascii_upload_enable=YES
    ascii_download_enable=YES
    
    pasv_min_port=5881
    pasv_max_port=5886
    
    ftpd_banner=Welcome to  ZHOU  FTP service.
    chroot_local_user=YES
    listen=YES
    
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    guest_enable=YES
    guest_username=ftptest
    user_config_dir=/etc/vsftpd/vsftpuser_conf

    9)创建虚拟用户上传文件目录

     mkdir  /testftp/test1 -p
     mkdir  /testftp/test2 -p

    10)创建虚拟用户配置文件目录及虚拟用户配置文件

    mkdir   /etc/vsftpd/vsftpuser_conf  -p       #创建虚拟用户文件目录,存放虚拟用户配置文件
     
    [root@jenkins vsftpuser_conf]# cd  /etc/vsftpd/vsftpuser_conf
    
    vi  test1
    local_root=/testftp/test1
    anon_umask=022
    anon_world_readable_only=NO
    write_enable=YES
    #anonymous_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    idle_session_timeout=600
    data_connection_timeout=120
    max_clients=10
    max_per_ip=5
    
    
    vi  test2
    local_root=/testftp/test2
    anon_umask=022
    anon_world_readable_only=NO
    write_enable=YES
    #anonymous_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    idle_session_timeout=600
    data_connection_timeout=120
    max_clients=10
    max_per_ip=5
    
    ##注意:创建虚拟用户配置文件内容,用户必要和virtual_login文件用户保持一致

    11)启动启动vsftpd服务及修改虚拟用户上传文件目录用户和用户组

    service vsftpd restart
    
    chown ftptest.ftptest  /testftp  -R          ##linux 本地用户
    
    
    vi  /etc/sysconfig/iptables                           ##添加防火墙规则,放开那21端口,让虚拟用户过来。
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
    
    service  iptables  restart
    
    
    

     

     

     

     

    展开全文
  • Redhat7&Centos7 Vsftpd虚拟用户使用方式

    千次阅读 2021-01-20 16:40:12
    文档阅读说明,本篇文档主要讲解在工作中如何使用ftp虚拟用户替代系统用户实现文件传输等。 1、Vsftpd的安装 vsftp安装通过yum进行安装,yum具体配置方式就不再本文档中体现。 # vsftpd是ftp server服务,用于ftp...
  • 在Windows上用Filezilla Server ftp程序,通过配置界面,可以很容易地实现FTP虚拟用户放号和限制虚拟用户访问IP,但是在Linux上部署vsftpd时却遇到了一些小麻烦,本来以为FTP在两个系统下,都有很好的对应解决方案的...
  • 一、简述 1.ftp:file transfer protocol,文件传输协议 2.两类连接 命令连接:传输命令 数据连接:传输数据 3.两种模式 主动模式:port server:20/tcp连接客户端的命令连接使用的端口向后...5.vsftpd: url:ftp://u...
  • Vsftpd配置虚拟用户及权限 下载 yum –y install vsftpd 1.添加vsftpd服务的宿主用户,设置主目录 useradd vsftpd –d /home/ftp –s /sbin/nologin 2.对vsftpd.conf进行基本配置 mv /etc/vsftpd/vsftpd....
  • vsftpd 虚拟用户实现登陆ftp配置目的配置环境配置文件及相关文件配置过程安装vsftpd创建虚拟用户创建映射的本地用户配置pam 虚拟用户验证文件配置ftp 文件配置虚拟用户权限配置解决其他因素验证测试 配置目的 vsftpd...
  • ftp工作模式:主动(FTP...vsftpd三种认证模式:匿名模式、本地用户模式、虚拟用户模式(最安全) 1、安装vsftpd并设置开启启动 yum -y install vsftpd ftp systemctl enable vsftpd 2、编辑虚拟数据库文件 ...
  • 两种方式建立Vsftpd虚拟用户   我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 本地用户登录:使用系统用户登录,在/etc/...
  • 建立Vsftpd虚拟用户

    2012-01-19 10:58:27
    登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 本地用户登录:使用系统用户登录,在/etc/passwd中。 虚拟用户登录:这是FTP专有用户...
  • 遇到的问题: 最近需要在Ubuntu18.04上编译并安装vsftpd,从官网...下载vsftpd-3.0.3.tar.gz后,用源码编译成功了vsftpd,配置好ftp虚拟用户后,输入用户名和密码后,发现一直返回530 Login incorrect。 解...
  • 又是vsftpd虚拟用户无法登陆,以前常用apache用户,这次自己建了一个用户vuser,折腾半天不得要领。 看了上次的无法登陆文章,里面提到了一个方法,就是在服务器上用ftp命令登陆,会提示详细的错误信息,而在客户端...
  • CentOS7下vsftpd虚拟用户配置

    千次阅读 2017-04-19 13:25:13
      近来用vsftpd架设FTP,但在虚拟用户这一环节卡住了。查阅《鸟哥的LINUX私房菜》,《Linux运维之道》以及各种百度之后。终于搞定了,现将步骤和容易出问题的环节作以记录。 (实验不建议拷贝,引号会导致命令不...
  • vsftpd虚拟用户配置

    2021-05-07 09:56:03
    此配置可以满足审计的审核和区分各用户权限属性的功能。 实验环境关闭selinux和防火墙 1.安装 yum install -y vsftpd a.ftp默认匿名登陆的用户是系统ftp用户 b.ftp用户的家目录就是在/var/ftp目录 c.匿名用户...
  • 实验要求:设置开机自动启动FTP服务,同时运行等级为3、5,设置虚拟用户访问,其根目录为/home/ftp,要求虚拟用户和匿名用户都可以访问(匿名用户只拥有上传权限),添加虚拟用户(admin,admin1.admin2)。设置虚拟...
  • 两种方式建立Vsftpd虚拟用户.pdf
  • 文章目录vsftpd安装1、先检查是否安装了vsftpd,如果有则删除,没有则安装2、启动测试3、进入vsftpd的配置目录,备份默认的配置文件创建虚拟用户1、先备份vsftpd文件,再编写2、增加账户3、配置账号密码文件,并设置...
  • 以下实验全部在ubuntu server 14.04 X64上进行。 业务要求: 现在要求创建一个FTP账号user1,该账号只能登录到/www目录下,不能切换到... 一:安装vsftpd ...sudo apt-get -y install vsftpd ...查看下vsftpd都安装了那些...
  • 虚拟用户用户名与vconf下文件名对应正确 本身这套配置应该没问题,因为已经配置过很多台服务器,都是使用的这套配置,唯独这台服务器,同样的配置,就不行了。 vsftpd.conf配置如下: ``` anonymous_...
  • 实现基于文件验证的vsftpd虚拟用户 一、创建用户数据库文件 • vim /etc/vsftpd/vusers.txt wang wangpass mage magepass cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db chmod 600 ...
  • Centos7下安装vsftpd并启用虚拟用户访问

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,242
精华内容 5,696
关键字:

vsftpd虚拟用户