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

2012-04-03 11:49 来源:未知 作者:admin
 

编者按:为了确保服务器的安全,保留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 Developer WorksMusings 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是你可以添加到用户环境的系统库。 (责任编辑:秋军)

微博/微信

易采站长站每天为您奉上最新、最热的IT行业资讯、热门报道、新品发布、人物动态等资讯信息。

关注易采站长站微博,看科技资讯关注行业动态。

↑扫描二维码

在手机上看科技快讯、热点报道

第一时间看独家爆料和深度报道

请关注易采站长站官方微信帐号:

1.用手机扫左侧二维码;

2.在添加朋友里,搜索关注easckcom

最新评论

微软 Windows 10 Redstone 3 新设计语言:

微软 Windows 10 Redstone 3 新设计语言:Project NEON

微软最近几年已经将 Metro UI 改名为 Microsoft Design Language(简称为 MDL),Windows 10 目前采用的是 MDL 2,但很明显现在的设计语言

Windows 10 新 Insider 预览版带来 Cortana 和

Windows 10 新 Insider 预览版带来 Cortana 和亚洲输入体

微软最新推送了 Windows 10 Insider 预览版Build 14986,这个版本新功能较多,核心是Cortana和亚洲国家的输入体验优化。 在这个 W

微软收购 LinkedIn 已获所有监管批准,

微软收购 LinkedIn 已获所有监管批准,近日将完成

差不多 6 个月前,微软宣布将以 262 亿美元收购 LinkedIn,预计是在今年年底前完成收购。今天,欧盟已经批准了这次收购,微

微软披露混合现实计划:明年上半年在

微软披露混合现实计划:明年上半年在中国推出

今天,微软在 WinHEC 还宣布了混合现实方面的计划。微软已经在中国提交 HoloLens 设备审核,预计会在明年上半年在中国市场面

微软为高通 ARM 处理器提供 Windows 10 桌

微软为高通 ARM 处理器提供 Windows 10 桌面支持

今天微软在 WinHEC 大会上宣布,将为高通 ARM 处理器提供 Windows 10 桌面支持,并且是能够运行 x86 Win32 和通用 Windows 应用,包括

图文热点

加密无痕Win7系统让U盘成为个人乌托邦

加密无痕Win7系统让U盘成为个人乌托邦

现如今一个4GU盘的价钱才不过十几块钱而已,真的是非常便宜,而许多用户都习惯带着一个U盘存储一些文件,对一些上班族

Windows 8游戏性能测试:兼容性有待提高

Windows 8游戏性能测试:兼容性有待提高

Windows 8开发者预览版虽然不是一个成熟的版本,但我们都很关心,其游戏性能到底是怎么样的呢?表现会比Windows 7更优秀吗?

Tumblr:150亿月浏览量背后的架构挑战

Tumblr:150亿月浏览量背后的架构挑战

导读:和许多新兴的网站一样,著名的轻博客服务Tumblr在急速发展中面临了系统架构的瓶颈。每天5亿次浏览量,峰值每秒4万

10分钟变身!Win7预装本巧作无线路由器

10分钟变身!Win7预装本巧作无线路由器

引言:编者第一次接触到正版Win7系统,还在学校读书。第一次见到Win7预装的笔记本,第一次打开Win7桌面的那一刻,同学们都

Linux VPS/服务器上轻松导入、导出MySQ

Linux VPS/服务器上轻松导入、导出MySQL数据库

随着网站的运行MySQL数据库也越来越大,备份问题也日益凸显,使用phpmyadmin导出或导入时可能会因为超时文件过大等原因无法

推荐资讯