搭建基于mysql验证的ftp并实现零配置新增虚拟用户

7 篇文章 0 订阅
  • 配置FTP服务器

    1.在FTP服务器上安装vsftpd和pam_mysql包
        centos6.x中安装 pam_mysql需要先安装,epel源

    yum -y install epel

       安装完成后可用命令 :yum repolist  检查是否安装成功


    接下来安装pam_mysql  和vsftpd    yum install vsftpd pam_mysql

  • 创建FTP所需PAM模块认证文件
     

    在/etc/pam.d/目录下创建一个名为vsftpd.mysql存放PAM模块的配置文件
         cd /etc/pam.d/
         touch  vsftpd.mysql 
         vim vsftpd.mysql
         添加如下几行:
         auth required /lib64/security/pam_mysql.so user=root passwd=$root@ipaynow_test host=192.168.103.98  db=ftp_mysql_test table=ftpuser usercolumn=username passwdcolumn=password crypt=0
         account required /lib64/security/pam_mysql.so user=root passwd=$root@ipaynow_test host=192.168.103.98 db=ftp_mysql_test table=ftpuser usercolumn=username passwdcolumn=password crypt=0
    
    
    配置字段说明 
        • auth 表示认证 
        • account 验证账号密码正常使用 
        • required 表示认证要通过 
        • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路 径而言,也可以写绝对路径;后面为给此模块传递的参数 
        • user=vsftpd为登录mysql的用户 
        • passwd=magedu 登录mysql的的密码 
        • host=mysqlserver  mysql服务器的主机名或ip地址 
        • db=vsftpd  指定连接msyql的数据库名称 
        • table=users 指定连接数据库中的表名 
        • usercolumn=name 当做用户名的字段 
        • passwdcolumn=password 当做用户名字段的密码 
        • crypt=2 密码的加密方式为mysql password()函数加密 
        注意 :crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示sha1 加密 
  • 建立系统普通用户,用作于虚拟用户映射的用户
    1.创建系统用户,配置共享目录
     

        #创建虚拟用户映射的系统用户及对应的目录 
            useradd -s /sbin/nologin -d /opt/ftpdic ftpuser 
        #修改对应的目录权限,因为FTP共享根目录不能有写权限    
            chmod 555 /opt/ftpdic
        #创建可以上传下载的共享目录
            mkdir /opt/ftpdic/{upload,pub}
        #并给vuser用户ACL权限
            setfacl –m u:ftpuser:rwx /opt/ftpdic/

           修改主配置文件
          

确认/etc/vsftpd.conf中是否已经启用了以下选项
    #支持匿名用户登入
        anonymous_enable=YES 
    #添加下面两项 ,作用是支持虚拟用户映射为某一个系统用户
        guest_enable=YES 
        guest_username=ftpuser
    #修改下面一项,原系统用户无法登录 
        pam_service_name=vsftpd.mysql 

           启动vsftpd服务

  #启动服务
        service vsftpd start
    #开机自动启动
        chkconfig vsftpd on
    #查看端口打开情况
    ss -ntlp|grep :21 
  •  实现每个虚拟用户具有各自不同的权限

    1,修改主配置文件

        vim /etc/vsftpd/vsftpd.conf  
        添加如下选项,作用是让虚拟用户支持独立权限配置文件,可以自定义存放目录。
        user_config_dir=/etc/vsftpd/vsftpd_user_conf/ 

    2,在/etc/vsftpd/vusers_config/目录下创建每个虚拟用户的权限配置文件,文件名对应用户名

        mkdir /etc/vsftpd/vsftpd_user_conf/ 
        cd  /etc/vsftpd/vsftpd_user_conf/ 
        touch wang 
        touch li
    
        "注意:虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关 指令进行的。   "
        下面的权限都可以添加至文件中,需要什么权限添加什么权限
    
                #是否支持上传功能
                anon_upload_enable={YES|NO}
                #是否支持创建文件功能
                anon_mkdir_write_enable={YES|NO} 
                #是否支持删除文件功能
                anon_other_write_enable={YES|NO} 
                #指定虚拟账户登入的共享目录    //只读权限可以使共享目录的子目录,即虚拟用户家目录
                local_root=/opt/ftpdic/upload1/   
    
            例如:让wang用户可读/opt/ftpdic/upload/
            vim  wang
            local_root=/opt/ftpdic/upload1/
  •  程序实现添加用户后自动创建虚拟用户家目录,并赋只读权限

      //单个参数
        public static boolean execute(String shellFile, String param) {
    
            ProcessBuilder pb = new ProcessBuilder(shellFile, param.trim());
            //pb.directory(new File(CASPERJS_FILE_DIR));
            int runningStatus = 0;
            String s = null;
            try {
                Process p = pb.start();
                BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
                BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                while ((s = stdInput.readLine()) != null) {
                    log.info(s);
                }
                while ((s = stdError.readLine()) != null) {
                    log.info(s);
                }
    
                try {
                    runningStatus = p.waitFor();
                    return runningStatus == 0;
                } catch (InterruptedException e) {
                    log.error(e.getMessage(),e);
                    return false;
                }
    
            } catch (IOException e) {
                log.error(e.getMessage(),e);
                return false;
            }
    
        }

    通过java执行liunx脚本的方式在 /opt/ftpdic/ 下创建一个与用户的家目录,并在/etc/vsftpd/vsftpd_user_conf/  下创建一个该用户的配置文件。脚本如下:
     

    #!/bin/bash
    
    echo "当前执行的bash shell为:${0}"
    
    mch_id=${1}
    
    if [${1} == '']; then
    echo "请输入商户号"
    exit
    fi
    
    echo "传入的商户号为:${mch_id}"
    
    ftp_dir=/opt/ftpdic
    echo "当前目录为:${ftp_dir}"
    
    echo "在当前目录创建以商户号命名的文件夹"
    mkdir "${ftp_dir}/${mch_id}"
    
    ftp_user_conf_dir=/etc/vsftpd/vsftpd_user_conf
    
    echo "创建用户配置  ${mch_id}"
    echo "local_root=/opt/ftpdic/${mch_id}/
          anon_upload_enable=YES" > ${ftp_user_conf_dir}/${mch_id}
    

    至此,就完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值