记录输入的命令

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

最新文章

  1. 一个特殊情形的Mittag-Leffler分解
  2. android基于GPS实现定位操作
  3. Asp.net Core的代码移植技巧,半天将SqlSugarORM转成Core
  4. css通用小笔记02——浮动、清除(三个例子)
  5. HDU-2084 数塔 经典dp,水
  6. Linux 在 i 节点表中的磁盘地址表中,若一个文件的长度是从磁盘地址表的第 1 块到第 11 块 解析?
  7. mvc3在window 7 iis7下以及 xp iis 5.1下的部署 ,asp.net MVC3无法打开项目文件E:/我们的项目/Project/HeatingMIS.Web/HeatingMIS.Web.csproj”。此安装不支持该项目类型。
  8. 保存会话数据——session学习
  9. eclipse 编辑器的使用
  10. ArrayList常用方法
  11. virtualbox安装ubuntu出现“The system is running in low-graphics mode”
  12. POJ1679(次小生成树)
  13. IP协议详解
  14. ABAP Open SQL 分页查询
  15. [Swift]LeetCode272. 最近的二分搜索树的值 II $ Closest Binary Search Tree Value II
  16. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
  17. 基于 Spring Cloud 完整的微服务架构实战
  18. winform/timer控件/权限设置/三级联动
  19. JavaScript各种继承方式(三):组合继承(combination inheritance)
  20. Ajax(6) Ajax向servlet请求数据库操作 并显示到当前页面 这个未经测试

热门文章

  1. Problem D - Non-boring sequences——Contest1004 - National Day Training Contest -- Day3
  2. TechDay公开课实录:PaddlePaddle车牌识别实战和心得
  3. Spring中使用要点集合
  4. 代码收藏系列--javascript--日期函数
  5. mysql四-1:单表查询
  6. 根据数据库连接的java.sql.Connection获取数据库名称
  7. 特征点检测学习_2(surf算法)
  8. springboot如何集成mybatis的pagehelper分页插件
  9. wget命令下载文件
  10. MyBatis操作oracle的一些问题加载