注:本文基于CentOS 6.5 编写
1、关于PROMPT_COMMAND环境变量
Bash在显示PS1之前先执行PROMPT_COMMAND定义的内容,而PS1也就是linux的命令提示符,关于PS1详细设置可参考:Linux 提示符后面显示全路径。
我们可以先感受一下PROMPT_COMMAND的功能效果,如果要显示命令执行的时间,可以如下操作。
[root@CentOS-6-5 /]# export PROMPT_COMMAND=\"echo -n [$(date +%k:%m:%S)]\"
[23:12:10][root@CentOS-6-5 /]# pwd
/
[23:12:10][root@CentOS-6-5 /]#
利用这一特性,我们可以把用户执行的命令记录下来,甚至通过rsyslog记录到对应文件中。
2、记录历史命令
其实这个功能可以总结为shell+history方式,使用脚本和history命令实现。操作步骤如下:
A、添加PROMPT_COMMAND设置到/etc/bashrc
export PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug \"$(whoami) [$$]: $(history 1 | sed \"s/^[ ]*[0-9]\\+[ ]*//\" ) [$RETRN_VAL]\"\'
readonly PROMPT_COMMAND
因为日志使用rsyslog来输出,因此使用logger命令来输出日志,其中,-p命令指定syslog的日志等级,后面会讲到syslog的配置。日志的格式也在logger中指定,这里记录了命令执行的用户,进程号,具体命令,以及命令返回值。
将PROMPT_COMMAND设置为readonly的原因是因为,有些用户可以通过重设PROMPT_COMMAND的值来改变我们记录操作的行为,设置为只读后就无法修改。除非删除/etc/bashrc里的设置,并重新开一个工作窗口。
B、添加syslog配置
上面说到logger指定了日志级别,因此我们要在对应的rsyslog配置中添加这一等级,并执行日志存放位置。
在/etc/rsyslog.conf配置文件中添加以下配置,指定用户操作日志存放位置。
local6.* /var/log/commands.log
添加后重启rsyslog服务,
service rsyslog restart
当然,为防止日志过大,还需要添加对应的logrotate配置。
3、记录效果
执行命令后观察日志记录效果如下:
Dec 18 00:10:04 CentOS-6-5 root: root [11304]: cd /home/ [0]
Dec 18 00:10:06 CentOS-6-5 root: root [11304]: pwd [0]
Dec 18 00:10:27 CentOS-6-5 root: root [11304]: df -h [0]
Dec 18 00:10:35 CentOS-6-5 root: root [11304]: nihao [127]
不过有个问题是,通过这种方式没办法记录ssh远程执行命令的情况。
当然也有可能我没有配置好,有知道的希望可以告知一下。
继续阅读与本文标签相同的文章
上一篇 :
ITSS模型适用于哪些模式评估呢?
下一篇 :
linux的基本认识和基本操作
-
日本“老婆机器人”被抢购一空!用户满意度极高:听话且百依百顺
2026-05-18栏目: 教程
-
2019亚洲国际物流技术与运输系统展览会期待您的到来
2026-05-18栏目: 教程
-
数码人荣获2019年数据中心科技成果奖
2026-05-18栏目: 教程
-
北京市消协:教你一眼看穿互联网消费捆绑搭售的隐蔽花样
2026-05-18栏目: 教程
-
什么是人工智能?人工智能工程技术人员都做什么?
2026-05-18栏目: 教程
