摘要: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://koumm.blog.51cto.com/703525/1763145 一、编译BASH实现bash的syslog日志记录功能 1. 本文将通过bash软件实现history记录到syslog日志的功能,并通过该方式可以实现实时的传送到了远端的日志集中服务器上,可以实现操作目志的审计功能。

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://koumm.blog.51cto.com/703525/1763145

一、编译BASH实现bash的syslog日志记录功能

1. 本文将通过bash软件实现history记录到syslog日志的功能,并通过该方式可以实现实时的传送到了远端的日志集中服务器上,可以实现操作目志的审计功能。

操作系统版本 : CentOS 6.5 x64

2. 安装6.5对应bash源码包

# wget http://vault.centos.org/6.5/os/Source/SPackages/bash-4.1.2-15.el6.src.rpm     
# rpm -i bash-4.1.2-15.el6_4.src.rpm

#安装报警告可以忽略。     
warning: bash-4.1.2-15.el6_4.src.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY     
warning: user mockbuild does not exist - using root     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root     
...     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root     
warning: group mockbuild does not exist - using root     
warning: user mockbuild does not exist - using root

[root@localhost soft]#

安装完成后,会在当前用户主目录下创建如下目录结构。

[root@localhost ~]# pwd    
/root     
# ls     
anaconda-ks.cfg  bash-4.1.2-15.el6_4.src.rpm  install.log  install.log.syslog  rpmbuild  公共的  模板  视频  图片  文档  下载  音乐  桌面     
[root@localhost ~]# tree rpmbuild/     
rpmbuild/     
├── SOURCES     
│   ├── bash-2.02-security.patch     
│   ├── bash-2.03-paths.patch     
│   ├── bash-2.03-profile.patch     
│   ├── bash-2.05a-interpreter.patch     
│   ├── bash-2.05b-debuginfo.patch     
│   ├── bash-2.05b-manso.patch     
│   ├── bash-2.05b-pgrp_sync.patch     
│   ├── bash-2.05b-readline-oom.patch     
│   ├── bash-2.05b-xcc.patch     
│   ├── bash-3.2-audit.patch     
│   ├── bash-3.2-ssh_source_bash.patch     
│   ├── bash-4.0-nobits.patch     
│   ├── bash41-001     
│   ├── bash41-002     
│   ├── bash-4.1-bind_int_variable.patch     
│   ├── bash-4.1-broken_pipe.patch     
│   ├── bash-4.1-defer-sigchld-trap.patch     
│   ├── bash-4.1-examples.patch     
│   ├── bash-4.1-logout.patch     
│   ├── bash-4.1-manpage.patch     
│   ├── bash-4.1-manpage_trap.patch     
│   ├── bash-4.1-signal.patch     
│   ├── bash-4.1.tar.gz     
│   ├── bash-4.1-trap.patch     
│   ├── bash-bashbug.patch     
│   ├── bash-infotags.patch     
│   ├── bash-requires.patch     
│   ├── bash-setlocale.patch     
│   ├── bash-tty-tests.patch     
│   ├── dot-bash_logout     
│   ├── dot-bash_profile     
│   └── dot-bashrc     
└── SPECS     
    └── bash.spec

2 directories, 33 files

2. 进入目录中,解决bash-4.1源码包目录

[root@localhost ~]# cd /root/rpmbuild/SOURCES/    
[root@localhost SOURCES]# tar zxvf bash-4.1.tar.gz     
[root@localhost SOURCES]# cp -a bash-4.1 bash-4.1-orig     
[root@localhost SOURCES]#     
[root@localhost SOURCES]# cd bash-4.1     
[root@localhost bash-4.1]#

3. 修改代码段一

# vim config-top.h

#取消104行的注释,并将下面代码修改为如下内容,默认情况下日志记录在/var/log/message文件中,这调整为local1.debug指定的文件中。

/* #define SYSLOG_HISTORY */

#if defined (SYSLOG_HISTORY)      
# define SYSLOG_FACILITY LOG_LOCAL1       
# define SYSLOG_LEVEL LOG_DEBUG       
#endif

4. 修改代码段二

# vim bashhist.c

#找到701行开始的程序段

701 void    
702 bash_syslog_history (line)     
703      const char *line;     
704 {     
705   char trunc[SYSLOG_MAXLEN];     
706     
707   if (strlen(line) < SYSLOG_MAXLEN)     
708     syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d %s", getpid(), current_user.uid, line);     
709   else     
710     {     
711       strncpy (trunc, line, SYSLOG_MAXLEN);     
712       trunc[SYSLOG_MAXLEN - 1] = '\0';     
713       syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED):
PID=%d UID=%d %s", getpid(), current_user.uid, trunc);     
714     }     
715 }     
716 #endif

修改为如下内容:

