• Linux 使用python写一个防恶意篡改的脚本


    kx.py

    这段代码是一个Python脚本,主要实现了以下功能:
    1.定义了mkdir_s函数,用于创建目录。
    2.定义了start函数,作为具体任务执行的入口函数。
    3.定义了heart_beat函数,用于定时执行任务。
    4.定义了check函数,用于检查文件的MD5值是否与预期一致。
    5.定义了file_md5函数,用于计算文件的MD5值。
    6.定义了init_protected函数,用于初始化受保护的文件列表,并将文件拷贝到临时目录,并记录文件的MD5值。
    在__main__函数中调用init_protected函数来初始化受保护的文件列表,并启动定时任务。
    整体流程是:首先调用init_protected函数初始化受保护的文件列表,然后启动定时任务,每隔一段时间执行start函数,并在start函数中调用check函数检查文件的完整性。

    import os
    import hashlib
    import json
    
    import threading
    import time
    import shutil
    
    cancel_tmr = False
    
    def  mkdir_s(path):
        path = path.replace('\\','/')
        pos = path.rfind('/')
        print('mkdir -p {}'.format(path[0:pos]))
        os.system('mkdir -p {}'.format(path[0:pos]))
    
    def start():
        #具体任务执行内容
        print("hello world")
        check()
     
    def heart_beat():
        # 打印当前时间
        print(time.strftime('%Y-%m-%d %H:%M:%S'))
        if not cancel_tmr:
            start()
            # 每隔3秒执行一次
            threading.Timer(1, heart_beat).start()
    
    
    def check():
        with open('/tmp/sysback/protected.json', 'r') as f: 
            data = f.read()
            json_data= json.loads(data)
            for k in json_data:
                md5 = file_md5(k)
                if md5 != json_data[k][1]:
    
                    print(k, json_data[k][0], json_data[k], file_md5(k))
                    tmppath = '/tmp/sysback/'+json_data[k][0]
                    os.system('cp -a {} {}'.format(tmppath, k))
    
    
    def file_md5(path):
    
        if not os.path.exists(path):
            return -1
    	if os.path.
        # 打开文件并读取其中的数据
        with open(path, 'rb') as f:
            data = f.read()
    
        # 计算MD5值并输出结果
        md5_value = hashlib.md5(data).hexdigest()
        # print(md5_value)
        return md5_value
    
    
    def init_protected(SMARTROOT):
    #    con_file = SMARTROOT+'/conf/protected.conf'
        os.system('rm -fr /tmp/sysback')
        os.system('mkdir -p /tmp/sysback')
    
        con_file = 'protected.conf'
        dumps={}
        with open(con_file, 'r') as f:        
            
            for line in f:
    #            print(line)
                filename = line.strip()
                filepath = SMARTROOT + '/'+ filename
                tmppath = '/tmp/sysback/'+ filename
                mkdir_s(tmppath)
                md5 = file_md5(filepath)
                print(filepath, md5)
                info = []
                info.append(filename)
                info.append(md5)
                dumps[filepath] = info
                # shutil.copy(filepath, tmppath)
                os.system('cp -a {} {}'.format(filepath, tmppath))
    
        with open('/tmp/sysback/protected.json', 'w') as f: 
            f.write(json.dumps(dumps)) 
        
    
    
    
    
    # for dirpath, dirnames, filenames in os.walk(root):
    #     # print(dirpath, dirnames, filenames)
    
    #     for filename in filenames:
    #         path = dirpath+'/'+filename
    #         md5 = file_md5(path)
    #         print(path, md5)
    
    if __name__ == '__main__':
        root = '/home/ecs/jkcs'
    
        # print(mkdir_s(root))
        init_protected(root)
    
        heart_beat()
        # 15秒后停止定时器
        # time.sleep(15)
        # cancel_tmr = Tru
    
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108

    protected.conf

    bin/mams_equipmentCount
    bin/nccsunbalancealarm
    bin/nccs_bus_monitor
    bin/nccs_fire_pushgraph
    bin/tool_alarmreply
    bin/smart_serv
    bin/smart_serv_offline
    bin/nccs_event_svr
    bin/createmodelfile
    bin/nccs_statserver
    bin/GFileRead
    bin/netsechist
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    start.sh

    在后台运行一个名为kx3-D5000.py的Python脚本。nohup命令用于让程序在后台运行,并将输出重定向到/dev/null,即将标准输出和错误输出都丢弃掉。这样脚本可以在Linux或Unix系统上使用,以确保脚本在后台持续运行,并且不会受到终端关闭或SSH断开连接的影响。

    #!/bin/bash 
    nohup python3 kx3-D5000.py >/dev/null 2>&1 &
    
    
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    Canvans:绘制饼图和玫瑰饼图
    大表删除操作
    docker安装mysql数据库,忽略大小写,设置时区
    IPv6 PIRng 和路由手工汇总【下一代互联网04】
    ubuntu20.04.1网络图标突然消失,无法上网
    使用nmea+pps为激光雷达做授时,然后使用gtimu协议中的周和周内秒计算imu数据的时间戳,结果相差一秒,同样来自gps时间,到底imu和雷达的时间戳哪个是对的呢
    机器学习——入门
    LeetCode_53_最大子数组和
    大整数相加,相减,相乘,大整数与普通整数的相乘,相除
    C++学习笔记:类与对象1
  • 原文地址:https://blog.csdn.net/weixin_45492457/article/details/133064041