Linux 利用script命令审计运维安全
大家对于Linux的history命令想必都十分熟悉,这个命令所生成的命令记录可以帮助我们审计运维时的操作,但,生成的记录周期是从登陆系统直到退出登陆才会生成。虽然可以通过调用系统环境变量给记录增加一些内容,比如命令执行时间,在哪个IP登陆的等等这样的信息,不过,并不是实时的。简单来说,缺点太多,1,不实时,2,无法控制整体流程。3,记录的信息并不算完整,即使通过变量改造后。
那么,运维安全审计的利器Linux系统内置的scrip命令基本就可以达到我们的需求了。
script命令启动的时候会自动录制Linux终端的所有命令(文本编辑的内容并不会录制,指的是vim或者vi编辑文本,这可能也是出于一种安全考虑吧,具体的文本内容变动都记录的话,对安全方面也是一个考验了),总的来说,script命令就像在Linux系统内置了一个摄像机,所有的动作都可以通过scriprereplay命令读取script命令生成的记录文件还原所记录的操作。
如标题所说,设计这么一个审计系统,首先要考虑的是需要确定运维安全审计的范围(运维安全审计指的是对运维期间的各种操作的审查),对服务器的操作可能不是一个人运维,有的时候需要多人同时协作,那么就可能需要开启多个终端,并且可能很多操作是远程操作,比如xshell,putty连接,涉及的用户也可能不是单一的,也可能有root用户,或者普通的oracle等等用户,多空间,多维度,多层次的复杂运维环境。
a,初识script命令
script命令基本Linux的发行版都内置有,因此基本不需要安装,开箱即用。先看看这个命令的帮助吧。
[root@centos9 ~]# script --help
Usage:
script [options] [file]
Options:
-a, --append append the output
-c, --command <command> run command rather than interactive shell
-e, --return return exit code of the child process
-f, --flush run flush after each write
--force use output file even when it is a link
-q, --quiet be quiet
-t, --timing[=<file>] output timing data to stderr (or to FILE)
-V, --version output version information and exit
-h, --help display this help and exit
帮助也比较简短,其中-a -t -f -q是常用的参数,-a 表示追加不覆盖录制,-t是加入时间数据,可单独写成一个文件,-f是每一个命令都实时写入文件,写一下,内容同时更新一下。-q是静默运行,启动和停止该命令都不输出任何提示。
b,script
直接运行,不加任何参数是什么情况呢?
[root@centos9 ~]# script
Script started, file is typescript
直接运行这个script命令,提示script命令已运行,文件为typescript,在当前目录下确实可以看到typescript这个文件,vim 这个文件,这时候发现文件内容为空,ctrl+d退出这个script命令,再次查看,就可以看到文件typescript里有内容了,记录了刚才的所有命令操作。这就告诉我们,script命令你就想象成一个录屏软件,要有开始还需要有结束,才能将录屏的内容保存到文件内,默认的文件名就叫typescript。
c,
[root@centos9 ~]# script -a
Script started, file is typescript
[root@centos9 ~]# df -ah
Filesystem Size Used Avail Use% Mounted on
sysfs 0 0 0 - /sys
中间省略了
tmpfs 396M 0 396M 0% /run/user/0
[root@centos9 ~]# exit
Script done, file is typescript
[root@centos9 ~]# script -a
Script started, file is typescript
[root@centos9 ~]# ls
anaconda-ks.cfg bash-5.0 bash-5.0.tar.gz createrepo.sh typescript
[root@centos9 ~]# exit
Script done, file is typescript
此时,是添加了一个a参数,追加,两个命令一个df 一个是ls命令,是分开执行的,先启动script,录制了df命令,然后停止了script命令,在启动script命令录制了ls命令看看typescript里记录了这两个命令没有?
可以看到,两个命令都录制进去了,也就是追加效果有了。
d,
script -t 参数是指定时序文件,时序文件记录了命令的执行时间,从而在使用scripreplay的时候能根据这个时序文件准确还原前面的录制。-f实时更新文件内容,下面例子还是使用的typescript这个名字,当然,任意的名字都可以,你只要知道意思就可以了。-t后面加不加空格都行,指定时序文件的名字,在这我使用的是myfirst.time 这个名字
[root@centos9 ~]# script -tmyfirst.time -f typescript
Script started, file is typescript
[root@centos9 ~]# ls -alh typescript
-rw-r--r-- 1 root root 7.6K Feb 12 20:55 typescript
[root@centos9 ~]# ls -alh typescript
-rw-r--r-- 1 root root 7.7K Feb 12 20:55 typescript
[root@centos9 ~]# ls -alh typescript
-rw-r--r-- 1 root root 7.9K Feb 12 20:55 typescript
[root@centos9 ~]# ls -alh typescript
-rw-r--r-- 1 root root 8.0K Feb 12 20:55 typescript
可以看到,文件在不停的执行ls命令时,文件在不断增大,如果查看内容,当然,也会实时的显示出来,在此不演示了。
f,
scriptreplay的使用:前面是script命令生成了两个文件,一个时序文件,一个内容记录文件,需要注意的是 这两个文件是一对文件,必须都有才可以回放哦。
[root@centos9 ~]# scriptreplay -t myfirst.time typescript
录制的时候可以看到script这个命令的进程,直到Ctrl+d 结束script这个命令。回放的时候,如果你在开一个终端,并执行ps命令,你可以看到scriptreplay的进程,直到回放结束,该进程自动结束。
生成的这一对文件必须是同一个script命令生成的才可以回放哦,这一点需要牢记~!!!!!
g,
前面演示的都是使用root账号,那么,登陆别的账号的运维安全可以审计到吗?当然,可以,将命令写在 /etc/profile 这个全局环境变量文件里即可。
打开 /etc/profile 末尾添加 script -t -f -q 2>~/script.time -a ~/script.his
这一句的意思是在 /mnt 这个文件夹下生成两个文件,script.time 和script.his 这两个文件,追加,实时写入,静默,文件存放在用户家目录下,普通用户登陆后录制的文件在普通用户的家目录,root自然在root的家目录。
只要登陆就立刻开始录制所有的命令内容。如果要查看回放,命令为 :scriptreplay -t script.time script.his
总结:
script可以看做一个实时的录屏软件,只是回放的时候不能够选择性的回放,录屏的时候时序文件和内容文件最好取一个自己能记得住并理解的文件名,并且这两个文件是一对的,要配对的才可以回放。