创新路
我们一直在努力

Linux监控所有用户的命令操作

为了在服务器出问题时检查是否是人为原因,需要监控用户的每一个命令及其执行时间等信息。

系统自带的命令记录历史在每个用户文件夹下的.bash_history文件中,但是一方面这个记录不会记录时间(即使设置HISTTIMEFORMAT加上了时间,也只是会在自己用户的history命令下以可读格式显示,之后的.bash_history文件只会记录一个数字时间戳,检查起来也很不方便),另一方面用户也有能力修改或删除自己的.bash_history文件,无法保证历史的真实性。

有没有办法统一记录所有用户的命令操作到一个root管理员才能管理的文件中去,并且加上良好格式的时间,用户名甚至用户的远程ip呢?答案是有的,就是使用PROMPT_COMMAND。

首先在/etc/profile.d/路径下新建一个.sh文件,本例中我新建的文件名为history.sh

/etc/profile.d/路径下的所有.sh文件都会在用户登录时被/etc/profile文件执行,其中/etc/profile文件是设置系统全局环境以及自启动程序的文件,该文件自带说明如下:
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

在history.sh中填入如下内容:

# /etc/profile.d/history.shHISTDIR=/usr/share/monitor/.History # 准备保存历史记录的文件夹,要确保每一级的文件夹对所有用户都开放了 x 权限,让他们能够写入里面的历史文件if [ ! -d $HISTDIR ]; then # 若文件夹未被创建
    mkdir -p $HISTDIR #创建文件夹
    chmod u=rx,go=x $HISTDIR #对管理员开放 rx读取访问 权限,其他用户只开放 x访问 权限
    chattr -R +a $HISTDIR #只能追加,防止删除fiYM=`date +"%Y-%m"` # 获取当前 年-月ALL_HISTORY_FILE=$HISTDIR/.[${YM}]all_historys.log # 该月的历史记录文件名,之所以按月起不同的文件名,是为了避免一个文件过大,查看,清理都不方便。if [ ! -f $ALL_HISTORY_FILE ]; then # 如果该月的历史记录文件未被创建
    touch $ALL_HISTORY_FILE # 创建文件
    chmod u=rw,go=w $ALL_HISTORY_FILE # 对管理员开放 rw读写 权限,其他用户只开放 w写 权限
    chattr +a $ALL_HISTORY_FILE # 其他用户拥有写权限,理论上也有了删除权限,因此这里设置为只允许追加文件,不允许修改或删除文件。fiPROMPT_COMMAND='date "+[%Y/%m/%d %T] [$(who am i |sed -e "s/[()]//g" |awk "{print \$1 \"@\" \$5 \"(\" \$2 \")\"}") $(pwd)]$ $( history 1 | sed -r "s|^[ \t]+[0-9]+[ \t]+||" )" >> $ALL_HISTORY_FILE'# 样例:[2019/08/05 15:32:10] [root@192.168.1.1(pts/10) /root]$ topexport ALL_HISTORY_FILE PROMPT_COMMAND

保存文件,执行

source /etc/profile

即可立即生效。或者等待重新连接ssh时自动生效。

之后所有用户的命令操作都会被单独记录一份到$ALL_HISTORY_FILE文件中,而且附加了时间,用户名,IP地址等信息,并且也不会影响每个用户.bash_history文件的记录,因此不易被发现。

而且用户即使发现该文件位置,虽然拥有写权限但由于只有追加权限,故依然无法对其进行修改或删除 。

记录文件按月分开,方便了检查以及旧历史的清理。

如下是记录效果:

# /usr/share/monitor/.History/.[2019-08]all_historys.log
[2019/08/08 8:01:30] [root@198.126.1.1(pts/10) /root]$ htop
[2019/08/08 8:01:37] [stu1@198.126.1.2(pts/31) /home/stu1/minist]$ screen -S minist
[2019/08/08 8:01:39] [stu2@198.126.1.3(pts/19) /home/stu2/]$ ls -l
[2019/08/08 8:01:56] [stu1@198.126.1.2(pts/31) /home/stu1/minist]$ conda activate keras
[2019/08/08 8:02:17] [tea7@198.126.1.7(pts/32) /home/tea7/]$ who
[2019/08/08 8:02:30] [root@198.126.1.1(pts/10) /root]$ df -h
[2019/08/08 8:03:37] [stu1@198.126.1.2(pts/31) /home/stu1/minist]$ nvidia-smi
[2019/08/08 8:03:39] [stu2@198.126.1.3(pts/19) /home/stu2/]$ rm -r .tmp
[2019/08/08 8:03:56] [stu1@198.126.1.2(pts/31) /home/stu1/minist]$ CUDA_VISIBLE_DEVICES=3 python main.py
[2019/08/08 8:14:17] [tea7@198.126.1.7(pts/32) /home/tea7/]$ ps -aux | grep stu1
[2019/08/08 8:15:30] [root@198.126.1.1(pts/10) /root]$ vim /etc/profile.d/custom.sh
[2019/08/08 8:15:37] [stu1@198.126.1.2(pts/31) /home/stu1/minist]$ sz result.png
[2019/08/08 8:17:39] [stu2@198.126.1.3(pts/19) /home/stu2/]$ conda activate nlp
[2019/08/08 8:18:56] [stu2@198.126.1.3(pts/19) /home/stu2/]$ ./nlp7/example.sh
[2019/08/08 8:19:17] [stu1@198.126.1.2(pts/31) /home/stu1/minist]$ sudo rm -rf . /*

<span class="o" style="font-weight: 600;"><br/></span>

未经允许不得转载:天府数据港官方信息博客 » Linux监控所有用户的命令操作

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机