- 本书赞誉
- 前言
- 第一部分 基础篇
- 第1章 系统基础信息模块详解
- 第2章 业务服务监控详解
- 第3章 定制业务质量报表详解
- 第4章 Python 与系统安全
- 第二部分 高级篇
- 第5章 系统批量运维管理器 pexpect 详解
- 第6章 系统批量运维管理器 paramiko 详解
- 第7章 系统批量运维管理器Fabric详解
- 第8章 从零开发一个轻量级 WebServer
- 第9章 集中化管理平台 Ansible 详解
- 第10章 集中化管理平台 Saltstack 详解
- 第11章 统一网络控制器 Func 详解
- 第12章 Python 大数据应用详解
- 第三部分 案例篇
- 第13章 从零开始打造 B/S 自动化运维平台
- 第14章 打造 Linux 系统安全审计功能
- 第15章 构建分布式质量监控平台
- 第16章 构建桌面版 C/S 自动化运维平台
14.4 系统环境部署
14.4.1 系统环境说明
系统安全审计功能的服务器端作为OMServer项目的App存在,关于服务器端Web Server的环境搭建本节将不再说明。为了便于读者理解,下面对上报主机系统环境配置、Agent与服务器端Python实现方法进行详细说明,环境设备角色如表14-1所示。
表14-1 系统环境说明表
14.4.2 上报主机配置
系统安全审计功能主机上报需要完成两个任务,一为配置用户profile,二为编写上报Python脚本,下面一一进行说明。
(1)系统用户环境配置
通过配置Linux profile的history相关变量来实现与安全审计功能的对接,包括指定系统账号history存放路径、存储长度、扩展信息、PROMPT_COMMAND事件等,更多见以下配置及含义说明。
# vi /etc/profile # 追加以下配置 #add by OMAudit export HISTFILE=$HOME/.bash_history #指定用户history日志存放路径 export HISTSIZE=1200 #指定history 命令输出的记录数 export HISTFILESIZE=1200 #指定历史记录文件.bash_history的最大存储行数 export HISTCONTROL=ignoredups #不记录连续重复的命令 export HISTTIMEFORMAT="`whoami` %F %T " # history命令显示当前记录的用户与时间,例如: # “root 2014-06-05 23:32:16 free –m” # PROMPT_COMMAND变量最为核心,实现了指定内容在出现bash提示符前执行的功能; # “history –a” 将目前新增的history命令写入histfiles中;“history -c”刪除记录的所有命令(仅内存); # “history -r” 将histfiles 的內容读到内存中,即可以通过history查看; # “/home/test/OMAudit/OMAudit_agent.py $(history 1)” 通过$(history 1)获取最后一条 # 命令,且作为参数传递给OMAuditmain.py脚本,做后续的命令数据信息上报 export PROMPT_COMMAND="history -a; history -c; history -r;"'/home/test/OMAudit/ OMAudit_agent.py $(history 1)' shopt -s histappend #历史清单将以添加形式加入HISTFILE变量指定的文件,而不是覆盖 typeset -r PROMPT_COMMAND #设置关键变量只读,提高安全性 typeset -r HISTTIMEFORMAT
保存配置后使其生效,运行“source/etc/profile”命令,profile环境配置完成。
(2)客户端上报脚本
客户端上报脚本的作用是将接收的最新Linux命令“$(history 1)”及服务器相关信息提交到OMServer主机,其中config.py为上报agent的配置文件,涉及三个选项,详细说明如下:
【/home/test/OMAudit/config.py】
# -*- coding: utf-8 -*- #!/usr/bin/env python Net_driver = "eth0" #为便于记录上报来源主机,获取指定网卡驱动的IP地址 OMServer_address = "omserver.domain.com" #OMServer服务器端地址,作为上报的目的 Connect_TimeOut = 3 #指定上报超时时间,单位为秒
OMAudit_agent.py作为主上报agent程序,负责信息的上报,采用了httplib模块作为HTTP客户端,详细源码及说明如下:
【/home/test/OMAudit/OMAudit_agent.py】
#!/usr/bin/env python #coding:utf-8 import sys import socket import fcntl import struct import logging from config import * import urllib,httplib socket.setdefaulttimeout(Connect_TimeOut) #设置全局Socket超时时间(覆盖HTTP连接超时) logging.basicConfig(level=logging.DEBUG, #启用日志记录 format='%(asctime)s [%(levelname)s] %(message)s', filename=sys.path[0]+'/omsys.log', filemode='a') #对$(history 1)信息进行合法校验,少于6个参数则报错,正确的格式为“173 root 2014-06-07 22:05:56 ls” if len(sys.argv)<6: logging.error('History not configured in /etc/profile!') sys.exit def get_local_ip(ethname): #获取本地IP地址函数,用来确认数据来源 try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) addr = fcntl.ioctl(sock.fileno, 0x8915, struct.pack('256s', ethname)) return socket.inet_ntoa( addr[20:24] ) except Exception,e: logging.error('get localhost IP address error:'+str(e)) return "127.0.0.1" def pull_history(http_get_param=""): #数据上报函数 try: #与OMServer服务器建立HTTP连接,指定超时时间 http_client =httplib.HTTPConnection(OMServer_address, 80, timeout= Connect_TimeOut) http_client.request("GET", http_get_param) #发起GET请求 response =http_client.getresponse #获取HTTP返回对象 if response.status != 200: #非HTTP 200状态则退出 logging.error('response http status error:'+str(response.status)) sys.exit http_content=response.read.strip #返回字符串非“OK”则退出 if http_content != "OK": logging.error('response http content error:'+str(http_content)) sys.exit except Exception, e: logging.error('connection django-cgi server error:'+str(e)) sys.exit finally: if http_client: http_client.close else: logging.error('connection django-cgi server unknown error.') sys.exit Sysip = get_local_ip(Net_driver) #调用获取本地IP函数 SysUser = sys.argv[2] #获取history信息中的系统用户 History_Id = sys.argv[1] #获取history ID信息 History_date = sys.argv[3] #获取history 日期信息 History_time = sys.argv[4] #获取history 时间信息 History_command = "" for i in range(5, len(sys.argv)): #获取history的系统命令信息 History_command+= sys.argv[i]+" " #合并所有信息的HTTP GET参数格式,部分信息使用urllib.quote进行URL编码 s= "/omaudit/omaudit_pull/?history_id="+History_Id+"&history_ip="+Sysip+"&history_user="+SysUser+ \ "&history_datetime="+History_date+urllib.quote(" ")+History_time+"&history_com mand="+urllib.quote(History_command.strip) pull_history(s) #调用数据上报函数
添加“/home/test/OMAudit/OMAudit_agent.py”可执行权限,执行以下chmod命令,客户端上报agent部署完毕。接下来使用SSH工具登录Linux服务器,输入的任何shell命令都会即时同步到服务器端,见图14-4。
# chmod +x/home/test/OMAudit/OMAudit_agent.py
图14-4 系统命令即时上报并展示
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论