返回介绍

14.4 系统环境部署

发布于 2024-01-29 22:54:22 字数 4764 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文