你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
oracle 基础(2)
 
1.3 保护其他可执行文件

背景
看看 $ORACLE_HOME/bin 目录中的其他可执行文件;有些看起来很熟悉,例如 sqlplus 或 lsnrctl(启动监听程序的实用工具);有些您可能并不熟悉。

其中一些文件(例如监听程序进程运行的实用工具 tnslsnr 或在 Oracle Intelligent Agent 中使用的 dbsnmp)最终用户不会直接接触到。 要正确保护这些文件,您必须了解它们的作用,从而采取相应的措施。

请记住,如果为文件设置了 SUID 位,则无论哪个用户运行该文件,该文件都在所有者的权限下运行,而不是在执行者的权限下运行。 您还应清楚,设置 SUID 是一种危险行为,不应给予鼓励。

还有一些文件将 SUID 设置为 on。 让我们将它们找出来。

$ cd $ORACLE_HOME
$ find . -type f \( -perm -2000 -o -perm -4000 \) -exec ls -l {} \; 

在 Oracle 数据库 10g 第 1 版和更高版本中,上述命令应仅返回以下可执行文件:

-rwsr-s--x    1 orasoft  dba      93300507 Jul 22 11:20 ./bin/oracleO
-r-sr-s---    1 root     dba             0 Jul  1 23:15 ./bin/oradism
-rwsr-s--x    1 orasoft  dba         94492 Jul 22 11:22 ./bin/emtgtctl2
-rwsr-s---    1 root     dba         18944 Jul 22 11:22 ./bin/nmb
-rwsr-s---    1 root     dba         20110 Jul 22 11:22 ./bin/nmo
-r-sr-sr-x    1 nobody   nobody      58302 Jul 22 11:23 ./bin/extjob

我们来看看这些文件是哪些:

程序

说明

./bin/oracleO

该文件是可执行文件“oracle”的副本。 当您使用重新链接命令重新编译 oracle 可执行文件时,旧版本将另存为 oracle0。 这是一个潜在的安全隐患;大多数 DBA 的忽略使其可能成为黑客的入侵途径。 因此,您应该采取措施删除这些权限。 最好的方法是让其没有任何权限:

$ chmod 0000 oracleO

现在,如果您查看权限:

$ ls -l oracleO
---------- 1 orasoft oinstall 248823320 Sep 15 13:27 oracleO

./bin/oradism

用于动态隐私共享内存。 可以在您的平台上使用。 并不是在所有情况下都出现。 如果出现,保持原样。

./bin/emtgtctl2

用于 Enterprise Manager Agent。 无需使用 SUID 设置它。 原因和“oracle”可执行文件一样。 删除权限。

$ chmod 0700 emtgtctl2

./bin/nmb

Oracle 10g 网格控制代理用其来收集目标服务器上的统计信息。 保持原样。

./bin/nmo

Oracle 10g 网格控制代理用其来收集目标服务器上的统计信息。 保持原样。

./bin/extjob

这是 EXTJOB(外部作业,可用来从企业管理器内部执行基于 OS 的程序)的可执行文件。 您应当给予注意。 您是否经常使用外部作业? 如果不是,那么您甚至不应该保留该可执行文件。 在这种情况下,您可以将其保留在目录中,但要更改权限和所有权关系。 所有者可以是 Oracle 软件所有者(本例为 orasoft),权限应该为 rwx------

$ chown orasoft:oinstall extjob
$ chmod 0700 extjob

可能还会存在另一个程序 extjobO,它是同一程序的先前编译。 该程序的权限也要改。

$ chown orasoft:oinstall extjobO
$ chmod 0000 extjobO

在 Oracle9i 数据库第 2 版中,您将发现另一个文件 ./bin/dbsnmp,它是 Oracle Intelligent Agent 可执行文件。 权限的设置如下:

-rwsr-s--- 1 root dba 2986836 Jan 26 2005 dbsnmp

该文件的问题是它需要 root 权限才能正常工作,因此必须将 SUID 位设置为 on。 但是,由于该文件的所有者是 root,因此黑客通常利用它以 root 身份获得访问。 最好的方法是消除它,或者将其所有者改为 Oracle 软件所有者,将权限设置为 700。您将失去一些功能,但是为了消除风险,这是值得的。

