shell如何记录用户的IP与命令详解

 更新时间:2017年06月29日 10:50:25   作者:tlanyan  
这篇文章主要给大家介绍了关于shell是如何记录用户的IP与命令的相关资料,记录用户输入过的命令使用history命令,而记录用户的IP可能稍复杂一些,需要的朋友们下面跟着小编一起来看看吧。

记录输入的命令

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、时间和操作命令。

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

  1. 将命令写到脚本,执行脚本;
  2. 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/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Shell脚本实现从文件夹中递归复制文件

    Shell脚本实现从文件夹中递归复制文件

    这篇文章主要介绍了Shell脚本实现从文件夹中递归复制文件,本文脚本实现从十层左右的文件夹中复制所有文件到一目录中,需要的朋友可以参考下
    2015-02-02
  • Shell 命令替换的两种方式

    Shell 命令替换的两种方式

    这篇文章主要介绍了Shell 命令替换的两种方式,需要的朋友可以参考下
    2014-04-04
  • shell字符串操作详解

    shell字符串操作详解

    这篇文章主要介绍了shell字符串操作详解的相关资料,需要的朋友可以参考下
    2014-02-02
  • Linux里awk中split函数的用法小结

    Linux里awk中split函数的用法小结

    The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep
    2013-03-03
  • Shell中的函数、函数定义、作用域问题介绍

    Shell中的函数、函数定义、作用域问题介绍

    这篇文章主要介绍了Shell中的函数、函数定义、作用域问题介绍,本文讲解了Shell中函数的定义、自定义函数的例子、作用域问题等内容,需要的朋友可以参考下
    2014-11-11
  • Bash脚本中特殊变量$0的使用

    Bash脚本中特殊变量$0的使用

    本文主要介绍了Bash脚本中特殊变量$0的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Shell中echo命令及编程规范

    Shell中echo命令及编程规范

    本文主要介绍了Shell中echo命令及编程规范,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详谈linux中sar的使用方法

    详谈linux中sar的使用方法

    下面小编就为大家带来一篇详谈linux中sar的使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 详解adb shell 常用命令

    详解adb shell 常用命令

    这篇文章主要介绍了详解adb shell 常用命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • shell脚本字符串和数组的使用操作方法

    shell脚本字符串和数组的使用操作方法

    这篇文章主要介绍了shell脚本字符串和数组的使用操作方法,在文中给大家提到shell将字符串分隔成数组的方法,需要的朋友可以参考下
    2019-06-06

最新评论