`

用日志记录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. 要记录终端桌面下的命令需要重启。
=========

history记录日志

分享到:
评论

相关推荐

    linux记录登录用户的详细操作

    然而,这种方法存在局限性:默认情况下,`history`只能记录最近1000条命令,而且这些记录缺乏上下文信息,如用户来源IP地址、操作时间等。因此,仅依靠`history`不足以满足全面的安全审计需求。 为了解决这一问题,...

    企业日志分析之linux系统history收集展示.docx

    Linux系统的`history`命令记录了用户在终端执行过的所有命令,是日志分析的重要来源之一。本文将详细介绍如何使用ELK(Elasticsearch、Logstash、Kibana)堆栈收集和展示Linux系统的`history`日志。 1. **ELK简介**...

    rsyslog所有用户日志审计

    对于普通用户的日志审计,可以使用bash的history功能来记录用户的命令操作记录。在上面的部分内容中,添加了以下命令: vim /etc/profile 在/etc/profile 末尾添加export HISTORY_FILE=/var/log/userAudit.log ...

    linux下监控用户的操作记录-new.pdf

    总结起来,Linux下的用户操作记录监控主要通过修改`/etc/profile`文件,结合rsyslogd服务,实现对用户命令执行的跟踪和记录。这种方法不仅可以帮助系统管理员了解用户的行为,还可以提高系统的安全性,并提供了一种...

    Linux的shell命令解释器

    Linux的shell命令解释器是操作系统与用户交互的重要接口,它是一个程序,负责解析用户的命令行输入并执行相应的系统操作。在Linux系统中,常见的shell有Bash(Bourne-Again SHell)、Sh、Csh、Tcsh等。本项目实现了...

    构建linux审计系统

    3. **客户端配置**:在每个需要审计的Linux服务器上,安装最新版本的bash,并配置环境变量`PROMPT_COMMAND`以记录每一条命令的执行情况。例如: ```bash export PROMPT_COMMAND='history 1' ``` 这条命令会在...

    linux基本命令

    ` 加上行号可以快速执行历史记录中的某条命令。 - 上下箭头键可用于快速访问最近执行过的命令。 以上介绍了 Linux 系统的基本概念以及常用命令的使用方法。通过掌握这些基础知识,用户可以在 Linux 环境中更加高效...

    linux初学者笔记3-linux系统目录、常用快捷键、用户操作简单介绍.docx

    5. Ctrl+R:在历史记录列表中搜索某一命令 6. Ctrl+L:清屏 7. history:查看历史命令 8. !+条数数字:选择该历史命令 三、用户操作介绍 本节将介绍 Linux 中的用户操作,例如用户Switch、添加用户、设置密码等。 ...

    Linux使用shell脚本定时删除历史日志文件

    在给出的例子中,`/etc/crontab`文件已经添加了一条计划任务,每天早上6点由root用户执行`del_history_files`脚本,这样可以确保日志清理在非工作时间进行,不影响系统正常运行。 总结起来,Linux系统中的日志文件...

    linux基本命令大全[文].pdf

    ` 重复上一条命令。 - **Find**:查找文件,可以根据名称、时间戳等条件。 - **Dmesg**:查看系统启动时的日志信息。 - **Free**:查看内存使用情况。 - **Process Management**:`ps` 和 `top` 命令用于查看和管理...

    linux常用命令.docx

    在Linux系统运维中,熟悉和掌握一系列常用的命令是至关重要的。这些命令可以帮助我们高效地管理系统、监控状态、查找和编辑文件,以及处理各种日常任务。以下是对标题和描述中涉及的一些关键Linux命令的详细说明: ...

    Linux.docx

    Linux命令行提供了一种高效且强大的工作方式,本文将详细介绍几个常用且重要的命令,包括`cd`、`mv`、`cp`、`mkdir`、`history`、`tail`、`tar`、`ls`、`ps`、`top`以及`wget`。 1. **命令 cd** - `cd ..`: 进入...

    linux操作以及shell基础

    - `shutdown -c`取消前一条关机命令。 - `shutdown -r`重启。 - `shutdown -h`关机。 - **后台执行** - `nohup 命令 &`在后台执行命令。 - `jobs`查看后台正在运行的任务。 - `fg job号`将后台任务调至前台。 ...

    Linux学习笔记,小白看看吧看看吧

    - history: 查看用户执行过的命令历史。 - man: 手册页,是学习Linux命令的官方文档。 8. 快捷键组合操作 - ctrl+shift+.(点): 可以调用上一条命令的参数,是命令行操作中的一个实用快捷方式。 通过上述知识点,...

    linux-cmd.zh

    ### Linux系统编程——基本命令详解 #### 前言 在深入探讨Linux系统的基本命令之前,我们先简要介绍学习Linux的目的以及应有的学习态度和方法。 - **学习目标**:成为一名合格的Linux/Unix系统程序员。 - **学习...

    shell命令详解-精编版

    - **日志记录**:记录命令执行过程中的关键信息,帮助诊断问题。 - **调试技巧**:使用 `set -x` 开启命令追踪,显示每条命令的执行情况。 通过以上介绍,我们可以了解到 Shell 不仅仅是一个简单的命令行界面工具,...

    linux笔记(20211106221956).pdf

    Linux是世界上最广泛使用的开源操作系统之一,它为用户提供了一个强大的命令行接口来管理和配置系统。这份笔记涵盖了多个关于Linux配置和管理的基础知识点。 1. **历史命令**:通过`history`命令可以查看之前输入过...

    Shell编程实验.ppt

    - 使用`&gt;`将命令执行结果写入指定文件,如果文件已存在则会被覆盖。 - 使用`&gt;&gt;`追加命令执行结果到现有文件末尾。 - 特殊用途示例:`ls -l &gt; /dev/null`,其中`/dev/null`是一个特殊的设备文件,用于丢弃所有写入...

Global site tag (gtag.js) - Google Analytics