Linux记录history命令

对后面的(1)方法的提取文件改写法(强烈推荐)

简单:https://www.cnblogs.com/andy9468/p/12751809.html

记录存储位置:

mkdir -p /usr/local/records

chmod 777 /usr/local/records/
chmod +t /usr/local/records/

 

脚本存储位置:

mkdir -p /usr/local/system_script

 

编写脚本(记录用户执行过的命令):
vim /usr/local/system_script/bash_record.sh

# record cmd history
if [ ! -d /usr/local/records/${LOGNAME} ]

then

mkdir -p /usr/local/records/${LOGNAME}

chmod 300 /usr/local/records/${LOGNAME}

fi

export HISTORY_FILE_DATE_NAME=`date "+%Y-%m-%d"`
export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history_${HISTORY_FILE_DATE_NAME}"

export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'

 

说明:history 1 | { read x cmd; echo “$cmd”; }的解释:http://www.mamicode.com/info-detail-2461141.html 

 

使脚本可执行
chmod +x /usr/local/system_script/bash_record.sh

 

/etc/profile末尾追加内容:

vim /etc/profile

# myscript
# record cmd history
alias su='su -l '
HISTTIMEFORMAT="%F %T "
source /usr/local/system_script/bash_record.sh

说明:

定义su别名,是为了实现切换用户时,强制更新环境变量,避免环境变量未发生改变而引起的,切为低权限用户后,无写文件权限记录history日志。

定义HISTTIMEFORMAT格式,是为了写入history日志时,有命令执行时的时间。将 HISTTIMEFORMAT 变量加入 /etc/profile 文件中,让它对所有用户永久生效。

 

使配置生效
source /etc/profile

 

注意:上述脚本只能记录通过sshd服务端口(通常为22) 连接进入主机的用户操作,不能记录通过其他服务(如webmin)端口接入主机的用户操作。

 


 

一些说明:

记录脚本

cd /usr/local/
mkdir records
chmod 777 records/
chmod +t records/
vim /etc/profile

 

说明:

o+t  

https://www.iteye.com/blog/cocos-1089890

https://blog.51cto.com/13868278/2149028

 

(1)脚本一:推荐(按日期分割记录文件)

# record cmd history
if [ ! -d /usr/local/records/${LOGNAME} ]

then

mkdir -p /usr/local/records/${LOGNAME}

chmod 300 /usr/local/records/${LOGNAME}

fi


export HISTORY_FILE_DATE_NAME=`date "+%Y-%m-%d"`
export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history_${HISTORY_FILE_DATE_NAME}"


#export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history"

export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'

 

添加history中每个命令的执行时间:export HISTTIMEFORMAT='%F %T  '

https://zhidao.baidu.com/question/1516093640707389740.html

开发版本:计划实现以下功能:

1、日志中记录命令执行所在路径。——已实现

2、避免记录mysql明文密码。——待实现。已实现函数,未实现正确调用。

脚本如下:

# record cmd history

# step 1. prepare function
# function about hide password in cmd of mysql 
replace_passwd(){
    #echo $*
    result=$(echo $* | grep "mysql") 
    if [ -n "$result" ]; then
        #echo "yes"
        rc=`echo $* |sed 's/-p.*$/-p\*\*\*/g'`
    else
        #echo "no"
        rc=`echo $*`
    fi
    #echo $rc
    return $rc
}


# step 2. if it do not exist dir for saving logfile, creating the dir and named username
if [ ! -d /usr/local/records/${LOGNAME} ]
then
    mkdir -p /usr/local/records/${LOGNAME}
    chmod 300 /usr/local/records/${LOGNAME}
fi

# step 3. define few constants
export HISTORY_FILE_DATE_NAME=`date "+%Y-%m-%d"`
export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history_${HISTORY_FILE_DATE_NAME}"
 
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(pwd) #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'

  

 

(2)脚本二:(测试用,不推荐,日志会不断累积)

if [ ! -d /usr/local/records/${LOGNAME} ]

then

mkdir -p /usr/local/records/${LOGNAME}

chmod 300 /usr/local/records/${LOGNAME}

fi

export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history"

export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'

  

source /etc/profile

https://my.oschina.net/u/3866149/blog/3030842

 

=======================================================================

其他:

美化shell:让Linux命令提示符输出完整路径,且有颜色。

shell脚本:实现对登录主机失败10次以上的ip进行拒绝登录

posted @ 2019-09-23 11:04  安迪9468  阅读(1277)  评论(0编辑  收藏  举报