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

2012-04-03 11:49 来源:未知 作者:admin 点击: 评论:

A-A+

原标题:完善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 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是你可以添加到用户环境的系统库。

【易采站长站编辑:秋军】

即将到来的Debian 10 Buster发布版的新特点 即将到来的Debian 10 Buster发布版的新特点
Debian 10 Buster 即将发布。第一个发布候选版已经发布,我们预期可以在几周内见到待最终版。 如果你期待对这个新的主要发布
Rancher 推出 k3OS,业界首个 Kubernetes 操作系统 Rancher 推出 k3OS,业界首个 Kubernetes 操作
Rancher Labs(以下简称 Rancher)推出 k3OS,这是业界首个专为 Kubernetes 而生的极轻量操作系统,资源消耗极低,操作极简,秒级
微软正在考虑放弃其Windows密码过期策略 微软正在考虑放弃其Windows密码过期策略
Quick News 微软正在考虑放弃其 Windows 密码过期策略 微软考虑在 Windows 废除要求用户定期更改其登录密码的策略,以让用户养成
以Rust编写的类Unix操作系统Redox OS发布0.5版 以Rust编写的类Unix操作系统Redox OS发布
Redox OS 是一个几乎完全以 Rust 语言编写的通用操作系统及周围生态(例如文件系统、显示服务器及 Rust 版本的 libc)。其遵循
一个开发者的视角:未来云会是新的操作系统 一个开发者的视角:未来云会是新的操
也许从消费者的角度来看,云听起来并不新鲜。因为我们早已习惯从任意设备上访问在互联网上的文件、数据,而不用关心这
 谷歌 Fuchsia 操作系统将支持运行 Linux 应用程序 谷歌 Fuchsia 操作系统将支持运行 Linux
近日,谷歌已经为其新兴开源的 Fuchsia OS 添加了一个 Guest App,以使 Linux 应用程序能够在 Fuchsia 中作为虚拟机(VM)运行。这
巧用CHKDSK命令修复U盘文件或目录损坏问题 巧用CHKDSK命令修复U盘文件或目录损坏问
U盘是我们常用的随身移动存储工具,我们平时在使用U盘时难免会出现那么几次直接拔出U盘,结果导致U盘的文件或目录损坏
鉴别升级版U盘的小妙招 鉴别升级版U盘的小妙招
升级版U盘是什么?该如何鉴别它与正常U盘?也许很多朋友还不知道这个概念,下面让小编为大家解释一下。 升级版U盘,是将
不借助软件如何给U盘文件加锁 不借助软件如何给U盘文件加锁
运用第三方软件给U盘文件加锁,相信很多用户都会,但是软件毕竟加密效果有限,很容易被破解,随着WinXP系统退休而去,更
快速检测并修复缩水U盘的简单方法 快速检测并修复缩水U盘的简单方法
U盘的使用已经非常普及,但由于市场上充斥着大量的不良制造商,因此各种假冒伪劣U盘如雨后春笋般的出现,其中缩水U盘就