另一个要考虑的可执行文件是 tnslsnr,它是 Oracle 网络监听程序。 有两个可执行文件:

tnslsnr - 实际的监听程序可执行文件
lsnrctl - 用于管理监听程序(例如启动、停止等)的实用工具。

如果您查看权限:

$ ls -l *lsnr*
-rwxr-x--x   1 orasoft    oinstall    214720 Oct 25 01:23 lsnrctl
-rwxr-xr-x   1 orasoft    oinstall    214720 Oct  1 18:50 lsnrctl0
-rwxr-x--x   1 orasoft    oinstall   1118816 Oct 25 01:23 tnslsnr
-rwxr-xr-x   1 orasoft    oinstall   1118816 Oct  1 18:50 tnslsnr0

这些文件全都具有执行权限。 与可执行文件 oracleO 一样,通过重新链接 Oracle 软件创建新文件 tnslsnr 时,已有的文件被重命名为 tnslsnr0。 这样做是因为,如果需要回退该进程,可以将旧的可执行文件复制到新的可执行文件上。 因为是旧的可执行文件的副本,因此文件 tnslsnr0 可能包含原来的 tnslsnr 的功能。 lsnrctl0 也是一样。

策略
既然您了解了每个可执行文件的作用,让我们来看看您如何能够保护数据库基础架构。 大部分策略已经在前面部分的背景信息中进行了讨论。 因此,实际上,您的策略措施是:

  1. 删除不需要的文件(例如 lsnrctl0)的所有权限。
  2. 限制仅 Oracle 软件具有可执行文件的权限。
  3. 如果 Oracle 软件所有者启动进程,删除 SUID 位。

因此,您希望更改与监听程序相关的文件的权限,如下所示:

$ chmod 700 lsnrctl tnslsnr
$ chmod 000 lsnrctl0

验证结果。

$ ls -l *lsnr*
-rwx------   1 orasoft    oinstall    214720 Oct 25 01:23 lsnrctl
----------   1 orasoft    oinstall    214720 Oct  1 18:50 lsnrctl0
-rwx------   1 orasoft    oinstall   1118816 Oct 25 01:23 tnslsnr
----------   1 orasoft    oinstall   1118816 Oct  1 18:50 tnslsnr0

结论
从本例可得出以下几个结论:

  • 更改 oracleO 可执行文件对数据库的操作没有影响。 如果曾经遇到导致“oracle”可执行文件损坏的问题,最好的做法是将“oracleO”文件重命名为“oracle”。 若如此,请确保将权限重设为 700。对 lsnrctl0 和 tnslsnrctl0 文件也是如此。
  • 如果使用 Oracle 软件所有者用户 ID 作为企业管理器操作系统凭证,更改 emtgtctl2 权限将没有任何影响。 如果使用其他用户 ID(例如,不是 orasoft),则必须将 SUID 重设为原来的值,权限必须设为与原来一样。
  • 可执行文件 dbnsmp 由 Oracle Enterprise Manager Intelligent Agent 使用,但是仅延续到 Oracle9i 数据库第 2 版。此外,如果您使用 Oracle 软件所有者作为操作系统凭证,更改权限没有任何影响。 如果您使用其他用户 ID,则必须将权限重设为原来的值。
操作计划
  1. oracleOtnslsnr0lsnrctl0 的权限更改为 0000。
  2. tnslsnrlsnrctl 的权限更改为 0700。
  3. 您在企业管理器中是否使用外部作业?
    IF 没有 THEN 将 extjob 的权限更改为 0000
    ELSE
      extjob 的权限更改为 0700 并将所有者和组更改为 orasoft 和 oinstall(或任何 Oracle 软件所有者的用户和组)。
    END IF
  4.  
    IF 您运行在 Oracle9i 数据库上 THEN
      您是否使用 Oracle Intelligent Agent?
    IF 没有 THEN
      dbsnmp 的所有权更改为 orasoft
    将权限更改为 0700
    ELSE
      无需任何更改
    END IF


