linux调优history记录

本文详细介绍如何在Linux系统中查看和记录用户操作,包括使用history命令查看操作记录,并增强其功能以显示时间、用户和IP信息。同时,讲解如何设置环境变量以持久化这些设置,并介绍如何开启系统级用户命令日志审计,实现对所有用户操作的全面记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于Linux系统而言,我们知道要查看用户的操作记录命令可以用 history 命令查看,但是 history命令还是比较过于简陋,默认history命令只显示编号,如下图所示,这里就缺少很多我们需要的信息了,比如是在哪个时间点哪个用户做 了什么操作。

[root@localhost ~]# history | head     
    1  cd /usr/local/
    2  ls
    3  vim /etc/profile
    4  ls
    5  history | grep tar
    6  ls
    7  cd /usr/local/
    8  ls
    9  cd nexus-2.14.9-01/
   10  ls

这里我们给 history 命令加上时间和日期。

export HISTTIMEFORMAT="%F %T "

然后再来看一下,可以看到多了日期和时间了。

[root@localhost ~]# history |head
    1  2019-01-24 23:43:21 cd /usr/local/
    2  2019-01-24 23:43:21 ls
    3  2019-01-24 23:43:21 vim /etc/profile
    4  2019-01-24 23:43:21 ls
    5  2019-01-24 23:43:21 history | grep tar
    6  2019-01-24 23:43:21 ls
    7  2019-01-24 23:43:21 cd /usr/local/
    8  2019-01-24 23:43:21 ls
    9  2019-01-24 23:43:21 cd nexus-2.14.9-01/
   10  2019-01-24 23:43:21 ls

但是这还是不能满足我们的需求,我们还想知道是哪个用户的操作的,这里我们需要这样设置一下:

export HISTTIMEFORMAT="%F %T `whoami` "

然后再来看一下,可以看到多了用户。

[root@localhost ~]# history |head                          
    1  2019-01-24 23:43:21 root cd /usr/local/
    2  2019-01-24 23:43:21 root ls
    3  2019-01-24 23:43:21 root vim /etc/profile
    4  2019-01-24 23:43:21 root ls
    5  2019-01-24 23:43:21 root history | grep tar
    6  2019-01-24 23:43:21 root ls
    7  2019-01-24 23:43:21 root cd /usr/local/
    8  2019-01-24 23:43:21 root ls
    9  2019-01-24 23:43:21 root cd nexus-2.14.9-01/
   10  2019-01-24 23:43:21 root ls

上面我们就可以看出是哪个用户操作了,不过这个有点鸡肋,因为显示的是当前用户的操作。
如果我还想知道哪个用户通过哪个ip操作的,可以执行如下命令:

export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` "

然后再看一下history记录:

[root@localhost ~]# history |head
    1  2019-01-24 23:43:21 root pts/0 (192.168.0.200) cd /usr/local/
    2  2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
    3  2019-01-24 23:43:21 root pts/0 (192.168.0.200) vim /etc/profile
    4  2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
    5  2019-01-24 23:43:21 root pts/0 (192.168.0.200) history | grep tar
    6  2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
    7  2019-01-24 23:43:21 root pts/0 (192.168.0.200) cd /usr/local/
    8  2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
    9  2019-01-24 23:43:21 root pts/0 (192.168.0.200) cd nexus-2.14.9-01/
   10  2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls

以上操作都是临时的,退出系统后,下次就不生效了。
根据需求,有三种不同的设置环境变量的方法。
1、临时设置当前用户的环境变量
2、永久设置当前/其他用户的环境变量
3、永久设置所有用户的环境变量
第一种就不说了,就是上面介绍的:

export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` "

第二种,我们需要在当前用户的.bashrc或者.bash_profile文件里面追加命令,最后source一下就可以了。

echo 'export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` " ' >> ~/.bashrc
或者
echo 'export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` " ' >> ~/.bash_profile

第三种就是需要将这个设置添加到/etc/profile里面了
将HISTTIMEFORMAT变量加入到/etc/profile文件中,让它对所有用户永久生效。

echo 'export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` " ' >> /etc/profile

注意:如果原先有HISTTIMEFORMAT需要注释掉原先的。
运行下面的命令文件中的修改生效。

source /etc/profile

接下来我们讲一下第二点,第二点要讲的原因是因为第一点history命令是有条数限制的,默认history只有1000条记录,我们用echo $HISTSIZE可以查看具体条数。虽然我们可以通过增加HISTSIZE参数来增加history的记录条数,但是数量还是有限,而且只能记录当前登录的用户操作。
所以这里我们第二点讲的就是如何记录所有用户的操作记录。这里我们就叫它开启linux系统用户命令日志审计功能。
1.创建用户审计文件存放目录和审计日志文件:

mkdir - p /var/log/usertmonitor/

2.创建用户审计日志文件:

echo usermonitor > /var/log/usertmonitor/usertmonitor.log

3.将日志文件所有者赋予一个最低权限的用户:

chown nobody:nobody /var/log/usertmonitor/usertmonitor.log

4.给该日志文件赋予所有人的写权限:

chmod 002 /var/log/usertmonitor/usertmonitor.log

5.设置文件权限,使所有用户对该文件只有追加权限:

chattr +a /var/log/usertmonitor/usertmonitor.log

6.编辑/etc/profile文件,添加如下脚本命令:

export HISTORY_FILE=/var/log/usertmonitor/usertmonitor.log
export PROMPT_COMMAND='{ date "+%Y-%m-%d" %T #### $(who am i | awk "{print \$1\" \"\$2\" \"\$5}") #### $(whoami) #### $(history 1 | { read x cmd; echo "$cmd";})";} >> $HISTORY_FILE'

7.使配置生效

source /etc/profile

8.查看效果

[root@localhost usertmonitor]# cat usertmonitor.log |head
usermonitor
19-01-25 00:57:01 #### root pts/0 (192.168.0.200) #### root #### source /etc/profile
19-01-25 00:57:07 #### root pts/0 (192.168.0.200) #### root #### cd ..
19-01-25 00:57:07 #### root pts/0 (192.168.0.200) #### root #### ls
19-01-25 00:57:10 #### root pts/0 (192.168.0.200) #### root #### cd /root/
19-01-25 00:57:11 #### root pts/0 (192.168.0.200) #### root #### ls
19-01-25 00:57:24 #### root pts/0 (192.168.0.200) #### root #### touch 123.txt
19-01-25 00:57:24 #### root pts/0 (192.168.0.200) #### root #### ls
19-01-25 00:57:31 #### root pts/0 (192.168.0.200) #### root #### cp 123.txt 456.txt
19-01-25 00:57:32 #### root pts/0 (192.168.0.200) #### root #### ls

审计时查看/var/log/usermonitor/usermonitor.log 文件即可,它会记录登上服务器所有用户使用的命令。我们也还可以对这个文件进行打包分割操作等等,随便写个脚本就行了。
通过以上 2 点设置后,我们可以方便的记录用户的所有操作信息了,少数的最近操作可以直接 history 查看,多数的就查看/var/log/usermonitor/usermonitor.log 文件了。
注意点:如果以上设置不生效,也就是登录以后 echo $HISTTIMEFORMAT 看一下是否不生效,请一步步排查是否.bash_profile 或者.bashrc 或者/etc/profile 或者/etc/bashrc 里面的 HISTTIMEFORMAT 是否设置冲突了!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值