首页 > 系统相关 >用日志记录Linux用户执行的每一条命令(history)

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

时间:2023-06-11 18:34:12浏览次数:38  
标签:tmpfile 用户 PWD export Linux 日志 history

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


第一种方法

第二种方法

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

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

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


第二步:不同用户分别设置

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

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

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

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

不足之处:

1. 不能实时记录命令并发送log

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

=========


标签:tmpfile,用户,PWD,export,Linux,日志,history
From: https://blog.51cto.com/u_6186189/6458496

相关文章

  • linux使用flock文件锁解决脚本重复执行问题
    linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linuxcrontab实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。例如:?......
  • linux sort,uniq,cut,wc命令详解
        sortsort命令对File参数指定的文件中的行排序,并将结果写到标准输出。如果File参数指定多个文件,那么sort命令将这些文件连接起来,并当作一个文件进行排序。sort语法[root@www~]#sort[-fbMnrtuk][fileorstdin]选项与参数:-f:忽略大小写的差异,例如A与......
  • linux命令行elasticsearch查询工具es2unix
    当想在linux的命令行中查看elasticsearch的状态时,可以用es2unix这个工具,插件地址: https://github.com/elasticsearch/es2unix。它是elasticsearch官方推出的,可以通过命令来查看es的各种状态,安装方法curl-sdownload.elasticsearch.org/es2unix/es>/bin/eschmod+x/bin/es这......
  • Linux的启动顺序
      Linux是一个多用户、多任务‘支持多线程和多CPU的操作系统,可以想象到它的启动会有多么复杂。                  1.Linux的启动流程及涉及的程序或者模块  在你打开计算机的电源之后,计算机的硬件会启动BIOS或者UEFI来加载并检查设备,比如......
  • linux 内核版本
    截止支持时间CentOSversion  Releasedate  Fullupdates[40][41]  Maintenanceupdates[40][41]3  2004-03-19  2006-07-20  2010-10-31[42]4  2005-03-09  2009-03-31  2012-02-29[42][43]5  2007-04-12  2014-01-31  2017-03-3......
  • Burp Suite Professional / Community 2023.6 (macOS, Linux, Windows) - Web 应用安
    BurpSuiteProfessional/Community2023.6(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro-2023/,查看最新版。原创作品,转载请保留出处。作者......
  • linux 脚本基础实战1
    脚本完成功能1.显示出本机的ip地址2.如果ip地址中有3这个数字,打印出当前的系统时间3.如果ip地址中不含3这个数字,批量建立用户magedu_00,magedu_01,...magedu_100,所有用户同属于magedu组4.打印/etc/passwd这个文件中可以登陆的用户(非/usr/sbin/nologin)5.yum安装ngin......
  • 透过 Go 语言探索 Linux 网络通信的本质
    前言各种编程语言百花齐放、百家争鸣,但是“万变不离其中”。对于网络通信而言,每一种编程语言的实现方式都不一样;但其实,调用的底层逻辑都是一样的。linux系统底层向上提供了统一的Socket通信系统函数,动态链接库/lib64/libc.so中就是实现网络通信的关键类库。下面我们会以Go......
  • Linux命令篇 - tar 命令
    tarGNU`tar'savesmanyfilestogetherintoasingletapeordiskarchive,andcanrestoreindividualfilesfromthearchive.tar:用于压缩和解压缩文件;格式:tar[OPTION...][FILE]...#tar命令常用的功能#以下功能是独立的,一次只能使用一个--c:创建新的tar文件......
  • Day03学习日志
    Day03学习日志类型转换由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。运算中,不同类型的数据先转化为同一类型,然后进行运算。低->高顺序:byte,short,char->int->long->float->double注意:强制转换(类型)变量名高--低自动转换......