WEB开发网
开发学院操作系统Linux/Unix KornShell 93 的审计功能 阅读

KornShell 93 的审计功能

 2008-11-12 08:30:18 来源:WEB开发网   
核心提示:简介在当今的计算环境中,用户和系统管理员可能会访问遍布全球各地的系统,KornShell 93 的审计功能,在不同的位置之间,甚至同一位置,必须对所有管理员和用户的活动进行审计,他们也必须认识到他们的活动会被审计,用户和管理员的技能差异非常大,技能水平高的用户可能出于好奇或恶意干扰这些系统的管理

简介

在当今的计算环境中,用户和系统管理员可能会访问遍布全球各地的系统。在不同的位置之间,甚至同一位置,用户和管理员的技能差异非常大。技能水平高的用户可能出于好奇或恶意干扰这些系统的管理,为了保护企业,必须控制和排除这个问题。管理层有责任保护他们所管理的企业,包括客户、职员、投资、信息、数据和业务功能,还要满足法律法规和审计需求。为了履行其职责,管理层必须对访问系统的用户的活动进行监视、跟踪、记录和审计。Korn Shell 的新特性提供的审计功能可以帮助满足这些需求。

Korn Shell 93 审计

到编写本文时,Korn Shell 93 的最新版本是 2007 年 11 月 5 日发布的 Release “ksh93s+”。这个版本提供了一个新的编译选项 “SHOPT_AUDIT”。这个选项可以对任何用户的键盘操作进行日志记录,它可以配置为在本地存储审计信息,也可以使用 Korn Shell 连网功能执行远程存储。这个特性记录的信息包括执行的每个命令、执行每个命令的日期和时间、执行命令的用户以及执行命令所用的 tty。这个选项可以针对不同的用户分别配置,可以包括根用户。审计信息可以存储在每个系统上系统管理员指定的本地文件中,也可以发送到远程系统以便进行集中的日志记录。

IBM® AIX® 提供了多种 Korn Shell 二进制代码,这取决于安装的文件集:

/usr/bin/ksh – Korn Shell 88

/usr/bin/ksh93 – Korn Shell 93

/usr/dt/bin/dtksh – CDE Desktop Korn Shell 93

在创建新用户时,默认的 shell 是 /usr/bin/ksh,这是 Korn Shell 88。这也是根用户的默认 shell。

不幸的是,IBM AIX 提供的 Korn Shell 93 版本(/usr/bin/ksh93)没有提供 “SHOPT_AUDIT” 特性。要想在 AIX 系统上实现 Korn Shell 93 审计特性,系统管理员必须从 AT&T 下载并编译 Korn Shell 93 的最新版本。本文后面会介绍如何在 AIX 系统上下载、编译和实现 Korn Shell 93 “SHOPT_AUDIT” 特性。

如果不愿意亲自编译 Korn Shell 93,可以在 http://www.mtxia.com/css/Downloads/Scripts/Korn/ksh93.att.audit.bin 找到包含 “SHOPT_AUDIT” 特性的 Korn Shell 93 的预编译 IBM AIX 二进制代码。

如果下载了 ksh93.att.audit.bin 二进制代码,那么我建议使用以下命令把它复制到 AIX 系统上的文件 “/usr/bin/ksh93.att” 并设置权限集:

cp  ksh93.att.audit.bin  /usr/bin/ksh93.att
chown  bin:bin  /usr/bin/ksh93.att
chmod  0555  /usr/bin/ksh93.att
   

不要覆盖 /usr/bin/ksh93 上现有的 Korn Shell 93 二进制代码,因为以后的 AIX 系统更新可能会修改这个文件。

Korn Shell 93 的下载和编译过程

