用日志记录Linux用户执行的每一条命令

系统 Linux 系统运维
工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录时,把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器。
 
工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录时,把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器。

***种方法

  1. # vi /etc/profile 
  2.  
  3.          
  4. #设置history格式 
  5. export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] " 
  6. #记录shell执行的每一条命令 
  7. export PROMPT_COMMAND='\ 
  8. if [ -z "$OLD_PWD" ];then 
  9.     export OLD_PWD=$PWD; 
  10. fi; 
  11. if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then 
  12.     logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)"
  13. fi ; 
  14. export LAST_CMD="$(history 1)"
  15. export OLD_PWD=$PWD;' 

下面是第二种方法,较笨

***步:全局设置(这是一次性设置,需要root用户权限

命令# vi /etc/profile

  1. #用户登录时执行此脚本 
  2. #设置history显示格式 
  3. export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] " 
  4. #登录时清空当前缓存 
  5. echo "" > .bash_history 

 

第二步:不同用户分别设置
命令# source /etc/profile

命令# vi /home/user1/.bash_logout

  1. #当用户退出登录时会执行此脚本 
  2. tmpfile="/tmp/`whoami`_history.tmp" 
  3. #把格式化的history记录到文件里 
  4. history > $tmpfile 
  5.  
  6. #读取文件,一行一行把文件内容发送到给syslogd。 
  7. #不要试图用"history | logger""logger -f $tmpfile"来替代下面的代码,否则将只能记录前200行。 
  8. k=1 
  9. while read line; do 
  10. ((k++)) 
  11. logger -t `whoami`_shell_cmd "$line"  
  12. done < $tmpfile 
  13. rm -f $tmpfile 

(如果还有其它用户需要监控,则重复第二步骤)

第三步:把日志发送给远程主机(可选)

  1. # vi /etc/rsyslog.conf 
  2. #增加如下行,IP自己换,也可以用域名,@表示用UDP协议,@@表示用TCP协议 
  3. *.*  @192.168.0.1 

不足之处:
1. 不能实时记录命令并发送log

2. 要记录终端桌面下的命令需要重启。

责任编辑:火凤凰 来源: 问问云
相关推荐

2020-11-20 06:50:19

Linux命令运维

2020-05-26 09:08:23

命令循环Linux

2024-02-20 13:43:12

2024-02-01 18:07:37

2011-05-12 14:43:57

MYSQL

2021-06-30 07:47:03

Linux CPULinux 系统

2011-03-21 17:19:12

LAMPUbuntu

2024-04-19 07:31:58

MySQL数据库

2022-02-11 14:43:53

SQL语句C/S架构

2023-11-28 15:19:00

Linux运维btop命令

2021-09-12 07:26:49

MySQL SQL 语句数据库

2021-02-15 15:07:45

Windows 10Windows微软

2022-01-01 18:26:21

nginx

2022-05-31 13:58:09

MySQL查询语句

2018-08-14 08:43:17

服务器命令CCS系统

2022-05-25 08:01:37

WHERESQL 语句

2021-12-02 15:30:55

命令内存Linux

2021-06-03 06:52:11

Redis服务器命令

2019-05-20 14:40:56

任正非出口禁令芯片

2018-08-26 06:24:58

MySQLInnoDB行锁
点赞
收藏

51CTO技术栈公众号