void    
bash_syslog_history (line)     
const char *line;     
{     
char trunc[SYSLOG_MAXLEN];     
  
if (strlen(line) < SYSLOG_MAXLEN)     
syslog
(SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PPID=%d PID=%d SID=%d UID=%d
User=%s %s", getppid(), getpid(), getsid(getpid()), current_user.uid,
current_user.user_name, line);     
else     
{     
strncpy (trunc, line, SYSLOG_MAXLEN);     
trunc[SYSLOG_MAXLEN - 1] = '\0';     
syslog
(SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED): PPID=%d PID=%d
SID=%d UID=%d User=%s %s", getppid(), getpid(), getsid(getpid()),
current_user.uid, current_user.user_name, trunc);     
}     
}

5. 对比修改代码

[root@localhost SOURCES]# diff -Npru bash-4.1-orig bash-4.1 > bash_history_syslog.patch

# cd ~/rpmbuild/SPECS/    
  
# vim bash.spec     
#加入两行内容,按如下格式如下,保存退出。

Patch119: bash_history_syslog.patch

…   
%patch119 -p1 -b .history_syslog     

6. 开始编译

[root@localhost SPECS]# rpmbuild -ba bash.spec    
error: Failed build dependencies:     
        texinfo is needed by bash-4.1.2-15.el6.x86_64

再开一个窗口安装texinfo软件包。

[root@localhost SPECS]# rpmbuild -ba bash.spec  
[root@localhost SPECS]# cd  ~/rpmbuild/RPMS/x86_64/

7. 安装bash rpm安装包

[root@localhost ~]# cd  ~/rpmbuild/RPMS/x86_64/    
[root@localhost x86_64]# ls     
bash-4.1.2-15.el6.x86_64.rpm  bash-debuginfo-4.1.2-15.el6.x86_64.rpm  bash-doc-4.1.2-15.el6.x86_64.rpm     
[root@localhost x86_64]#     
[root@localhost x86_64]# rpm -Uvh --force bash-4.1.2-15.el6.x86_64.rpm     
Preparing...                ########################################### [100%]     
   1:bash                   ########################################### [100%]     
[root@localhost x86_64]#

8. 配置rsyslog日志服务

[root@localhost x86_64]# vi /etc/rsyslog.conf

#加入如下内容:    
local1.debug   /var/log/bash

[root@localhost x86_64]# service rsyslog restart     
关闭系统日志记录器:                                       [确定]     
启动系统日志记录器:                                       [确定]

9. 查看日志记录,成功存储用户操作日志,与history日志分开存储,并且只有root权限可以操作该日志文件,如果配置日志服务器,操作日志将传送到远程服务器。

[root@localhost ~]# tail -f /var/log/bash    
Apr 13 00:47:11 localhost bash: HISTORY: PPID=2471 PID=2473 SID=2473 UID=0 User=root ifconfig     
Apr 13 00:47:12 localhost bash: HISTORY: PPID=2471 PID=2473 SID=2473 UID=0 User=root ls     
Apr 13 00:47:13 localhost bash: HISTORY: PPID=2471 PID=2473 SID=2473 UID=0 User=root df -h     
Apr 13 00:47:15 localhost bash: HISTORY: PPID=2471 PID=2473 SID=2473 UID=0 User=root history     
Apr 13 00:47:24 localhost bash: HISTORY: PPID=2471 PID=2473 SID=2473 UID=0 User=root cat /var/log/bash     
Apr 13 01:19:47 localhost bash: HISTORY: PPID=26139 PID=26141 SID=26141 UID=0 User=root cat /var/log/bash     
Apr 13 01:19:57 localhost bash: HISTORY: PPID=26139 PID=26141 SID=26141 UID=0 User=root ifconfig    
Apr 13 01:21:07 localhost -bash: HISTORY: PPID=26157 PID=26159 SID=26159 UID=0 User=root ifconfig     
Apr 13 01:21:17 localhost -bash: HISTORY: PPID=26157 PID=26159 SID=26159 UID=0 User=root w     
Apr 13 01:21:20 localhost -bash: HISTORY: PPID=26157 PID=26159 SID=26159 UID=0 User=root df -h     
Apr 13 01:21:33 localhost -bash: HISTORY: PPID=26157 PID=26159 SID=26159 UID=0 User=root useradd abc     
Apr 13 01:21:38 localhost -bash: HISTORY: PPID=26157 PID=26159 SID=26159 UID=0 User=root passwd abc     
Apr 13 01:21:42 localhost -bash: HISTORY: PPID=26157 PID=26159 SID=26159 UID=0 User=root su - abc     
Apr 13 01:21:44 localhost -bash: HISTORY: PPID=26192 PID=26193 SID=26159 UID=500 User=abc exit

二、rsyslog日志服务器配置

1. 日志服务器配置

# vi /etc/rsyslog.conf

将其中下面四行的注释取消

$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

在#### GLOBAL DIRECTIVES ####中加入如下内容:

$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~

说明:实现在接收远程的日志为客户端IP地址命名。

然后重新启动rsyslogd服务

# service rsyslog restart

2. 日志客户端配置

# vi /etc/rsyslog.conf

local1.debug    @@192.168.0.66

# 然后重新启动rsyslogd服务

# service rsyslog restart

3. 查看结果,已经可以接收结果了。

