一、前置知识
history命令的功能是显示和管理用户所执行过的所有命令记录。这些记录默认被Linux系统保存。用户可以使用history命令查阅这些记录,也可以对其记录进行修改和删除操作。
history命令的常用参数如下:
-a: 保存命令记录
-c: 清空命令记录
-d: 删除指定序号的命令记录
-n: 读取命令记录
-r: 读取命令记录到缓冲区
-s: 添加命令记录到缓冲区
-w: 将缓冲区信息写入到历史文件
二、问题
在日常运维工作中,因为各种需求申请登录到到服务器的情况经常出现,例如开发、运维、第三方技术支持等,在缺乏堡垒机日志审计等专业设备的情况下,无论是在日常背锅排查过程中,或者入侵事件的应急排查过程中,无法知道用户的操作(乱搞图片)情况。
三、解决思路
只要思想不滑坡,办法总比问题多。
-
获取用户登录IP
-
拿不到IP的情况下,用主机名代替
-
格式化history命令
-
开启历史命令追加功能,不覆盖之前的历史记录
-
每次登录执行保存命令的记录
四、将配置更新到/etc/profile中,并使其生效
# 获取当前登录用户的真实IP地址
USER_IP=`hostname -i`
# 如果获取不到IP,则使用hostname命令获取主机名作为IP的替代值
if [ -z "$USER_IP" ]; then
USER_IP=`hostname`
fi
#格式化历史命令输出
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
#开启历史记录追加功能
shopt -s histappend
# 设置PROMPT_COMMAND环境变量,使得每次shell提示符出现前自动执行history -a命令,确保所有交互式命令都被保存至历史记录中
export PROMPT_COMMAND="history -a"
source /etc/profile
执行history命令来看看效果: