系统环境部署
系统环境说明
系统安全审计功能的服务器端作为 OMServer 项目的 App 存在,关于服务器端 Web Server 的环境搭建本节将不再说明。为了便于读者理解,下面对上报主机系统环境配置、Agent 与服务器端 Python 实现方法进行详细说明,环境设备角色如表14-1所示。
Figure 1. 表14-1 系统环境说明表
上报主机配置
系统安全审计功能主机上报需要完成两个任务,一为配置用户 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 的配置文件,涉及三个选项,详细说明如下:
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 客户端,详细源码及说明如下:
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 as 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 as 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_command = "+urllib.quote(History_command.strip())
pull_history(s) # 调用数据上报函数
添加 “/home/test/OMAudit/OMAudit_agent.py” 可执行权限,执行以下 chmod 命令,客户端上报 agent 部署完毕。接下来使用 SSH 工具登录Linux 服务器,输入的任何 shell 命令都会即时同步到服务器端,见图14-4。
Figure 2. 图14-4 系统命令即时上报并展示
# chmod +x/home/test/OMAudit/OMAudit_agent.py