LINUX用户登录后精确命令记录(history 按时间、用户显示命令记录)

2019年6月28日

LINUX用户登录后精确命令记录(history 按时间、用户显示命令记录)

 # 设置保存历史命令的文件大小
   export HISTFILESIZE=10000000

   # 保存历史命令条数
   export HISTSIZE=1000000

   # 实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖。
   export PROMPT_COMMAND="history -a"

   # 记录每条历史命令的执行时间
   export HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
备:%Y:4位数的年份;%m:2位数的月份数;%d:2位数的一个月中的日期数;%H:2位数的小时数(24小时制);%M:2位数的分钟数;%S:2位数的秒数

如果仅仅是在原来的基础上加上时间 那么那上述几个变量加到 /root/.bash_history   重载便可以了。

下面是我从网上找的一个脚本修改成我想要的方式 按照不同的用户 再已 年月日 划分

主要功能:
  可以记录哪个ip和时间(精确到秒)作了哪些命令
  通过用户登录时候,重新定义HISTFILE
  HISTFILE文件名包含登录用户名,ip,登录时间(精确到秒)等
  这样即使相同的用户从不同ip、在不同的时间登录都会被记录
  可以记录每条命令的开始执行时间
  把下面的代码直接粘贴到/etc/profile后面就可以了

vim  /etc/profile

export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] [`whoami`]"
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`

if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi

#目录名称 确立
#年
YEAR=`date +%Y`
#月
MONTH=`date +%m`
#日
DAY=`date +%d`
#history 存放目录 自定义
TMP_HISTORY_DIR=/tmp/history
#年月日 组合
TMP_HISTORY_DIR_DATE=$YEAR/$MONTH/$DAY
#history 按照 不同用户并已年月日为目录的路径
TMP_HISTORY_DIR_URL=$TMP_HISTORY_DIR/${LOGNAME}/$TMP_HISTORY_DIR_DATE

#检查 history 存放目录 是否存在 不存在则创建
if [ ! -d $TMP_HISTORY_DIR ]
then
mkdir $TMP_HISTORY_DIR
chmod 777 $TMP_HISTORY_DIR
fi

#检查最终存储的路径是否则在  不存在则创建 这里是多级目录
if [ ! -d $TMP_HISTORY_DIR_URL ]
then
mkdir -p $TMP_HISTORY_DIR_URL
chmod -R 300 $TMP_HISTORY_DIR/${LOGNAME}/
fi

# 设置保存历史命令的文件大小
export HISTFILESIZE=10240
# 保存历史命令条数
export HISTSIZE=1000000
# 实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖。
export PROMPT_COMMAND="history -a"

#export HISTFILE="/tmp/history/${LOGNAME}/${USER_IP}-history.$DT"
#定义 history 日志的位置
export HISTFILE="$TMP_HISTORY_DIR_URL/${USER_IP}-history"
#更改 权限
chmod 600 $TMP_HISTORY_DIR_URL/*history* 2>/dev/null
#导出非时间戳的格式 另存为  , history 记录时间是已时间戳来记录的 看起来比较麻烦
#此处有一个严重缺点 他不会自动执行 , 只有自己手动完成  在退出 ssh 之前 ,  source /etc/profile
history >> $TMP_HISTORY_DIR_URL/${USER_IP}-history-detail

 

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注