记录输入的命令

history命令可以查看用户输入过的命令,一个典型history命令输出如下:

980 2017-05-29 20:17:37 cd -

981 2017-05-29 20:17:41 cat index.html

982 2017-05-29 20:20:11 vim index.html

983 2017-05-29 20:39:18 cd -

984 2017-05-29 20:39:25 cd /var/log/nginx/

985 2017-05-29 20:39:27 vim access.log

986 2017-05-29 20:50:10 netstat -ntlp

987 2017-05-31 11:04:39 tmux a -t0

988 2017-05-31 11:15:42 exit

989 2017-05-31 12:32:38 tmux a -t0

记录IP

为了记录用户的IP,需要首先获取用户的登录IP。由于在用户登入期间,会话不会断开,所以只需获取一次即可。

获取IP命令: who am i | awk '{print $NF}' | sed -e 's/[()]//g' 。

接着按照 username@ip datetime command 的格式记录用户的命令,这需要设置HISTTIMEFORMAT的值。获取IP和设置命令格式结合起来:

IP=who am i | awk '{print $NF}' | sed -e 's/[()]//g'

export HISTTIMEFORMAT=$USER@$IP %F %T

为了让上述命令对所有用户生效,可将其写到/etc/profile文件中。设置完毕后(可能需要重新登录,或者用source命令重新加载/etc/profile),history命令输出如下类似结果:

412 root@8.8.8.8 2017-06-02 22:03:27 netstat -nt

414 root@8.8.8.8 2017-06-02 22:03:38 netstat -ntpl

415 root@8.8.8.8 2017-06-03 14:17:09 history

416 root@8.8.8.8 2017-06-03 14:17:30 tmux ls

417 root@8.8.8.8 2017-06-03 14:17:34 tmux

418 root@8.8.8.8 2017-06-03 14:17:49 tmux a -t0

history命令的内容保存在用户的~/.bash_history文件中,用户可随时更改或者清除。为了统一管理用户的命令记录,我们希望用户执行命令后,执行的命令能输出到某个文件内。达到这个目的需要 PROMPT_COMMAND 环境变量的协助。

设置PROMPT_COMMAND将用户的上一条命令log到syslog里面去:

export PROMPT_COMMAND="history 1 | logger -t cmd_log -p user.notice"

logger命令将信息输出到/var/log/messages中。任意输入一个命令,然后打开/var/log/messages,会看到已经记录在案。/var/log/messages文件只有root有权限访问,从而达到了记录用户IP和命令的目的。

如果你熟悉syslog,可以将命令记录输出到单独的文件中。这需要在logger命令的-p选项中指定工具名称和等级,例如local2.notice,然后编辑/etc/rsyslog.conf,将local2的信息输出到单独文件: local2.* /var/log/command.log,最后重启rsyslog服务。

通过如上设定,即可在用户无感知的情况下log用户的IP、时间和操作命令。

对用户来说,如何绕过?可以有两种方式:

将命令写到脚本,执行脚本;
unset PROMPT_COMMAND变量。

参考

https://askubuntu.com/questions/93566/how-to-log-all-bash-commands-by-all-users-on-a-server

http://moper.me/ssh-audit-chats.html

http://zhu8337797.blog.163.com/blog/static/170617549201222912830483/

转载:http://www.jb51.net/article/117463.htm

