当前位置: 代码网 > it编程>前端脚本>Python > Python自动化与系统安全

Python自动化与系统安全

2024年08月02日 Python 我要评论
信息安全是运维的根本,直接关系到企业的安危,稍有不慎会造成灾难性的后果。比如经年发生的多个知名网站会员数据库外泄事件,信息安全体系建设已经被提到了前所未有的高度。如何提升企业的安全防范水准是目前普遍面临的问题,主要有,安全设备防护、提高人员安全意识、实施系统平台安全加固、安全规范融合到ITIL体系、关注安全设备防护、提高人员安全意识、实施系统平台安全加固、安全规范融合到ITIL体系、关注最新安全发展动向,通过上述几个方面可以在很大程度上避免出现安全事故。

        信息安全是运维的根本,直接关系到企业的安危,稍有不慎会造成灾难性的后果。比如经年发生的多个知名网站会员数据库外泄事件,信息安全体系建设已经被提到了前所未有的高度。如何提升企业的安全防范水准是目前普遍面临的问题,主要有,安全设备防护、提高人员安全意识、实施系统平台安全加固、安全规范融合到itil体系、关注安全设备防护、提高人员安全意识、实施系统平台安全加固、安全规范融合到itil体系、关注最新安全发展动向,通过上述几个方面可以在很大程度上避免出现安全事故。

        通过python来实现系统级的安全防范策略,包括构建集中式的病毒扫描机制端口安全扫描安全密码生成

1.构建集中式的病毒扫描机制

        clam antivirus(clamav)是免费而且开放源代码的防毒软件,软件与病毒码的更新皆由社群免费发布。目前clamav主要是使用在由linux、freebsd等unix-like系统架设的邮件服务器上,提供电子邮件的病毒扫描服务。clamav本身是在文字接口下运作,但也有许多图形接口的前端工具可用,另外由于其开放源代码的特性,在windows与mac os x平台都有其移植版。

官网地址:http://www.clamav.net/lang/en/

        pyclamad是一个python第三方模块,可让python直接使用clamav病毒扫描守护进程clamd,来实现一个高效的病毒检测功能

 

2.模块常用方法说明

pyclamad提供了两个关键嘞,一个为clamdnetworksocket()类,实现使用网络套接字操作clamd;另一个为clamdunixsocket()类,实现使用unix套接字操作clamd。两个类定义的方法完全一样。

clamdnetworksocket()类

  • __init__(self,host='127.0.0.1',port=3310,timeout=none)方法,是clamdnetworksocket类的初始方法,参数host为连接主机ip;参数port为连接的端口,默认为3310,与/etc/clamd.conf配置文件中的tcpsocket参数要保持一致;timeout为连接的超时时间。
  • contcan_file(self,file)方法,实现扫描指定的文件或目录,在扫描时发生错误或发现病毒将不终止,参数file(string类型)为指定的文件或目录的绝对路径
  • multiscan_file(self,,file)方法,实现多线程扫描指定的文件或目录,多核环境速度更快,在扫描时发生错误或发现病毒将不终止,参数file(string类型)为指定的文件或目录的绝对路径
  • scan_file(self,file)方法,实现扫描指定的文件或目录,在扫描时发生错误或发现病毒将终止,参数file(string类型)为指定的文件或目录的绝对路径
  • shutdown(self)方法,实现强制关闭clamd进程并退出
  • stats(self)方法,获取clamscan的当前状态
  • reload(self)方法,强制重载clamd病毒特征库,扫描前建议做reload操作
  • eicar(self)方法,返回eicar测试字符串,即生成具有病毒特征的字符串,便于测试

 

3.实践

实现一个集中式的病毒扫描管理,针对不同环境定制扫描策略,比如扫描对象、描述模式、扫描路径、调度评率等

1.首先对apt-get进行更新,执行下面的代码:


2.之后安装clamav:这一步可能会出错,ubuntu会提示你重新执行一下上面的update方法,我试了一下,重新执行update之后再重新执行下面的命令就能成功执行了。


3.更新病毒库:这一部分可能会报错,

error: /var/log/clamav/freshclam.log is locked by another process
error: problem with internal logger (updatelogfile = /var/log/clamav/freshclam.log).

如果要停止守护程序并手动运行它:

sudo systemctl stop clamav-freshclam.service

手动运行它:

sudo freshclam

4.clamav安装成功之后,可以对它进行测试,执行下面的代码对home文件夹下的文件进行病毒查杀,不出错表示正常执行啦:


5.如果需要自动执行病毒查杀功能,需要执行下面的命令。第一行是启动clamav服务,这一个命令是你如果按章pyclamd调用clamav时必须要提前执行的方法。第二行命令是自动更新病毒库的。到这里,clamav的安装就结束了,撒花撒花~


6.安装pyclamd,直接用pip install pyclamd就行,如果是用python3的话就换成pip3执行。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import pyclamd
from threading import thread

class scan(thread):
    def __init__(self,ip,scan_type,file):
        """构造方法,参数初始化"""
        thread.__init__(self)
        self.ip = ip
        self.scan_type = scan_type
        self.connstr=""
        self.scanresult=""

    def run(self):
        """多进程run方法"""
        try:
            cd = pyclamd.clamdnetworksocket(self.ip,22)
            if cd.ping():
                self.connstr = self.ip+" connection [ok]"
                cd.reload()  # 重载clamd病毒特征库,建议更新病毒库后做reload()操作
                if self.scan_type == "contscan_file":   #选择不同的扫描模式
                    self.scanresult = "{0}\n".format(cd.comtscan_file(self.file))
                elif self.scan_type == "multiscan_file":
                    self.scanresult = "{0}\n".format(cd.contscan_file(self.file))
                elif self.scan_type=="scan_file":
                    self.scanresult="{0}\n".format(cd.scan_file(self.file))
                time.sleep(1)   #线程挂起1秒
            else:
                self.connstr=self.ip+"ping error,exit"
                return
        except exception as e:
            self.connstr=self.ip+""+str(e)
ips = ['192.168.88.223']    #扫描主机列表
scantype = "multiscan_file"   # 指定扫描模式,支持multiscan_file、contscan_file\scan_file
scanfile = "/tmp"    # 指定扫描路径
i = 1

threadnum = 4 # 指定启动的线程数
scanlist = [] # 存储扫描scan类线程对象列表

for ip in ips:
    currp = scan(ip,scantype,scanfile)  # 创建扫描scan类对象,参数(ip,扫描模式,扫描路径)
    scanlist.append(currp)  # 追加对象到列表

    if  i%threadnum == 0 or i == len(ips):      # 当达到指定的线程数或ip列表数后启动、退出线程
        for task in scanlist:
            task.join()    # 等待所有子线程退出,并输出扫描结果
            print(task.connstr)  # 打印服务器连接信息
            print(task.scanresult)  # 打印扫描结果
        scanlist = []
    i+=1   

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com