设为首页收藏本站我的广告

运维网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索

完善Linux审计 将每个shell命令记入日志

2012-4-22 22:37| 发布者: yunweiw.com| 查看: 660| 评论: 0|原作者: 运维网|来自: 网络

  编者按:为了确保服务器的安全,保留shell命令的执行历史是非常有用的一条技巧。然而,shell虽然有历史功能,但是这个功能并非针对审计的目的而设计,因此很容易被用户篡改或是丢失。本文介绍的步骤能够帮助你将每个shell命令记入日志(你可以将本文和bash history logging攻防一文参考着阅读,看看攻防双方的思路有何不同)。本文作者David Douthitt是一位经验丰富的UNIX和Linux系统管理员,曾做过Linux发行版的打包工作,也是《Advanced Topics in System Administration》和《GNU Screen: A Comprehensive Manual》两本书的作者。以下为正文:

  将用户执行的每个shell命令记入日志比最初想象的要来得困难。shell的历史功能原本旨在帮助用户使用以前用过的命令。我们都知道这种使用场合:你刚输入了一个长长的字段,可是拼错了一个字符。shell的历史让你可以改正这一个字符,而不必输入其余的所有字符。

  然而, shell历史很难满足审计的目的。换言之,它不是为了确保系统安全而设计的。

  对于bash shell来说,问题显得尤其困难,因为该shell的目的是,不管用什么办法,尽可能为用户简化生活——所以,它拥有所有的“花哨功能”(bells and whistles)。必须顾及所有这些多种功能,并且防止对历史文件进行更改。

  Korn shell比较简单,使得保护shell的历史比较容易。

  如果想要严加保管这些shell的历史,需要执行一系列的步骤。

  首先,锁定shell的历史文件本身。更改它的属性,末尾只添加chattr +a .sh_history或chattr +a .bash_history。这样一来,就不可能删除或更改文件中的数据,连用户都无法改变属性——只有root用户才能改变。

  其次,确保历史变量设置合理、无法更改。这些历史变量包括最重要的HISTFILE、HISTCOMMAND和HISTIGNORE。要做到这一点,使用shell的typeset命令,带-r选项,这使得指定的变量拥有只读属性。良好的操作规范是使所有历史环境变量都变为只读,比如:

  export HISTCONTROL=

  export HISTFILE=$HOME/.bash_history

  export HISTFILESIZE=2000

  export HISTIGNORE=

  export HISTSIZE=1000

  export HISTTIMEFORMAT="%a %b %Y %T %z "

  typeset -r HISTCONTROL

  typeset -r HISTFILE

  typeset -r HISTFILESIZE

  typeset -r HISTIGNORE

  typeset -r HISTSIZE

  typeset -r HISTTIMEFORMAT

  HISTTIMEFORMAT是bash shell的扩展,将在历史文件中提供时间戳。

  对于bash shell来说,你需要更改历史的一些标准选项:

  shopt -s cmdhist

  #设置cmdhist将把多行命令放入到单单一个历史行

  shopt -s histappend

  #设置histappend将确保被添加到历史文件,而不是像通常的做法那样覆盖历史文件。

  另外对于bash shell来说,还要设置PROMPT_COMMAND:

  PROMPT_COMMAND="history -a"

  typeset -r PROMPT_COMMAND

  这是由于bash shell实际上把历史写入到内存中,历史文件仅在shell会话结束时加以更新。这个命令会把上一个命令附加到磁盘上的历史文件。

  最后,创建一个SIGDEBUG陷阱,将命令发送到系统日志(syslog)。VMware的ESXi借助自己版本的ash shell已经具有这样的功能。简而言之,应创建一个把当前命令记入日志(从历史文件获取)的函数,然后用logger命令,把它发送到系统日志。这一步在bash shell和Korn Shell中都适用。

  这些步骤有些冗长,不过在新版的bash和ksh中有一些新的功能特性,让这一切变得极其容易。GNU Bash在4.1版中添加了记入到系统日志中的功能,只需要编译shell的时候开启该功能即可激活。

下一篇:用LVM管理Linux服务器存储空间

上一篇:Linux服务器监控技术

12下一页

鲜花

握手

雷人

路过

鸡蛋
加入阿里云推荐返利15%

最新评论

QQ|申请友链|sitemap|手机版|小黑屋|Archiver|运维网 ( 京ICP备16008201号  

GMT+8, 2016-12-9 21:39 , Processed in 0.089811 second(s), 24 queries , Xcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

返回顶部