1.4 使用 umask

背景
正如所知,您可以使用 chmod 命令更改 *nix 中的权限。 但是,由于 chmod 仅在现有文件上工作,您如何确保以后创建的文件具有相同的权限?

为了说明这一点,假设您希望目录中的所有文件都具有权限 r--r--r--(或 444)。 通过发出以下命令很容易做到这一点:

$ chmod 444 *

现在在目录上创建一个没有内容的简单文件,查看它的权限。

$ touch a_file.txt
$ ls -l a_file.txt
-rw-r--r--   1 orasoft    dba        0 Oct 21 13:44 a_file.txt

对于所有者,权限设置为读写,对于组设置为读,对于其他用户设置为读(或者 644),而不是您预期的 444。为什么?

在新创建的文件上设置的确切权限由一个名为 umask 的特殊参数指定。 umask 是一个值集,从所有权限中减去该值集可以得到新文件的权限值。 例如,如果将 umask 设置为 777,从整体权限值 777 中减去该值,得到 000,即新文件没有任何权限。让我们来看一个示例:

$ umask 777
$ touch b_file.txt
$ ls -l ?_file.txt
-rw-r--r--   1 oracrmp    dba              0 Oct 21 13:44 a_file.txt
----------   1 oracrmp    dba              0 Oct 21 13:53 b_file.txt

请注意,文件 b_file.txt 的权限为 000 或 ---------。 此外,请注意,先前创建的文件 a_file.txt 仍然被设置为原来的权限。 将 umask 设置为 777 得到新文件的权限。

umask 是为 Oracle 将创建的不同文件设置权限的强大有效的方法。

策略
Oracle 软件所有者的整体 umask 为 022,因此文件所有者的权限为读写,所有其他用户的权限为读。 您可以将该内容放到用户的登录配置文件中,以便它随时生效。

Oracle 使用的文件有很多不同类型,数据文件、重做日志文件、跟踪文件等等。 数据文件可以预先知道,您可以轻松更改它们的权限,但是跟踪文件是在运行时生成的。 因此,您应该使用 umask 来确保这些跟踪文件没有暴露给任何外部用户,因为这些文件包含可能被黑客利用的各种机密信息。 例如,理论上,某人可以通过复制跟踪文件来窃取数据文件,并将其安装在单独的服务器上,调出数据库以窃取其内容。

为目录设置 umask,如下所示:

目录

说明

umask

初始化参数 background_dump_dest 指定的目录

某些跟踪文件和数据库警报文件都在此处生成。 权限应为 rw-------(仅 Oracle 软件所有者具有读写权限)。

0177

初始化参数 user_dump_dest 指定的目录

跟踪文件在此处生成。 权限应与上面相同。

0177

$ORACLE_HOME/rdbms/log

某些数据库日志文件在此处生成。 权限应与上面相同。

0177

$ORACLE_HOME/rdbms/audit

默认情况下,数据库审计的审计跟踪存储在此处,除非您已经设置了 audit_file_dest 初始化参数。 权限应与上面相同。 即使您有 DB 审计跟踪,某些通用事件(例如 SYSDBA 连接和数据库启动/关闭)始终在此处审计和放置。

0177

初始化参数 audit_file_dest 指定的目录

默认情况下,数据库审计的审计跟踪存储在此处,除非您已经设置了 audit_file_dest 初始化参数。 权限应与上面相同。

0177

结论
以这种方式设置 umask 可以防止某些开发人员访问会话跟踪文件,这些文件在 user_dump_dest 目录中生成并被传递到 tkprof 进行格式化。 因此,您可能希望仅在该目录上放松规则。

操作计划
  • background_dump_dest 上的 umask 更改为 0177
  • $ORACLE_HOME/rdbms/log 上的 umask 更改为 0177
  • $ORACLE_HOME/rdbms/audit 上的 umask 更改为 0177
  • audit_file_dest 上的 umask 更改为 0177
  • (可选)将 user_dump_dest 上的 umask 更改为 0177

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089