收集各用户的history并使用rsync同步到远程服务器
发布日期:2019-07-11 13:18   浏览次数:
59人阅读 2019-07-08 18:12:48

声明:

    以下的办法仅为了完成BOSS的义务,仅供参考。其中的一些文件、用户权限并不标准,而且每有一条命令执行,就会停止一次同步,请三思。



目的:

    经过修正/etc/profile,定制命令历史的格式、存储地位,使得每个用户每次登录零碎的操作历史都会被记载到对应的文件中。并且将这些文件备份到近程效劳器,避免窜改、删除。



步骤:

1、搜集各个用户的历史记载

    修正/etc/profile,指定历史记载存储途径、格式等:

#history
USERIP=`who am i 2> /dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`           #获取用户的登录IP
LOGNAME=`who am i 2> /dev/null | awk '{print $1}'`               #获取登录用户名
HISTDIR=/logs/.history                                #定义历史记载存储途径
if [ -z $USER_IP ]                     #假如没有获取到用户IP,则记载为hostname
  then
    USER_IP=`hostname`
fi
if [ ! -d $HISTDIR ]                   #当历史记载存储途径不存在时,在这里创立
  then
    mkdir -p $HISTDIR
    chmod 777 $HISTDIR
fi
if [ ! -d $HISTDIR/${LOGNAME} ]       #创立各个用户对应的存储途径 
  then
    mkdir -p $HISTDIR/${LOGNAME}
    chmod 300 $HISTDIR/${LOGNAME}
fi
DATETIME=`date +"%Y%m%d%H%M%S"`
export HISTFILE="$HISTDIR/${LOGNAME}/${DATETIME}.${USERIP}.history"       #定义历史记载文件
export HISTSIZE=10000                      #定义历史记载的最大条数
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] "  #定义历史记载工夫格式
chmod 300 $HISTDIR/${LOGNAME}/*.history* 2> /dev/null      #修正文件权限
export PROMPT_COMMAND='{ echo "$(pwd) $(history 1 | { read x cmd; echo "$cmd"; })"; } >> $HISTFILE'    #在第一条命令完毕,第二条命令开端之前,将命令写入到历史记载文件

    问:这里为什么用“who am i”命令获取登录用户名?

    答:其真实初始的/etc/profile文件中,曾经经过“USER="`/usr/bin/id -un`;LOGNAME=$USER”方式获取了用户名。这种方式获取的用户名是以后执行命令的用户名。

           而“who am i”则获取以后登录零碎的用户名。如:运用test用户登录到零碎,执行“who am i”获取到的就是“test”。即便经过su切换到root用户,再次执行“who am i”获取到的仍是“test”。


    执行source /etc/profile使更改失效:

[root@slave1 ~]# source /etc/profile


    到达的效果:

« 上一篇:没有了
» 下一篇:没有了
  • 友情链接:
Copyright(C) 2007-2010 EntLib.com(上海闵行区浦江镇863软件孵化基地) - 企业级的电子商务系统 基于Microsoft .Net Framework / ASP.Net / C# / AJAX 平台构建的标准电子商务系统 All Rights Reserved (R)    沪ICP备08014628号