关键命令
PROMPT_COMMAND
read
1.创建用户审计文件存放目录和审计日志文件 ;
[root@localhost ~]# touch /var/log/Command_history.log
2.将日志文件所有者赋予一个最低权限的用户;
[root@localhost ~]# chown nobody.nobody /var/log/Command_history.log
-rw-r–r– 1 nobody nobody 0 12月 26 10:19 /var/log/Command_history.log
3.给该日志文件赋予所有人的写权限;
[root@localhost ~]# chmod 002 /var/log/Command_history.log
4.设置文件权限,使所有用户对该文件只有追加权限 ;
[root@localhost ~]# chattr +a /var/log/Command_history.log
ll /var/log/Command_history.log
——–w- 1 nobody nobody 0 12月 26 10:19 /var/log/Command_history.log
查看
[root@localhost ~]# lsattr /var/log/Command_history.log
—–a———- /var/log/Command_history.log
5.编辑/etc/profile文件,添加如下脚本命令;
脚本
export HISTORY_FILE=/var/log/Command_history.log
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### USER:$USER IP:$SSH_CLIENT PS:$SSH_TTY ppid=$PPID pwd=$PWD #### $(history 1 | { read x y; echo "$y"; })";} >>$HISTORY_FILE’
说明
PROMPT_COMMAND 实现审计功能 使用PROMPT_COMMAND可以在用户输入一条命令,就直接记录,
管道前面,history 1表示取最后一条命令。管道后面'{ }’内是一整体,相当于一个函数,函数里面可以有多条命令,用分号分割,而且最后一条命令也必须加分号。
第一条命令和'{‘之间必须要有空格。
history 1 取后后一条,将结果赋值给 read x y
x =第一个值,因为是序号所以不需要
打印 $cmd的值
效果
[root@localhost ~]# tail -f /var/log/Command_history.log
2018-12-26 10:27:48 ##### USER:root IP:192.168.130.135 64216 22 PS:/dev/pts/1 ppid=28919 pwd=/root #### sudo
2018-12-26 10:27:49 ##### USER:root IP:192.168.130.135 64216 22 PS:/dev/pts/1 ppid=28919 pwd=/root #### sudo
2018-12-26 10:27:50 ##### USER:root IP:192.168.130.135 64216 22 PS:/dev/pts/1 ppid=28919 pwd=/root #### sudo
2018-12-26 10:28:14 ##### USER:root IP:192.168.130.135 52547 22 PS:/dev/pts/2 ppid=29390 pwd=/root #### clear