永利国际登录网址


Produced By 中国煤炭开发有限责任公司
主页 > 公司要闻 >

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

编者按:为了确保办事器的安然,保留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的时刻开启该功能即可激活。

自推出ksh93以来,Korn Shell就不停具有审计功能。类似bash 4.1,用户审计是一项编译时功能。想看看你所用的ksh93版本是否安装了审计功能,可以履行下列敕令中的某一条:

echo ${.sh.version}

永利国际登录网址echo $KSH_VERSION

永利国际登录网址在Ubuntu 10.10中,我获得了来自ksh93的这个输出:

# echo ${.sh.version}

Version JM 93t+ 2009-05-01

假如审计功能开启,特性字符串(JM)还会有字母A(开启审计功能),可能还有字母L(开启针对用户的审计功能)。IBM DeveloperWorks和Musings of an OS Plumber都刊有先容Korn Shell审计的出色文章。

Bash shell含有审计功能的可能性也对照小。Ubuntu 10.10上的bash是4.1.5(1)版本。

对付仍在应用C shell(以及尤其是tsch)的用户,tcsh有一个变种名为“tcsh-bofh”,它支持记入到系统日志中。遗憾的是,tcsh-bofh并没有获得经久的掩护。早在2010年1月,tcsh-bofh的FreeBSD端口就从FreeBSD端口树(port tree)去除了。

永利国际登录网址上述信息也可以在shell之外获取。比如有两个敕令:lastcomm(来自Ubuntu Main软件仓库中的acct法度榜样包)和auditctl(来自Ubuntu Universe软件仓库中的auditd法度榜样包)。别的, Linux Journal在2002年刊发过一篇关于Linux进程统计的好文章。别的还有rootsh和snoopylogger这两个法度榜样包,只是两者都不在Ubuntu软件仓库中。Rootsh好比是typescript的履行版本,而snoopylogger是你可以添加到用户情况的系统库。

Produced By 中国煤炭开发有限责任公司