打开 The KornShell Command And Programming Language 网站(http://www.kornshell.com)并单击 Software:

图 1. 单击 “Software”

KornShell 93 的审计功能

单击链接 The Official AT&T Release of KornShell 93:

图 2. 单击 “Official AT&T Release”

KornShell 93 的审计功能

在 Software Download Packages 页面上,单击链接 this copy of the License:

图 3. 单击 “this copy of the License”

KornShell 93 的审计功能

阅读许可协议并复制许可协议底部的一行:I accept www.opensource.org/licenses/cpl。

图 4. 复制许可协议底部的一行

KornShell 93 的审计功能

返回到 Software Download Packages 页面并单击软件包 INIT。

图 5. 单击软件包 “INIT”

KornShell 93 的审计功能

下载 INIT 的最新 BASE SOURCE 文件。

图 6. INIT 的 BASE SOURCE

KornShell 93 的审计功能

这时会显示一个授权窗口。在 user 框中,输入前面保存的文本(见 图 4)I accept www.opensource.org/licenses/cpl。在 password 框中,输入一个点号(.)。

图 7. 授权页面

KornShell 93 的审计功能

返回到 Software Download Packages 页面并单击软件包 ast-ksh。

图 8. 单击软件包 “ast-ksh”

KornShell 93 的审计功能

下载 “ast-ksh” 的最新 BASE SOURCE 文件。

图 9. 下载 ast-ksh 的 BASE SOURCE

KornShell 93 的审计功能

这时会显示一个授权窗口。在 user 框中,输入前面保存的文本(图 4),I accept www.opensource.org/licenses/cpl。在 password 框中,输入一个点号(.)。

图 10. 授权页面

KornShell 93 的审计功能

下面的过程假设执行命令的系统包含 GNU C 编译器 gcc 的近期版本,而且系统运行 AIX 5.3。这些过程没有在其他配置上测试过。

从 AT&T 网站下载文件,创建一个用来存储源代码的目录,在这个目录中解压文件。然后,在解压文件的目录中运行以下命令:

创建一个 shell 变量 CC,它的值是 gcc 二进制代码的完整路径文件名:

export CC="/usr/bin/gcc"

创建一个 shell 变量 URL,它的值是 AT&T 下载网站的 URL:

URL="http://www.research.att.com/sw/download"

运行 package 命令,设置在本地系统上编译的 “INIT” 基本包源代码:

bin/package authorize "I accept
www.opensource.org/licenses/cpl" password "." setup source ${URL} INIT

运行 package 命令,设置在本地系统上编译的 “ast-ksh” 包源代码:

bin/package authorize "I accept www.opensource.org/licenses/cpl" password "." setup
source ${URL} ast-ksh

运行 package 命令,更新在本地系统上编译的 “INIT” 包源代码:

bin/package authorize "I accept www.opensource.org/licenses/cpl"
   password "." flat setup
source ${URL} INIT

运行 package 命令,更新在本地系统上编译的 “ast-ksh” 包源代码:

bin/package authorize "I accept www.opensource.org/licenses/cpl"
   password "." flat setup
source ${URL} ast-ksh

提到这一点似乎有点儿多余;但是,在编译方面有一个差异。如果需要重新编译所有东西,那么仅仅删除 *.o 和 *.a 是不够的;还需要删除除了 “bin” 之外的所有目录,然后再次运行前面的 “bin/package authorize” 命令。

现在修改 “SHOPT_AUDIT” 选项来启用这个特性。这需要编辑以下位置上的 Makefile:

vi src/cmd/ksh93/Makefile

把 “SHOPT_AUDIT” 的值由 “0” 改为 “1” 来启用 Korn Shell 93 审计特性:

SHOPT_AUDIT == 1

在解压文件的顶层目录中运行 “package make” 来编译 Korn Shell 93:

bin/package make

另一种下载和编译过程

除了使用图形 Web 浏览器下载 Korn Shell 93 源代码包之外,还可以使用基于字符的 Web 浏览器 “wget” 下载源代码包。这个过程假设在将要下载源代码包的 AIX 系统上安装了 “wget” 二进制代码:

在自己的用户主目录中创建一个 bin 目录:

test -d bin || mkdir bin

创建一个 shell 变量 URL,它的值是 AT&T 下载网站的 URL:

URL="http://www.research.att.com/sw/download"

创建一个 shell 变量 url,它的值是 AT&T 下载网站的 URL,并在末尾加上二进制文件名 “package”:

url=${URL}/package

使用 wget 命令下载 “package” 二进制文件,如下所示:

(wget -O bin/package $url||curl $url||hurl $url) > bin/package

设置 “package” 二进制文件的权限,让当前用户可以执行它:

chmod +x bin/package

创建一个 shell 变量,其中包含 AT&T 下载网站所需的用户名:

U="I accept www.opensource.org/licenses/cpl"

运行 package 命令,设置在本地系统上编译的 “INIT” 基本包源代码:

bin/package authorize "${U}" password "." setup source ${URL} INIT

运行 package 命令,设置在本地系统上编译的 “ast-ksh” 包源代码:

bin/package authorize "${U}" password "." setup source ${URL} ast-ksh

运行 package 命令,更新在本地系统上编译的 “INIT” 包源代码:

bin/package authorize "${U}" password "." flat setup source ${URL} INIT

运行 package 命令,更新在本地系统上编译的 “ast-ksh” 包源代码:

bin/package authorize "${U}" password "." flat setup source ${URL} ast-ksh

现在修改 “SHOPT_AUDIT” 选项来启用这个特性。这需要编辑以下位置上的 Makefile:

vi src/cmd/ksh93/Makefile

把 “SHOPT_AUDIT” 的值由 “0” 改为 “1” 来启用 Korn Shell 93 审计特性:

SHOPT_AUDIT == 1

在解压文件的顶层目录中运行 “package make” 来编译 Korn Shell 93:

bin/package make

编译完成之后,把新的 “ksh” 二进制文件复制到文件 “/usr/bin/ksh93.att” 并设置所有者和权限:

cp  src/ksh93/arch/aix/bin/ksh  /usr/bin/ksh93.att
chown  bin:bin  /usr/bin/ksh93.att
chmod  0555  /usr/bin/ksh93.att

Korn Shell 93 审计配置过程

刚才在启用 “SHOPT_AUDIT” 选项的情况下编译的 Korn Shell 93 二进制代码需要在每个系统上针对要审计的每个用户进行配置。配置指定把审计信息存储在什么地方 —— 在每个系统上本地存储,或者远程存储在另一个系统上。默认的配置文件是 /etc/ksh_audit,可以通过修改 makefile 文件 src/cmd/ksh93/Makefile 中的 SHOPT_AUDITFILE 值改变这个文件名。修改这个值需要重新编译。

配置文件 /etc/ksh_audit 应该包含定义审计信息存储位置的一行记录,然后是要审计的每个用户的 UID 号,这些用户执行的命令会被存储在指定的位置。配置文件记录行包含一个存储位置以及一个或多个 UID 号。下面是一个配置记录行示例:

/tmp/ksh_audit.out;201;202;207;251;330

这个配置记录行指定文件 /tmp/ksh_audit.out 作为审计信息的存储位置,并指出要对具有 UID 号 201、202、207、251 和 330 的用户进行审计。字段分隔符是一个分号(“;”)。

存储在 /tmp/ksh_audit.out 文件中的审计记录如下所示:

201;1194497953;/dev/pts/1; ls
201;1194497954;/dev/pts/1; pwd
202;1194497955;/dev/pts/1; ls -alrt
207;1194497958;/dev/pts/1; ls -alrt /tmp/*.out
251;1194497963;/dev/pts/1; cat /tmp/ksh_audit.out
251;1210561980;/dev/pts/0; ls
207;1210561983;/dev/pts/0; pwd
330;1210561986;/dev/pts/0; ls -alrt /tmp/ksh*
202;1210561994;/dev/pts/0; cat /tmp/ksh_audit.out
330;1212266429;/dev/pts/2; set -o emacs
201;1212266437;/dev/pts/2; set -o vi

同样,字段分隔符也是一个分号(“;”)。第一个字段是执行这个命令的用户的 UID 号。第二个字段是日期和时间(自 epoch 以来的秒数)。第三个字段是执行命令的 tty,最后一个字段是用户执行的命令。

通过使用 Korn Shell 93 连网功能,可以把审计信息存储到任何远程位置。这样就可以把审计信息存储在一台只允许审计人员访问的中央服务器上。例如,下面的配置记录行指定一个远程系统上的 “syslog” 网络端口(514)。

/dev/udp/10.1.1.25/514;278;288;289;290

这个配置记录行指定的远程位置由 IP 地址 “10.1.1.25” 和网络端口 “514” 标识。与 UID 号 278、288、289 和 290 相关联的用户的审计信息将发送到这个远程位置。

远程 syslog 守护进程存储的审计记录如下所示:

May 31 22:26:34 10.1.1.33 278;1212287194;/dev/pts/4; pwd
May 31 22:26:35 10.1.1.33 278;1212287195;/dev/pts/4; df
May 31 22:26:36 10.1.1.33 278;1212287196;/dev/pts/4; du
May 31 22:26:38 10.1.1.33 278;1212287198;/dev/pts/4; ps -ef
May 31 22:26:51 10.1.1.33 278;1212287211;/dev/pts/4; exit
May 31 22:27:28 10.1.1.33 288;1212287248;/dev/pts/4; ls
May 31 22:27:33 10.1.1.33 290;1212287253;/dev/pts/4; ps -ef
May 31 22:27:34 10.1.1.33 288;1212287254;/dev/pts/4; pwd
May 31 22:27:37 10.1.1.33 289;1212287257;/dev/pts/4; df
May 31 22:27:37 10.1.1.33 288;1212287257;/dev/pts/4; du

这些 “syslog” 记录的格式取决于正在监听网络连接的 syslog 守护进程的配置。在这个示例中,每个记录包含月份、月的日期、时间、建立网络连接的系统的 IP 地址,然后是 Korn Shell 审计信息。上面的记录代表从 IP 地址为 10.1.1.33 的系统发送来的 Korn Shell 审计信息。

下面的脚本示例可以把审计信息转换为以逗号分隔值(CSV)的文件格式。这个脚本假设审计信息存储文件是 /tmp/ksh_audit.out。它读取 UID 号并根据 /etc/passwd 文件找到相关联的用户名。

#!/usr/bin/ksh93.att
PWDFILE="/etc/passwd"
AUDFILE="/tmp/ksh_audit.out"
print -- "username,uid,seconds,tty,command"
while IFS=";" read UID SEC TTY CMD
do
  unset U
  while IFS=":" read USR PWD NBR REM
  do
    [[ "_${UID}" == "_${NBR}" ]] && U="${USR}" && break
  done < "${PWDFILE}"
  print -- "${U},${UID},${SEC},${TTY},${CMD}"
done < "${AUDFILE}"

结束语

Korn Shell 93 审计特性提供了一个便于使用、配置和维护的用户审计系统。可以使用这个特性对 AIX 系统上所有用户(包括系统管理员)的活动进行监视、跟踪、记录和审计。审计信息可以存储在只允许审计人员访问的远程系统上,很容易使用标准的 AIX 工具进行处理。由于系统管理和用户访问日益全球化,这个特性越来越必要了。为了保证业务连续性,必须对所有管理员和用户的活动进行审计,他们也必须认识到他们的活动会被审计。对命令进行逐一审计的组织策略有助于增强系统的完整性、可靠性和业务连续性。

Tags:KornShell 审计 功能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接