简介: 学会如何使用 Tivol Access Manager for Operating Systems (TAMOS) 保护 IBM® DB2® 资源。TAMOS 是用于保护 UNIX® 和 Linux® 操作系统上资源的 IBM 解决方案。本文将通过两个现实场景向您演示如何使用 TAMOS 设置策略来保护 DB2 资源。您可以将这些场景用作构造数据库的企业级安全解决方案的基础。
每个数据库管理系统都必须能保护数据不会受到未授权访问和修改。这也适用于 IBM DB2 Database for Linux, UNIX, and Windows® (DB2)。DB2 使用几种机制,如认证、授权和权限,来满足这种需求。尽管如此,对于保护资源(如进程、容器、系统文件),DB2 基本还是依靠本机操作系统。
Tivoli Access Manager for Operating System (TAMOS) 是使用集中策略管理方法来保护 UNIX 或 Linux 操作系统上资源的 IBM 解决方案。因此,可以用它在本机操作系统提供的保护之外再额外增加一层保护。
以下是本文涵盖的主题:
- TAMOS 简介及安装配置概述
- 如何使用授权策略保护 DB2 资源
- 揭示数据库管理系统以及其安装的本机操作系统潜在安全漏洞的现实场景,以及如何使用 TAMOS 堵上这些漏洞
- 如何跟踪并监控 DB2 进程的操作
从企业角度看,UNIX 和 Linux 操作系统显现出几个安全问题。TAMOS 通过为 UNIX 和 Linux 提供操作系统级访问控制来解决这些问题。TAMOS 集中策略管理技术可防止未授权访问并监控对敏感数据和资源的访问。
TAMOS 是作为一系列 UNIX 或 Linux 操作系统的后台进程、内核扩展以及控制文件实现的。TAMOS 内核扩展拦截所有系统调用。然后名为 pdosd 的集中授权后台进程在系统调用时参与所有授权决策。
图 1 的流程图演示了 TAMOS 如何通过在内核层面拦截系统调用来实现安全层。
在开始安装和配置 IBM TAMOS 之前,系统必须首先满足几个先决条件。但是,这些先决条件的详细描述已超出本文范围。想要了解详细信息,请查阅 “TAMOS Installation Guide”,在本文末尾的 参考资料 部分有链接。
可以通过四种方式安装 TAMOS:
- 多平台 GUI 模式安装
- 多平台控制台模式安装
- 多平台静默模式安装
- 本机安装
本节的例子描述第一种安装 — 如何执行 TOMOS 的 GUI 模式安装,此处是安装在 Linux 服务器上。本文后续章节的例子假设仍使用 Linux 操作系统。
在开始交互式 GUI 模式安装前,先找到 TAMOS CD 并运行名为 install_amos_platform 的程序,其中 platform 表示操作系统的名字。程序通过启动安装向导来开始安装进程。对于本文中描述的在 Linux 系统上安装的例子,安装程序就是 ./install_amos_linux。
图 2 和 3 是 TAMOS 安装向导的屏幕截图示例。
随着向导继续,将会进行 TAM Runtime 的安装和配置,使用适当的 LDAP 服务器。
静默安装模式使用响应文件安装,不需要交互。本机安装通过使用操作系统提供的本机软件安装工具安装。您还可以参考 “TAMOS Installation Guide”,这在本文末尾的 参考资料 一节中有链接,其中有详细的安装指导。
本小节讲解如何在进行本机安装后,在 UNIX 或 Linux 操作系统上配置 TAMOS。使用 Installshield multiplatform. 进行安装时,TAMOS 已在安装过程中配置。但是,如果进行本机安装,安装后还需配置 TAMOS。
在本机安装后用于配置 TAMOS 的命令是 pdoscfg。以下是在初始配置中必须指定的配置选项:
- branch — 系统订阅的策略组
- suffix — 创建 TAMOS 关联用户所需的用户注册后缀
- registry_ssl_cacert — TAM 用户注册服务器证书
- admin_name — Tivoli Access Manager 管理员姓名
- admin_pwd — Tivoli Access Manager 管理员密码
[root@Server~]#pdoscfg -registry_ssl_cacert /ldapcert.arm -branch Server.in.ibm.com \ -suffix o=ibm,c=in -admin_name administrator -admin_pwd password |
关于详细配置指导,请参阅 “TAMOS Administration Guide”,在本文末尾 参考资料 一节中有链接。
术语 DB2 资源 指的是安装 DB2 的操作系统中所包含的 DB2 资源、容器、系统文件等。TAMOS 使用各种访问控制如 Access Control Lists (ACLs) 和 Protected Object Policies (POPs) 来保护这些资源。它使用在策略数据库中创建对象的静态模式来保护它们。要保护的每个 DB2 资源必须在策略数据库中显式创建为对象,而且必须有一个 ACL/POP 与之连接。
下面的例子演示如何使用 TAMOS 访问控制来防范欺骗行为:
拥有 UNIX 或 Linux 机器上所有权限的根用户试图切换身份到 DB2 实例用户(例如,db2ins95)并篡改某些DB2进程。这样 TAMOS 将进行保护。TAMOS 通过提供代理资源提供保护代理操作的方法。首先创建一个对象。
以下是创建对象的语法:
Object create /OSSEAL//Resource "Description" ispolicyattachable yes|no
因此,在上例中,可以使用清单 2 中的命令为代理资源创建对象。
pdadmin sec_master> object create /OSSEAL/Server.in.ibm.com/Surrogate/User/db2ins95 \ "SurrogateUser" 0 ispolicyattachable yes |
然后可以使用清单 3 中的命令来创建一个策略,禁止根用户将用户身份切换到 db2ins95。
pdadmin sec_master> acl show surr-acl ACL Name: surr-acl Description: Entries: User sec_master TcmdbsvaBRl User root T |
以上 ACL 显示根用户未被赋予代理权限位 “G”。现在可使用清单 4 中的命令将策略应用到对象上以便执行。
pdadmin sec_master> acl attach /OSSEAL/Server.in.ibm.com/Surrogate/User/db2ins95 surr-acl |
现在,如果根用户试图将身份更改为 DB2 实例用户,将不被允许,如清单 5 所示。
[root@Server ~]# whoami root [root@Server ~]# su - db2ins95 su: cannot set user id: Operation not permitted |
本小节的示例演示了如何创建对象以及应用策略。尤其是,演示了如何通过控制根用户能否切换到 DB2 实例用户来保护 DB2 资源。这种控制根帐户使用的能力是 TAMOS 的一项关键特性。
本小节将演示 TAMOS 如何帮助解决 DB2 用户遇到的两个现实问题。
有 DB2 用户报告曾遇到过由于 SIGKILL (kill -9) 信号被送到 db2sysc 进程而导致实例崩溃的情况。当 kill -9 信号被送到 db2sysc,必然会发生 DB2 实例崩溃。但是,生产系统实例崩溃对业务有严重影响。本小节中的例子将演示这种类型的场景。
假设有个 DB2 实例名叫 db2ins95。开始时,输入 ps 命令,如清单 6 所示,列出 db2ins95 实例的 DB2 进程。
[db2ins95@Server ~]$ ps -ef | grep db2 root 7970 7929 0 12:32 pts/2 00:00:00 su - db2ins95 db2ins95 7971 7970 0 12:32 pts/2 00:00:00 -bash db2ins95 8380 1 0 12:39 pts/2 00:00:00 /home/db2ins95/sqllib/bin/db2bp 7971A2077 5 A root 8587 1 0 12:45 pts/2 00:00:00 db2wdog 0 db2ins95 8588 8587 0 12:45 pts/2 00:00:00 db2sysc 0 root 8589 8588 0 12:45 pts/2 00:00:00 db2ckpwd 0 root 8590 8588 0 12:45 pts/2 00:00:00 db2ckpwd 0 root 8591 8588 0 12:45 pts/2 00:00:00 db2ckpwd 0 root 8592 8588 0 12:45 pts/2 00:00:00 db2pmd 0 db2ins95 8593 8588 0 12:45 pts/2 00:00:00 db2gds 0 db2ins95 8594 8588 0 12:45 pts/2 00:00:00 db2licc 0 db2ins95 8595 8588 0 12:45 pts/2 00:00:00 db2ipccm 0 db2ins95 8596 8588 0 12:45 pts/2 00:00:00 db2resync 0 db2ins95 8598 8588 1 12:45 pts/2 00:00:00 db2acd 0 ,0,0,0,1,0,0,0,897d44 ,14,1e014,2,0,1,11fd0,0x11f90000,0x11f90000,1610000,100004,2,478009 db2ins95 8617 7971 0 12:45 pts/2 00:00:00 ps -ef db2ins95 8618 7971 0 12:45 pts/2 00:00:00 grep db2 root 14366 1 0 Mar19 ? 00:00:25 /opt/ibm/db2/V9.1/bin/db2fmcd |
下一步,将用户连接到 SAMPLE 数据库,如清单 7 所示。
[db2ins95@Server ~]$ db2 "connect to sample" Database Connection Information Database server = DB2/LINUX 9.1.5 SQL authorization ID = DB2INS95 Local database alias = SAMPLE [db2ins95@Server ~]$ db2 list tables Table/View Schema Type Creation time ------------------------------- --------------- ----- -------------------------- ACT DB2INS95 T 2010-03-22-12.37.09.890866 ADEFUSR DB2INS95 S 2010-03-22-12.37.13.858864 CL_SCHED DB2INS95 T 2010-03-22-12.37.09.641766 DEPARTMENT DB2INS95 T 2010-03-22-12.37.09.654181 DEPT DB2INS95 A 2010-03-22-12.37.09.716163 EMP DB2INS95 A 2010-03-22-12.37.09.749817 EMPACT DB2INS95 A 2010-03-22-12.37.09.887997 EMPLOYEE DB2INS95 T 2010-03-22-12.37.09.717494 EMPMDC DB2INS95 T 2010-03-22-12.37.15.079208 EMPPROJACT DB2INS95 T 2010-03-22-12.37.09.876485 |
清单 8 显示正在向 db2sysc 进程发出 kill -9,并且 DB2 实例正在崩溃。
清单 8. kill -9 发送到 db2sysc 导致实例崩溃
[db2ins95@Server ~]$ kill -9 8588 [db2ins95@Server ~]$ db2 list tables SQL1224N The database manager is not able to accept new requests, has terminated all requests in progress, or has terminated your particular request due to a problem with your request. SQLSTATE=55032 [db2ins95@Server ~]$ db2 connect to SAMPLE SQL1032N No start database manager command was issued. SQLSTATE=57019 |
清单 9 是实例崩溃后 db2diag.log 文件中的结果条目示例。这些条目显示,发生实例崩溃是由于用户或应用程序发送了 SIGKILL。
2010-03-22-12.49.14.993973-300 I39299G722 LEVEL: Error PID : 8587 TID : 3086112448 PROC : db2wdog 0 0 INSTANCE: db2ins95 NODE : 000 FUNCTION: DB2 UDB, oper system services, sqlossig, probe:10 MESSAGE : Sending SIGKILL to the following process id DATA #1 : signed integer, 4 bytes -8588 CALLSTCK: [0] 0x0276568D sqlossig + 0x117 [1] 0x0132313A sqloWatchDogMain + 0x20E [2] 0x0132192A sqloRunInstance + 0xCE [3] 0x0804D450 DB2main + 0x6DC [4] 0x0804CD6C main + 0x24 [5] 0x04938DF3 __libc_start_main + 0xD3 [6] 0x0804CCB1 _Z21sqlePdbProcessRequestP11sqkfChannelPv + 0x1C1 [7] 0x00000000 ?unknown + 0x0 [8] 0x00000000 ?unknown + 0x0 [9] 0x00000000 ?unknown + 0x0 |
下面您将看到 TAMOS 如何帮助您防范上述场景。
首先,在 TAMOS 对象空间中为 db2sysc 进程创建一个对象,作为文件资源,如清单 10 所示。
pdadmin sec_master> object create /OSSEAL/Server.in.ibm.com/File/home/db2ins95\ /sqllib/adm/db2sysc "Db2 process" 3 ispolicyattachable yes |
下一步,如清单 11 所示,创建一个策略,不赋给 DB2 实例用户 db2ins95 和根用户结束进程的权限。
pdadmin sec_master> acl create db2-acl pdadmin sec_master> acl modify db2-acl set user root T[OSSEAL] pdadmin sec_master> acl modify db2-acl set user db2ins95 T[OSSEAL] |
现在 ACL 已定义成不赋给 DB2 实例用户 db2ins95 和根用户结束权限位(即 “k”)。最后一步是将策略应用到对象上,如清单 12 所示。
pdadmin sec_master> acl attach /OSSEAL/Server.in.ibm.com/File/home/db2ins95\ /sqllib/adm/db2sysc db2-acl |
再次输入 ps 命令列出正在运行的 DB2 进程。将清单 13 的输出示例与清单 6 比较。
[db2ins95@Server root]$ ps -ef | grep db2 root 14366 1 0 Mar19 ? 00:00:29 /opt/ibm/db2/V9.1/bin/db2fmcd root 28330 28278 0 23:42 pts/1 00:00:00 su db2ins95 db2ins95 28331 28330 0 23:42 pts/1 00:00:00 bash root 28426 1 0 23:42 pts/1 00:00:00 db2wdog 0 db2ins95 28427 28426 0 23:42 pts/1 00:00:00 db2sysc 0 root 28428 28427 0 23:42 pts/1 00:00:00 db2ckpwd 0 root 28429 28427 0 23:42 pts/1 00:00:00 db2ckpwd 0 root 28430 28427 0 23:42 pts/1 00:00:00 db2ckpwd 0 root 28431 28427 0 23:42 pts/1 00:00:00 db2pmd 0 db2ins95 28432 28427 0 23:42 pts/1 00:00:00 db2gds 0 db2ins95 28433 28427 0 23:42 pts/1 00:00:00 db2licc 0 db2ins95 28434 28427 0 23:42 pts/1 00:00:00 db2ipccm 0 db2ins95 28435 28427 0 23:42 pts/1 00:00:00 db2resync 0 db2ins95 28437 28427 0 23:42 pts/1 00:00:00 db2acd 0 ,0,0,0,1,0,0,0,897d44 ,14,1e014,2,0,1,11fd0,0x11f90000,0x11f90000,1610000,130003,2,590009 db2ins95 28629 28434 0 23:47 pts/1 00:00:00 db2agent (idle) 0 db2ins95 28951 28331 0 23:52 pts/1 00:00:00 ps -ef db2ins95 28952 28331 0 23:52 pts/1 00:00:00 grep db2 |
现在,如清单 14 所示,当 db2ins95 或根用户试图结束 db2sysc 进程,将不被允许,这是因为已经使用了 TAMOS 添加了合适的控制和策略。
[db2ins95@Server root]$ kill -9 28427 bash: kill: (28427) - Operation not permitted |
TAMOS 还可帮助您追踪是谁发出结束命令,这将能帮您确定谁是真正的罪魁祸首。追踪功能将在本文稍后讨论。
DB2 支持人员还记录了这样的问题报告:用户在进行操作系统维护活动时意外删除表空间容器。某些情况下,这会导致大量数据丢失。这种场景还会导致表空间不可访问。本小节描述的例子演示了这种场景。
案例 1 中的例子假设您有一个名为 db2ins95 的 DB2 进程。首先,将用户连接到 SAMPLE 数据库,如清单 15 所示。
[db2ins95@Server root]$ db2 "connect to sample" Database Connection Information |
如清单 16 所示,用名为 cont1 的容器创建表空间。
[db2ins95@Server root]$ db2 "create tablespace tbsp1 managed by database \ using (file '/test/cont1' 1000)" DB20000I The SQL command completed successfully. |
在 cont1 表空间中创建名为 table1 的表,如清单 17 所示。
[db2ins95@Server root]$ db2 "create table table1(id int, name varchar(10)) in tbsp1" DB20000I The SQL command completed successfully. |
然后向表中插入示例数据,如清单 18 所示。
db2ins95@Server root]$ db2 "insert into table1 values(1,'a'),(2,'b'),(3,'c')" DB20000I The SQL command completed successfully. [db2ins95@Server root]$ db2 "select * from table1" ID NAME ----------- ---------- 1 a 2 b 3 c 3 record(s) selected. [db2ins95@Server test]$ db2 connect reset DB20000I The SQL command completed successfully. |
为了演示表空间被意外删除将会发生什么,输入 rm 命令,如清单 19 所示。
[root@Server ~]# rm -rf /test/cont1 |
现在,如清单 20 所示,当用户重新连接到数据库,并试图访问表时,将接收到错误消息。
[db2ins95@Server test]$ db2 connect to sample Database Connection Information Database server = DB2/LINUX 9.1.5 SQL authorization ID = DB2INS95 Local database alias = SAMPLE [db2ins95@Server test]$ db2 "select * from table1" ID NAME ----------- ---------- SQL0290N Table space access is not allowed. SQLSTATE=55039 |
表空间将不可访问,这是因为容器被删除,插入的所有数据都丢失了!
现在您将看到 TAMOS 如何帮助您在上述情形下防止用户删除容器,从而保护系统免于潜在的数据丢失。
本例中,容器只是简单的操作系统文件资源,在 /test 目录下。如清单 21 所示,在文件资源下创建 /test/cont1 对象。
pdadmin sec_master> object create /OSSEAL/Server.in.ibm.com/File/test/cont1 \ "Containers" 2 ispolicyattachable yes |
下一步,创建一个防止用户删除对象的策略,如清单 22 所示。
pdadmin sec_master> acl create cont-acl pdadmin sec_master> acl modify cont-acl set user root T[OSSEAL]rwx pdadmin sec_master> acl show cont-acl ACL Name: cont-acl Description: Entries: User sec_master TcmdbsvaBRl User root T[OSSEAL]rwx |
现在,ACL 已定义成赋予根用户读、写和执行权限,但没有删除权限位(即 “d”)。最后一步是将策略应用到对象上,如清单 23 所示。
pdadmin sec_master> acl attach /OSSEAL/Server.in.ibm.com/File/test/cont1 cont-acl |
现在,如清单 24 所示,当根用户试图删除容器时,将不被允许。TAMOS 已防止了由于删除容器造成的数据意外丢失。
[root@Server ~]# rm -rf /test/cont1 rm: cannot remove `/test/cont1': Permission denied |
本小节描述如何使用 TAMOS 来监控或追踪对 DB2 进程和资源的操作。
例如,在以上案例 1 描述的场景中,kill -9 发送到 db2sysc 进程。如果这种情况将要发生,您也许希望知道谁该对此负责。TAMOS 所提供的合适的粒度级别的审计能提供帮助。
TAMOS 提供三种级别审计:
- 用户
- 资源
- 全局
下面的例子演示了资源级审计。假设如案例 1 所述,清单 25 中的策略位于您的系统中。
pdadmin sec_master> object show /OSSEAL/Server.in.ibm.com/File/home/db2ins95\ /sqllib/adm/db2sysc Name: /OSSEAL/Server.in.ibm.com/File/home/db2ins95/sqllib/adm/db2sysc Description: Type: 3 (Executable) Is Policy Attachable: Yes Extended Attributes: Attached ACL: db2-acl Attached POP: Attached AuthzRule: Effective Extended Attributes: Effective ACL: db2-acl Effective POP: Effective AuthzRule: |
有了这些策略,ACL db2-acl 保护 db2sysc 不被结束。
现在,如清单 26 所示,创建 POP,并指定被保护对象上所有动作都被审计。这将告诉 TAMOS 当 SIGKILL 发送给资源时进行追踪,而不管用户是否允许结束 db2sysc 进程。
pdadmin sec_master> pop create track-user pdadmin sec_master> pop modify track-user set audit-level all |
通过在对象上添加 POP 将策略应用到对象上,如清单 27 所示。
pdadmin sec_master> pop attach /OSSEAL/Server.in.ibm.com/File/home/db2ins95\ /sqllib/adm/db2sysc track-user |
输入 ps 命令来列出正在运行的 DB2 进程,如清单 28 所示。
[db2ins95@Server root]$ ps -ef | grep db2 root 14366 1 0 Mar19 ? 00:00:33 /opt/ibm/db2/V9.1/bin/db2fmcd root 19969 18669 0 11:59 pts/2 00:00:00 su db2ins95 db2ins95 19970 19969 0 11:59 pts/2 00:00:00 bash db2ins95 20051 19970 0 11:59 pts/2 00:00:00 ps -ef db2ins95 20052 19970 0 11:59 pts/2 00:00:00 grep db2 db2ins95 29476 1 0 00:05 ? 00:00:00 /home/db2ins95/sqllib/bin/db2bp 29389A2077 root 30183 1 0 00:14 ? 00:00:00 db2wdog 0 db2ins95 30184 30183 0 00:14 ? 00:00:00 db2sysc 0 root 30185 30184 0 00:14 ? 00:00:00 db2ckpwd 0 root 30186 30184 0 00:14 ? 00:00:00 db2ckpwd 0 root 30187 30184 0 00:14 ? 00:00:00 db2ckpwd 0 |
现在,如清单 29 所示,用户试图结束 db2sysc 进程,但操作不允许。
[db2ins95@Server root]$ kill -9 30184 bash: kill: (30184) - Operation not permitted |
清单 30 是试图发送 kill -9 命令后在 audit.log 文件中的结果条目示例。尽管不允许用户结束进程,该动作仍然被追踪且不会被忽视。可以使用 TAMOS 提供的 pdosaudview 工具查看审计报告。
*** START OF NEW RECORD *** Timestamp Tue 23 Mar 2010 11:59:25 AM EST Audit Event An authorization decision was made. Audit View Deny Audit Reason Resource Audit Audit Resource Type File Accessor Name root Accessor Effective Name db2ins95 Audit Action Check Access Audit Permissions kill Audit Qualifier Checking resource access control policy. Policy Branch Name Server.in.ibm.com Protected Object Name File/home/db2ins95/sqllib/adm/db2sysc System Resource Name /home/db2ins95/sqllib/adm/db2sysc Accessor Process ID 19970 Running Program System Resource Name /bin/bash Audit Outcome Success Audit Uniqifier 0 |
以上记录显示,kill 发送给系统资源 /home/db2ins95/sqllib/adm/db2sysc。Accessor Effective 字段显示发送 kill 的是 db2ins95。
本文介绍了 IBM Tivoli Access Manager for Operating Systems (TAMOS) 解决方案。概括介绍了如何安装和调试 TAMOS,并演示了如何在 UNIX 和 Linux 操作系统上保护 DB2 进程和资源。一旦理解了 TAMOS 的概念,您就能在本机操作系统提供的保护之外为系统资源提供更好的保护。
原文链接:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1004securedb2tamos/index.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-671078/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15082138/viewspace-671078/