Linux 实时记录用户操作命令

Linux 实时记录登录用户的操作记录, 可朔源可审计

定义变量

获取当前登录用户

LOGIN_USER=$(whoami)

定义历史记录的根目录和用户目录

HIS_ROOT=/hist
HIS_USER=${HIS_ROOT}/${LOGIN_USER}

设置历史记录文件

export HISTFILE="${HIS_USER}/$(date '+%F').his"

创建目录

创建相关目录并设置相应的权限

1
2
3
4
5
6
7
8
9
10
11
# 创建历史目录(如果不存在)
if [ ! -d ${HIS_ROOT} ]; then
mkdir ${HIS_ROOT}
chmod 777 ${HIS_ROOT}
fi

# 创建用户目录(如果不存在)
if [ ! -d ${HIS_USER} ]; then
mkdir ${HIS_USER}
chmod 700 ${HIS_USER}
fi

创建文件

1
2
3
4
5
# 创建历史记录文件(如果不存在)
if [ ! -f ${HISTFILE} ]; then
touch ${HISTFILE}
chmod 700 ${HISTFILE}
fi

核心代码

1
export PROMPT_COMMAND='user=$(whoami | sed "s/[ ][ ]*/ /g"); history 1 | { read x date time cmd; echo "${date} ${time} [${user}]: ${cmd}"; } >> $HISTFILE'

完整代码

使用 root 用户编辑 /etc/profile 文件, 在文件尾部

vim /etc/profile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# auther: ali
# email: solitude@hraulein.chmod
# create: 2023.11.28
# note: linux 实时记录登录用户的操作记录

LOGIN_USER=$(whoami)
HIS_ROOT=/hist
HIS_USER=${HIS_ROOT}/${LOGIN_USER}
export HISTFILE="${HIS_USER}/$(date '+%F').his"

if [ ! -d ${HIS_ROOT} ]; then
mkdir ${HIS_ROOT}
chmod 777 ${HIS_ROOT}
fi
if [ ! -d ${HIS_USER} ]; then
mkdir ${HIS_USER}
chmod 700 ${HIS_USER}
fi
if [ ! -f ${HISTFILE} ]; then
touch ${HISTFILE}
chmod 700 ${HISTFILE}
fi
export PROMPT_COMMAND='user=$(whoami | sed "s/[ ][ ]*/ /g"); history 1 | { read x date time cmd; echo "${date} ${time} [${user}]: ${cmd}"; } >> $HISTFILE'

记得更新

更新 /etc/profile 文件, 使设置生效

source /etc/profile