history命令显示时间戳、IP地址、用户名
一、前置知识
history命令的功能是显示和管理用户所执行过的所有命令记录。这些记录默认被Linux系统保存,用户可以使用history命令查看这些记录,也可以对其记录进行修改和删除操作。
root@localhost:~# history
1 mount /dev/sr0 /media/
2 mount /dev/sr1 /media/
3 cd /media/
4 ls
5 ./install.sh
history命令的常用参数如下:
参数 | 说明 |
---|---|
-a | 保存命令记录 |
-c | 清空命令记录 |
-d | 删除指定序号的命令记录 |
-n | 读取命令记录 |
-r | 读取命令记录到缓冲区 |
-s | 添加命令记录到缓冲区 |
-w | 将缓冲区信息写入到历史文件 |
二、问题
在日常运维工作中,因为各种需求申请登录到到服务器的情况经常出现,例如开发、运维、第三方技术支持等,在缺乏堡垒机日志审计等专业设备的情况下,无论是在日常背锅排查过程中,或者入侵事件的应急排查过程中,无法知道用户的操作(乱搞)情况。
三、解决思路
只要思想不滑坡,办法总比问题多。
- 获取用户登录IP
- 拿不到IP的情况下,用主机名代替
- 格式化history命令
- 开启历史命令追加功能,不覆盖之前的历史记录
- 每次登录执行保存命令的记录
四、分步实现思路
获取当前登录用户的真实IP地址
USER_IP=`who -u am i 2> /dev/null |awk '{print $NF}' | sed -e 's/[()]//g'`
判断如果获取不到IP,则使用hostname命令获取主机名作为IP的替代值
if [ -z "$USER_IP" ]
设置历史命令时间格式化输出
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
开启历史记录追加功能
shopt -s histappend
设置PROMPT_COMMAND环境变量,使得每次shell提示符出现前自动执行history -a命令。
export PROMPT_COMMAND="history -a"
五、将配置更新到/etc/profile中,并使其生效(附完整配置)。
将配置更新到/etc/profile文件中,并执行:source /etc/profile
USER_IP=`who -u am i 2> /dev/null |awk '{print $NF}' | sed -e 's/[()]//g'`
if [ -z "$USER_IP" ]; then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
最后,执行history命令来看看效果:
root@inboc-sys-ubuntu-xj:~# history
1 2024-09-11 20:27:53 192.168.50.2 root export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
2 2024-09-11 20:27:53 192.168.50.2 root curl -fsSL https://get.docker.com/ | sh
3 2024-09-11 20:27:53 192.168.50.2 root docker compose --version
4 2024-09-11 20:27:53 192.168.50.2 root docker compose version
至此可以看到,执行时间、IP地址、用户名、执行命令就都展现出来了。
文章版权声明:除非注明,否则均为TseKing的运维博客原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...