[root@testdb log]# cd /var/log
[root@testdb log]# ll
908
-rw-------  1 root root   1718 412 09:51 127.0.0.1.log
-rw-------  1 root root    272 412 09:43 192.168.0.65.log
-rw-------  1 root root   3754 412 09:51 66_history_bash
-rw-------. 1 root root   2368 109 16:55 anaconda.ifcfg.log
-rw-------. 1 root root  29331 109 16:55 anaconda.log

[root@testdb log]# tail -f 192.168.0.65.log
Apr 13 17:41:13 localhost -bash: HISTORY: PPID=2166 PID=2168 SID=2168 UID=0 User=root 192.168
Apr 13 17:42:40 localhost -bash: HISTORY: PPID=2166 PID=2168 SID=2168 UID=0 User=root sss
Apr 13 17:43:38 localhost -bash: HISTORY: PPID=2166 PID=2168 SID=2168 UID=0 User=root s
Apr 13 17:52:27 localhost -bash: HISTORY: PPID=2166 PID=2168 SID=2168 UID=0 User=root ifconfig
Apr 13 17:52:27 localhost -bash: HISTORY: PPID=2166 PID=2168 SID=2168 UID=0 User=root w

本文出自 “koumm的linux技术博客” 博客,请务必保留此出处http://koumm.blog.51cto.com/703525/1763145

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
 
https://yq.aliyun.com/articles/52032?spm=5176.100239.blogcont86398.22.jpKVWd

编译bash实现history的syslog日志记录的更多相关文章

  1. 介绍linux下利用编译bash设置root账号共用的权限审计设置

    在日常运维工作中,公司不同人员(一般是运维人员)共用root账号登录linux服务器进行维护管理,在不健全的账户权限审计制度下,一旦出现问题,就很难找出源头,甚是麻烦!在此,介绍下利用编译bash使不 ...

  2. Java日志记录的事儿

    一.java日志组件 1.common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的 ...

  3. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  4. syslog日志

    Syslog协议 系统日志(Syslog)协议是在一个IP网络中转发系统日志信息的标准,它是在美国加州大学伯克利软件分布研究中心(BSD)的TCP/IP系统实施中开发的,目前已成为工业标准协议,可用它 ...

  5. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  6. Elmah 日志记录组件

    http://www.cnblogs.com/jys509/p/4571298.html 简介 ELMAH(Error Logging Modules and Handlers)错误日志记录模块和处理 ...

  7. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

  8. Log4Net日志记录两种方式

     简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Ap ...

  9. Log4Net异常日志记录在asp.net mvc3.0的应用(转载)

    这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...

随机推荐

  1. 阿里巴巴战略投资印度最大支付平台Paytm

    腾讯科技讯 9月29日,据路透社报道,阿里巴巴和印度最大移动支付和商务平台Paytm今天发布联合声明,宣布阿里巴巴集团及其旗下金融子公司蚂蚁金服将向Paytm注入新资金.阿里称这是一项“战略性的”投资 ...

  2. RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构

    1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Bro ...

  3. Set集合[HashSet,TreeSet,LinkedHashSet],Map集合[HashMap,HashTable,TreeMap]

    ------------ Set ------------------- 有序: 根据添加元素顺序判定, 如果输出的结果和添加元素顺序是一样 无序: 根据添加元素顺序判定,如果输出的结果和添加元素的顺 ...

  4. POJ-3660 Cow Contest Floyd传递闭包的应用

    题目链接:https://cn.vjudge.net/problem/POJ-3660 题意 有n头牛,每头牛都有一定的能力值,能力值高的牛一定可以打败能力值低的牛 现给出几头牛的能力值相对高低 问在 ...

  5. Vue过渡与动画

    通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果.Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数在过渡 ...

  6. 蓝的成长记——追逐DBA(18):小机上WAS集群故障,由一次更换IP引起

    原创作品.出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处.否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong ...

  7. 清华EMBA课程系列思考之六 -- 比較文明视野下的中华领导智慧、企业管理与经济解析

    告别马年的最后一缕阳光,踏着猴年的钟声,度过了温馨的春节,已然开启了新学期的第一堂课.看题目其貌不扬,但一旦进入课堂,已然聚精会神.唯恐掉队,就请大家跟我一起进入四天的心路修炼旅程,開始我们的新一期思 ...

  8. new 对象和Class的getInstance()方法的差别?

    创建对象时的差别 1.new 对象包含2步, 1)载入类: 2)而且实例化. 2.Class的对象.getInstance(),只不过实例化. 也就是说.在运行 Class的对象.getInstanc ...

  9. crazyradio焊接和下载固件过程

    非常早之前买过一套crazyradio的器件和空板.可是一直没有时间焊接出来,前天早上六点起来,安静的弄了一把,识别USB.下载crazyradio固件没问题,记录下过程: 1,首先是焊接,寻常的QF ...

  10. 去除ListView 上下边界蓝色或黄色阴影

    默认的情况下,在 ListView 滑动到顶部或者是底部的时候,会有黄色或者蓝色的阴影出现.在不同的版本号上解决办法是不同的,在 2.3 版本号之前能够在 ListView 的属性中通过设置 andr ...