shell历史命令记录功能

在Linux下可通过history命令查看用户所有的历史操作记录,同时shell命令操作记录默认保存在用户目录下的.bash-history文件中,通过这个文件可以查询shell命令的执行历史,有助于运维人员进行系统审计和问题排查,同事,在服务器遭受黑客攻击后,也可以通过这个命令或文件查询黑客登录服务器所执行的历史命令操作,但是有时候黑客在入侵服务器后为了毁灭痕迹,可能会删除.bash_history文件,这就需要合理保护或备份.bash_history文件

让history命令自动记录所有shell命令的执行时间,编辑/etc/bashrc文件,最后添加如下内容:

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

HISTFILESIZE=4000

HISTSIZE=4000

HISTTIMEFORMAT=‘%F %T ‘

export HISTTIMEFORMAT

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

使配置生效source /etc/bashrc

其中,HISTFILESIZE定义了在.bash_history文件中保存命令的记录总数,默认值是1000,这里设置为4000;HISTSIZE定义了history命令的输出的记录总数;

HISTTIMEFORMAT定义时间显示格式,这里的格式与date命令后的“+%F %T”是一致的;HISTTIMEFORMAT作为history的时间变量将值传递给history命令。

通过这样的设置后,执行history命令,就会显示每条历史命令的详细执行时间,例如:

为了确保服务器的安全,保留shell命令的执行历史是非常有用的一条技巧,虽然shell有历史功能,但是这个功能并非针对审计目的而设计,因此很容易被黑客篡改或丢失;

下面在介绍一种方法,可以实现详细记录登陆过系统的用户、IP地址、shell命令以及详细操作时间等,并将这些信息以文件的形式保存在一个安全的地方,以供系统审计和故障排查。

将下面这段代码添加到/etc/profile文件末尾中,即可实现上述功能

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

#history

USER_IP=`who -u am i 2>/dev/null| awk ‘{print $NF}‘|sed -e ‘s/[()]//g‘`

HISTDIR=/usr/share/.history

if [ -z $USER_IP ]

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

export HISTSIZE=4000

DT=`date +%Y%m%d_%H%M%S`

export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT"

export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"

chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null

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

使配置生效 source /etc/profile

每段代码将每个用户的shell命令执行历史以文件的形式保存在/usr/share/.history目录中,每个用户一个文件夹,并且文件夹下的每个文件以IP地址加shell命令操作时间的格式命名,下面是user01用户执行shell命令的历史记录文件,基本效果如下:

时间: 2024-10-27 19:13:05

shell历史命令记录功能的相关文章

shell基础命令记录.

为了方便自己随时查看练习做的记录 技巧记录:ctrl + r 可以搜索之前输入过的命令 1. 变量赋值 a=1 b="this is a string" echo $a echo $b 2. 变量引用 使用$符号,直接引用单个变量 echo $a 输出变量a的值 在字符串中插入变量的值(必须双引号) echo "number is $a" 输出"number is 1",引用变量a的值 注意变量引用时可能出现的歧义 如想输出变量a的值加"

为history历史命令记录添加上执行时间

设置方法: #export HISTTIMEFORMAT="`whoami` | %F %T | " #echo 'export HISTTIMEFORMAT="`whoami` | %F %T | "' >> /etc/profile #. /etc/profile 效果如下: # history ...... 1047  root | 2015-08-14 17:38:54 | ulimit -a 1048  root | 2015-08-14 17

bash shell相关命令记录(2)---注释、字符串、数组

参考链接http://c.biancheng.net/cpp/view/7000.html 1.shell注释 以“#”开头的行就是注释,会被解释器忽略.sh里没有多行注释,只能每一行加一个#号. 如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以使用 : << ! 语句1 语句2 语句3 语句4 ! 或者 : ' 语句1 语句2 语句3 ' 2.字符串 字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引

linux 历史(histroy)命令记录过滤

通过设置关于历史命令的环境变量来达到过滤的目录,并且还可以添加时间戳. 以下的方法都可以添加进环境变量文件中来达到永久生效. 给历史命令添加时间戳: export HISTTIMEFORMAT='%F %T' 使用ctrl+R搜索历史. 历史命令记录的数量 export HISTSIZE=450 export HISTFILESIZE=450 更改记录历史命令的文件. export HISTFILE=/HOME/histroy_filename 从文件中删除连续重复的命令 export HIST

bash功能特性二 命令别名和历史命令

一.历史命令 bash提供存储历史命令的功能,下面来详细介绍一下. 1.history命令 命令格式:history [options] options: 不带参数选项:显示所有使用过的命令: #(数字):显示最近使用过的#条命令: -c:清除目前shell中所有的历史命令: -d #:清除条#条命令: -r:将历史命令配置文件(默认~/.bash_history)中的内容读到目前的shell中: -a [FILE]:将新增的历史命令导入到FILE中,不指定则保存到~/.bash_history

Linux命令高效操作(2)-妙用历史命令

本希望把Linux高效操作这一个系列文章命名为unix-like命令高效操作,但是后来发现本人并没有在多数的unix-like平台实践过.本着实践第一的精神,就不把话题扯那么大了,决定更名为"linux命令高效操作",哈哈.废话不多说,我的实验系统:Linux之centos7. 今天我想聊的是每个用过Linux命令操作的同学或许都知道的一个存在:历史命令.什么是历史命令呢?通俗简单的说,就是你执行过的命令的历史.大家最常见的用处就是使用上下方向键进行命令的切换喽!刚接触命令行操作的同学

历史命令、自动注销

shell环境的历史命令为我们在操作时提供了很大的便利,但其同样也存在着一些风险,因为只要获得了用户的命令历史文件,我们所做的操作就等于摆在别人面前,特别是有些命令还包括了我们的一些明文密码,无疑是我们安全的一大隐患.因此我们可以通过减少历史命令条数降低我们的安全风险.历史命令记录的条数由变量HISTSIZE决定,所以我们可以通过修改/etc/profile文件中的HISTSIZE变量值.这是我们通过history命令可以查看到我们之前所操作过的所有命令. 进入/etc/profile文件将HI

linux 历史命令用法(转)

许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历史命令操作和一些快捷键,让你在命令行下工作效率翻倍,而且这些技巧不失为装逼利器呀. 历史命令操作篇 最基本的查看历史命令 history history !n 编号为n的历史命令 不用再复制粘贴,或者照着历史记录敲了.执行历史命令记录里面的某个命令,只需要 ! + 这条命令记录前的序号,比如 !76

history隐藏历史命令tree查看目录层级

大家都知道 查看Centos历史命令的的命令是 history 另外Centos -c选项可以清除历史命令,会清除所有....有没有一种方法可以***别人系统后而不留下历史命令的操作痕迹呢?答案只有的....history命令是环境变量定义的 两个环境变量分别定义了历史命令数量和历史命令记录规则..默认是ignoredups 意思是忽略重复的命令其实可以改成 ignorespace忽略空白开头的命令export HISTCONTROL=ignorespace修改以后再输入命令的时候 在命令前面加