Shell-history命令加记录用户IP的更多相关文章

  1. Linux history显示时间/用户/ip的设置

    在使用linux服务器的时候发生一些不知道谁操作的问题,google一下说history命令可以查看到历史记录,用过之后发现还是不够详细,再google,原来可以自己设置history的显示. 记录设 ...

  2. shell history 命令

    1.history命令可以显示历史执行过的命令: 2.使用!+序号执行该序号对应的命令: 例子 $ history sed 's/haha/hello/g' test cat test cat tes ...

  3. shell chpasswd 命令 修改用户密码

    使用useradd 命令增加一个用户后,它默认是没有设置密码的.如果需要给用户设置或者修改密码,一般会使用passwd命名. 但是passwd命令有一个缺陷,它需要人工交互操作. 如果你是一名系统管理 ...

  4. CentOS配置history记录每个用户执行过的命令

    一个偶然的机会,看到了这个文档,先存下来,后续使用的话直接就加进去了 要记录登录者的用户名.IP.操作记录,在/etc/bashrc末尾加入几个环境变量,用于history命令显示用户ip等内容,完成 ...

  5. history命令

    在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中.通过这个文件可以查询 shell 命令 ...

  6. 谁动了我的主机? 之活用History命令

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux系统下可通过history命令查看用户所有的历 ...

  7. 善用Bash history 命令

    大家好,我是良许 相信大家平时都有用 history 命令来查看命令历史记录,但是实际上 history 命令并非只有这个功能,history 还有很多有用的功能.尤其是 Bash 版本的 histo ...

  8. [转]Linux Shell History (快速使用Linux命令)

    http://www.blogjava.net/lihao336/archive/2010/10/11/334367.html Linux Shell History (快速使用Linux命令) Li ...

  9. linux中,history命令,显示时间戳?操作人?IP地址?

    需求描述: 在linux环境中,有的时候为了审计的需要,要记录谁什么时间从什么IP登录,执行了什么命令,bash的history命令就能够记录这些信息,但是在默认的情况下,是不记录时间的,所以呢,在这 ...

随机推荐

  1. 以太网帧,IP,TCP,UDP首部结构

    1.以太网帧的格式 以太网封装格式 2.IP报头格式 IP是TCP/IP协议簇中最为重要的协议.所有的TCP,UDP, ICMP和IGMP数据都以IP数据报格式传输.IP提供的是不可靠.无连接的协议. ...

  2. LR安装No Background bmp defined in section General entry BGBmp的解决办法

    问题描述:我在win10装LR11总是报这个错误:No Background bmp defined in section "General" entry "BGBmp& ...

  3. python常用模块collections os random sys

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...

  4. http2.0可行性研究

     一.http2比http1有了更多新特性 1.使用了多路复用的技术,并发量支持比http1大几个数量级: 2.二进制分帧,改善网络延迟情况,提高传输速率: 3.支持header的数据压缩,数据体积变 ...

  5. Redis Scan迭代器遍历操作原理(二)

    续上一篇文章 Redis Scan迭代器遍历操作原理(一)–基础 ,这里着重讲一下dictScan函数的原理,其实也就是redis SCAN操作最有价值(也是最难懂的部分). 关于这个算法的源头,来自 ...

  6. Codeforces 585D. Lizard Era: Beginning(meet in the middle)

    一眼题...这个数据范围也太明显了吧... suma1==suma2 && sumb1==sumb2 && sumc1==sumc2 相当于suma1-sumb1==s ...

  7. bzoj2213: [Poi2011]Difference(思维题)

       今天颓了一天T T 这题有两种写法... ①预处理出每种字符在原字符串中的位置,枚举两种字符作为最大值和最小值,把这两种字符的坐标归并排序,把最大值设为1,最小值设为-1,求最大子段和.注意因为 ...

  8. 【bzoj4894】天赋

    Portal-->bzoj4894 Solution 这题的话其实,一句话题意就是求..外向树(方向是根往叶子).. 然后关于有向图的生成树计数的话,求外向树就是将度数矩阵改成入度,内向树就是改 ...

  9. Codeforces Round #407 (Div. 2)A B C 水 暴力 最大子序列和

    A. Anastasia and pebbles time limit per test 1 second memory limit per test 256 megabytes input stan ...

  10. discuz开发,登录次数过多,锁定解决方法

    到数据库里的表找到pre_common_failedlogin 和pre_ucenter_failedlogins清空里面的内容即可. truncate table pre_common_failed ...