编译bash实现history的syslog日志记录

摘要: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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

[[email protected] soft]#

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

[[email protected] ~]# pwd    
/root     
# ls     
anaconda-ks.cfg  bash-4.1.2-15.el6_4.src.rpm  install.log  install.log.syslog  rpmbuild  公共的  模板  视频  图片  文档  下载  音乐  桌面     
[[email protected] ~]# 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源码包目录

[[email protected] ~]# cd /root/rpmbuild/SOURCES/    
[[email protected] SOURCES]# tar zxvf bash-4.1.tar.gz     
[[email protected] SOURCES]# cp -a bash-4.1 bash-4.1-orig     
[[email protected] SOURCES]#     
[[email protected] SOURCES]# cd bash-4.1     
[[email protected] 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. 对比修改代码

[[email protected] 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. 开始编译

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

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

[[email protected] SPECS]# rpmbuild -ba bash.spec  
[[email protected] SPECS]# cd  ~/rpmbuild/RPMS/x86_64/

7. 安装bash rpm安装包

[[email protected] ~]# cd  ~/rpmbuild/RPMS/x86_64/    
[[email protected] 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     
[[email protected] x86_64]#     
[[email protected] x86_64]# rpm -Uvh --force bash-4.1.2-15.el6.x86_64.rpm     
Preparing...                ########################################### [100%]     
   1:bash                   ########################################### [100%]     
[[email protected] x86_64]#

8. 配置rsyslog日志服务

[[email protected] x86_64]# vi /etc/rsyslog.conf

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

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

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

[[email protected] ~]# 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. 查看结果,已经可以接收结果了。

[[email protected] log]# cd /var/log
[[email protected] 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

[[email protected] 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

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:[email protected] 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

https://yq.aliyun.com/articles/52032?spm=5176.100239.blogcont86398.22.jpKVWd

时间: 2024-10-06 18:34:16

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

history命令添加时间及记录到syslog日志

history记录中添加时间,用户地址等信息 vi /etc/profile export HISTTIMEFORMAT=" %F %T `who -u am i 2> /dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` `whoami` " history记录添加到 syslog日志 方法一:推荐 vi /etc/profile function log2syslog{   declare COMMAND   COMMAND=

思科交换机配置syslog记录日志到syslog watcher日志记录软件

C3560#config tC3560(config)#logging onC3560(config)#logging host 192.168.210 //日志服务器的IP地址 C3560(config)#logging facility local0 //日志临时存储位置C3560(config)#logging origin-id {hostname|ip|string}C3560(config)#logging trap 3 //日志记录级别C3560(config)#logging s

Java日志记录的事儿

一.java日志组件 1.common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.但由于它使用了ClassLoader寻找和载入底层的日 志库, 导致了象OSGI这样的框架无法正常工作,由于其不同的插件使用自己的ClassLoader. OSGI的这种机制保证了插件互相独立,

通过ansible安装mysql,apache,php,并实现rsyslog日志记录于MySQL中

环境: 192.168.205.7: as ansible host 192.168.205.37: as mariadb server 192.168.205.27: as web server and rsyslog client 版本: OS: centos 7 1810 with mini install ansible: 2.8.1 mariadb-10.2.25-linux-x86_64.tar.gz apr-1.7.0.tar.bz2 apr-util-1.6.1.tar.bz2

Haproxy 开启日志记录

CentOS 7上yum安装的Haproxy,默认没有记录日志.需要做一下配置才能记录日志.(不知道其他版本是否需要,已经忘记了)主要是用到了Haproxy,以前貌似没有这么麻烦,今天配置出了一些问题查日志才发现原来Haproxy需要自己手工开启日志记录功能.因此作为相关记录! 1. 创建记录日志文件 mkdir /var/log/haproxy chmod a+w /var/log/haproxy 2. 开启rsyslog记录haproxy日志功能 编辑"/etc/rsyslog.conf&q

haproxy高可用日志记录配置文件

关于haproxy的日志配置问题,这里单独说明下,默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来,定义的方法如下: 首先,我们修改haproxy关于日志配置的选项,加入下面配置: log /dev/log local0 info log /dev/log local0 notice 说明:这2行配置放到haproxy的global配置项目中,主要是将haproxy的info及notice日志分别记录

十、syslog日志与loganalyzer日志管理

10.1.rsyslog简介 syslog是一个历史悠久的日志系统.几乎所有的UNIX和Linux操作系统都采用syslog进行系统日志的管理和配置.Linux系统内核和许多程序会产生各种错误信息.警告信息和其他的提示信息.syslog可以根据信息的来源以及信息的重要程度将信息保存到不同的日志文件中.在默认的syslog配置下,日志文件通常都保存在/var/log目录下,在Centos6中,syslog的守护进程为rsyslog,系统启动时,默认会自动运行rsyslog守护进程. 在syslog

转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常保存到数据库中,所以就到网上搜了下专门的日志记录工具,一搜果然很多,比如:log4net,NLog,EntLib Logging等等,但是还是log4net名气最大,所以就下载下来试用了一番,果然很方便,其涵盖了所有常用的日志记录方式具体的可以看下表: AdoNetAppender 将日志记录到数据

rsyslog日志记录服务器

一.syslog系统 1.syslog:系统日志服务,统一日志管理 支持C/S架构:可通过UDP或TCP协议提供日志记录服务:实现集中收集日志功能 (1)日志.事件 历史事件日志,保存系统上过去一段时间的发生的事件 事件:系统引导启动.应用程序启动.应用程序尤其是服务类应用程序运行过程中的一些事件: (2)syslog种类 syslogd:system系统日志 klogd:kernel内核日志 2.syslog格式 事件产生的日期时间               主机        进程[pid