script
命令在大部分Linux发行版中都是默认安装的,script
能够将终端会话过程中用户所有操作和已输出到屏幕的内容全部录制下来,然后使用scriptreplay
可以将其录制的结果播放给人观看。
录播屏幕
录制屏幕内容
在终端输入如下命令,其中time.file
和scriptfile
两个文件名均可自定义。
# script -t 2>time.file -a scriptfile
Script started, file is scriptfile
执行完此命令后,script
将会记录接来下的所有操作及终端显示。
time.file
为时序记录文件,记录的是在第几秒执行的命令。
# head -n 10 time.file
0.042361 61
0.011081 1
2.512045 1
0.130340 1
0.149805 1
0.377275 1
0.321984 2
0.421013 118
0.001619 53
0.000159 1
scriptfile
为命令执行记录文件,记录执行的是哪些命令。
# head -n 10 scriptfile
脚本启动于 2019年09月28日 星期六 16时38分20秒
[root@ha-node01 script]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月 28 16:38 scriptfile
-rw-r--r--. 1 root root 0 9月 28 16:38 time.file
[root@ha-node01 script]# top
top - 16:38:29 up 4:15, 3 users, load average: 0.08, 0.03, 0.05
Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.0 us, 3.0 sy, 0.0 ni, 93.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882256 total, 1365724 free, 191032 used, 325500 buff/cache
静默录制屏幕
使用scrpit
命令录制与退出均有相应的提醒,如果我们需要在用户完全不察觉的情况下运行,我们可以使用-q, --quiet
参数来使script命令以静默模式运行。
# script -q -t 2>time.file -a scriptfile
#
要停下来只需要按下组合键Ctrl+D
或者输入exit
命令即可。
# exit
回放屏幕内容
当然,有录制就有播放,回放录制的屏幕时可以使用scriptreplay
命令,执行命令时需要跟上对应的时序文件(在前)与命令文件(在后)。
# scriptreplay time.file scriptfile
如果需要调整播放速度(倍数)可以添加-d, -divisor number
参数。该参数可以是小数(放慢)。
自动监控用户登陆操作
通过上述命令我们可以手动启动一个script
来记录当前终端的一切输入输出显示内容,但是需要我们每次都去手动启动显然不是我们最终想要得到的。
我们可以把相关的操作以脚本的形式写入到/etc/profile
中,这样如果有人偷偷登陆了系统,或者有相关人员在远程服务器操作了什么东西都可以自动记录下来,相关的记录日志也可用作平时的操作审计使用。
在/etc/profile
中添加如下
if [ ! -d /var/log/user-records/ ]
then
mkdir -p /var/log/user-records/
chmod 0777 /var/log/user-records/
chmod +t /var/log/user-records/
fi
if [ ! -d /var/log/user-records/${LOGNAME} ]
then
mkdir -p /var/log/user-records/${LOGNAME}
chmod 0300 /var/log/user-records/${LOGNAME}
fi
script -t -f -q 2>/var/log/user-records/${LOGNAME}/${LOGNAME}-${UID}-`date +%Y%m%d%H%M%S`.time -a /var/log/user-records/${LOGNAME}/${LOGNAME}-${UID}-`date +%Y%m%d%H%M%S`.his
if [ "$SHLVL" = 1 ]; then
exit
fi