http://meetbill.github.io/
分类: LINUX
2015-08-17 17:58:13
【实现原理】
在bash里设置环境变量PROMPT_COMMAND,这个命令会在用户提示符之前被执行,可以用来记录用户操作历史
【实现步骤】
1、创建行为审计日志文件
touch
/var/log/Command_history
.log
2、将日志文件的所有者改为权限低的用户NOBODY
chown
nobody:nobody
/var/log/Command_history
.log
3、赋予所有用户对日志文件写的权限
chmod
002
/var/log/Command_history
.log
4、使所有用户对日志文件只有追加权限
chattr +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 ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>${HISTORY_FILE}'
【Bill提示】
此日志文件如果需要删除时,在执行删除操作时,会提示没有权限,这个就是chattr对文件实现的保护功能了,如果需要删除此文件,需要执行
chattr -a
/var/log/Command_history
.log
chmod
777
/var/log/Command_history
.log
然后对日志文件进行删除操作
【实现原理】
/etc/profile文件是linux系统的全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
【实现步骤】
编辑/etc/profile,增加如下:
read -p "Please input your name:" NAME
export HISTORY_FILE=/var/log/Command_history.log
Login=`echo -n "-------NAME [$NAME] IP [$SSH_CLIENT] -----">> $HISTORY_FILE`
Time=`date -d today +"%Y-%m-%d %H:%M:%S" >> $HISTORY_FILE`
这样用户在远程登陆linux系统时,会提示输入名字,当操作人员输入自己的名字后,日志文件中会有相应记录,后续出现问题时,可以根据日志文件找到操作人员的姓名和操作记录
【失败与教训】
失败原因:
网盘在的profile文件设置为如上所示时
在重启电脑的时候,机器在启动的时候,读取profile文件,因为profile有读取字符串操作,导致了系统在执行启动xserver服务的时候,没有完成读取profile文件操作,因此导致了xserver服务,和xserver_guard服务启动失败
失败教训:
linux系统启动要读取的文件尽量不要有输入操作
【方法改进】
在xserver命令中添加下#xserver -n Your_name命令,完成记录操作人员人名操作,方便出现问题后快速定位问题