之前我记得有人问过linux上, 怎么记录用户的所有操作,包括输出的结果. 那时候我还不知道. 今天看python文档pty的时候看到个官方例子就是使用一个伪终端来模拟终端. 这不就是我们要的方法么.
官方链接: https://docs.python.org/3/library/pty.html
官方的例子, 实际上就可以直接使用的. 但我们稍微改一改, 完善一下.
首先创建一个目录, 专门用来记录终端的输出信息的.
mkdir -p /data_audit
chmod o+rw /data_audit # 得给其它账号写的权限
然后在/data_audit
文件下创建一个脚本(模拟终端的).
cat << EOF > /data_audit/.pty.py
#!/usr/bin/env python
import argparse
import os
import pty
import sys
import time
parser = argparse.ArgumentParser()
parser.add_argument('-a', dest='append', action='store_true')
parser.add_argument('-p', dest='use_python', action='store_true')
parser.add_argument('filename', nargs='?', default='.ptylogin.log')
options = parser.parse_args()
shell = sys.executable if options.use_python else os.environ.get('SHELL', 'sh')
filename = options.filename
mode = 'ab' if options.append else 'wb'
with open(filename, mode) as script:
def read(fd):
data = os.read(fd, 1024)
script.write(data)
return data
print('WARNING! pty login on file:'+filename)
script.write(('login %s\n' % time.asctime()).encode())
pty.spawn(shell, read)
script.write(('logout %s\n' % time.asctime()).encode())
EOF
接着就是配置/etc/profile
来实现每次时直接调用该脚本. 添加如下内容即可
if [ "`whoami`" != "root" ];then # 一般root账号是不允许登录的, 我们这里就排除root账号了
mkdir -p /data_audit/`whoami` # 每个用户一个目录
filename=/data_audit/`whoami`/`tty|sed 's/\///g'`
touch ${filename} # 创建相关日志文件
python /data_audit/.pty.py -a ${filename}
exit # 等用户退出登录时,我们也要退出
fi
到这里我们就配置好了.
我们这里没做权限控制. 如果要实现权限控制的话,自行修改脚本
我们登录随便执行点信息
然后退出, 使用root账号查看记录的信息
如果使用该用户查看信息的话, 也会记录该信息到那个文件, 就循环上了.... 所以我们理论上是不允许普通账号查看审计日志的. 这也是我们排除root账号的原因.
发现记录的信息和上面终端输出的信息一致. 说明我们的录屏
功能实现了.
没有做空间大小判断, 通常这种审计日志不会太多. 但还是得注意下. 尤其是那种cat大文件的操作(就尼玛离谱)
这只是录屏
用户的操作. 但用户的高危命令还是能执行的.所以权限控制还是十分重要的. 录屏功能主要是方便后续问题排查, 比如某些比较重要的信息输出到屏幕上, 但是操作多了就刷掉了, 就可以通过这种录屏
来查看当时的命令和输出. 十分的方便.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。