• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    shell如何记录用户的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脚本学习之调用脚本将文件打包zip的方法示例
    • Linux下NC反弹shell命令(推荐)
    • shell脚本实现多彩进度条
    • shell脚本实现多进程运行的方法示例
    • Shell脚本经典之Fork炸弹的分析与预防
    • 详解Linux Shell 实现一个获取任意位数的随机密码的脚本
    上一篇:在Linux与Windows上获取当前堆栈信息的方法
    下一篇:详谈Linux写时拷贝技术(copy-on-write)必看篇
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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