• 【ftp篇】 vsftp(ftp) 每天生成一个动态密码


    前言

    社长最近接到一个需求,需要ftp每天动态生成一个密码

    为什么需要动态每日生成一个密码?

    在软硬件通讯过程中,就以共享单车为例,共享单车的硬件程序有变动后,难道需要我人工一个个的去烧录程序,那肯定太low,一般都是通过服务器跟硬件简历连接后,下发命令,命令里面会包含ftp的地址、账号、密码、上次的路径。硬件端会知道我们的密码,会有一个安全隐患,每日动态生成ftp密码的需求就应运而生。

    实现思路(头脑风暴):

    • 既然是每天生成一个密码,那肯定是跟日期有关,那就需要考虑一个根据日期动态生成密码得逻辑
    • 编写脚本,根据上面生成的密码,修改ftp密码
    • cron计划,设置某个 时间,去触发脚本

    编写脚本

    centos8部署vsftpd

    • 前提:默认大家都是已搭建好ftp的环境,建议使用虚拟账号的方式搭建,这样才好动态修改ftp的密码。

    输入vim ftp.sh

    source /etc/profile
    #!/bin/bash
    ####密码加密的前缀
    FTP_NAME=ftp
    ####密码存放的目录
    FTP_PATH=/etc/vsftpd
    TXT_PATH=$FTP_PATH/vuser.list
    DB_PATH=$FTP_PATH/vuser.db
    
    
    num1=$(date "+%m%d")
    num1=$(expr $num1 + 0)
    let num=num1+num1
    let num3=num/3
    let num2=num%3
    
    ###根据固定的路径组装密码,每天生成一次
    app_name=$FTP_NAME$num$num3$num2
    
    
    #####删除最后一行密码,最后加入一行数据
    sed -i '4d' $TXT_PATH
    echo $app_name  >> $TXT_PATH
    echo $app_name
    
    
    ####重新生成密码
    db_load -T -t hash -f $TXT_PATH $DB_PATH
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 生成密码的规则可自己定义
    • sed -i ‘4d’ $TXT_PATH 4d的意思,就是删除第4行
    • echo $app_name >> $TXT_PATH 就是最后一行新增一条数据

    在/etc/vsftpd的vuser.list文件中填写对应的内容
    在这里插入图片描述

    • 单数是账号(test1111111,ftp123)、偶数是密码
    • 注意:我定的规则是,第一个账号作为不变的密码,第二个账号,就是我需要每天动态生成的密码

    定时任务

    查看是否安装

    crontab:rpm -qa | grep crontab
    
    • 1
    • 一般得系统都自带定时任务
      输入crontab -e
    ####增加一个ftp密码定时每天修改的脚本
    1 0 * * * /root/ftp.sh
    
    • 1
    • 2
    • 表示每天的00:01分,会执行对应的脚步
    ####添加或者修改定时任务
    crontab -e
    ####查看定时任务
    crontab -l
    ####查看定时任务的日志记录,可能通过这里查看确定定时任务是否执行
    tail -f /var/log/cron
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    java对应的代码

     /**
         * 根据username,进行密码的加密,每天的凌晨脚本去修改密码
         * @param username
         * @return
         */
        public static String passwordFtp(String username){
            Integer mmdd = Integer.parseInt(TimeUtil.dateToString(new Date(),"MMdd"));
            Integer one = mmdd + mmdd;
            Integer two = one / 3;
            Integer three = one % 3;
            return username+ one.toString() + two.toString() + three.toString() ;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • username就是密码前缀,默认为ftp
  • 相关阅读:
    3-网络架构和Netty系列-Java NIO三件套Buffer、Selector、Channel
    【监听服务器】自动重启脚本
    Spring Boot 接口数据加解密,so easy!
    Java虚拟机运算指令学习
    等保测评有那些流程?为什么要做等保
    jvm实践
    linux安装opencv
    第三版全球干旱指数和潜在蒸散数据发布
    golang grpc protoc 环境配置
    c++异常
  • 原文地址:https://blog.csdn.net/qq_16855077/article/details/133696609