1、背景描述
最近有需求,客户有服务器被登录,不知道谁登录的,操作了什么命令,history
linux通常会用history来记录,但是history有个缺陷就是默认是1000行,当然你也可以vim /etc/profile将1000修改成1000000行,但是这只是比较笼统的做法,且history可以清空,看不到详细的用户来源已经操作记录,比如来源ip地址、操作时间、操作用户等。
测试系统:CentOS Linux release 7.4.1708 (Core) (Ubuntu没测试过,请自己照葫芦画瓢)

2、脚本

编写脚本如下:
vi /etc/profile文件,在末尾添加下面脚本:
################begin history log###############
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
HISTDIR=/var/log/history
DT=`date +%Y-%m-%d`
if [ -z $USER_IP ] #如果字符串是空
then
USER_IP=`hostname`
fi
pdf="."
if [[ ! $USER_IP == *${pdf}* ]] #如果ip中不包括点,则用主机名
then
USER_IP=`hostname`
fi
if [ ! -d $HISTDIR ]
then
mkdir -p $HISTDIR
chmod 773 $HISTDIR
fi
if [ ! -d $HISTDIR/${DT} ]
then
mkdir -p $HISTDIR/${DT}
chmod 773 $HISTDIR/${DT}
fi
export HISTFILESIZE=10000 #定义文件中最多只有HISTFILESIZE行
export HISTSIZE=10000 #定义history命令输出的记录数
DT2=`date +%Y%m%d_%H:%M:%S`
export HISTFILE="$HISTDIR/${DT}/${LOGNAME}@${USER_IP}_$DT2"
export HISTTIMEFORMAT="%Y%m%d_%H:%M:%S# "
#chmod 600 $HISTDIR/${DT}/*_* 2>/dev/null
################end history log###############
注意:
1、这里默认写了记录日志文件的默认目录是:/var/log/history(里面文件普通用户没有权限)
2、然后先用root登录一次,然后上面的mkdir /var/log/history会自动创建,切记,如果没有用root,先用admin登录,这会提示错误,因为/var/log目录默认admin没有权限,创建不了。
3、用户登录验证
[root@test-zts ~]# cd /var/log/history/
[root@test-zts history]# ls
2020-01-01
[root@test-zts history]# cd 2020-01-01/
[root@test-zts 2020-01-01]# ls
root@10.36.53.71_20200101_11:41:17 root@10.36.53.71_20200101_11:42:36 root@test-zts_20200101_11:45:59
root@10.36.53.71_20200101_11:41:53 root@10.36.53.71_20200101_11:43:40
[root@test-zts 2020-01-01]# cat root@test-zts_20200101_11:45:59
#1577850366
cd /var/log/history/2020-01-01/
#1577850367
ls
#1577850371
test
#1577850374
exit
说明:
上面的#1577850374 都是记录时间,这个时间叫做unix time,是从1970年1月1日临时起,到现在一共经过了多少秒。因为1969年是unix系统诞生,因此1970年1月1日被规定为unix系统诞生的时间的初始,linux系统因为和unix系统的相似性,也完全采用这种方式来记录时间,为了按照人类的年月日方式来显示时间,执行history命令来查看,就可以了,例如:
[root@test-zts 2020-01-01]# history
1 20200101_12:11:56# cd /var/log/history/
2 20200101_12:11:57# ls
3 20200101_12:12:00# cd ..
4 20200101_12:12:01# ll
5 20200101_12:12:06# cd history/
6 20200101_12:12:07# ll
7 20200101_12:12:43# ls
8 20200101_12:12:45# cd 2020-01-01/
9 20200101_12:12:46# ls
10 20200101_12:12:50# cat admin\@10.36.53.71_20200101_12\:09\:14
11 20200101_12:13:05# ls
12 20200101_12:13:13# cat admin@10.36.53.71_20200101_12:12:41
13 20200101_12:14:27# cat /etc/profile
14 20200101_12:19:20# history