(上一篇)

DCOM实现分布式应用(四)

安全性

使用网络来将应用系统分布化是一个挑战,这不仅是因为带宽的物理限制以及一些潜在的问题,而且也由于它产生一些诸如关系到客户间、组件间以及客户和组件之间的安全问题。因为现在的许多操作可以被网络中的任何一个人访问,所以对这些操作的访问应该被限制在一个高级别上。

如果分布式开发平台没有提供安全支持,那么每一个分布式应用就必需完成自己的安全机制。一种典型的方法是用某种登录的方法要求用户通过用户名及密码的检测,这些一般来说都是被加密了的。应用系统将通过用户数据库或者有关目录来确认以上用户身分,并返回动态的标识符以便用户以后用来进行方法调用。以后每次涉及到调用有安全检查的方法时,用户都需要通过这种安全认证。每个应用系统都要存储和管理许多用户名和密码,防止用户进行未授权的访问,管理密码的改动以及处理在网络上传递密码而带来的危险。 因此分布式平台必需提供一个安全性框架来确切地区分不同的用户或者不同组的用户以便系统或应用有办法知道谁将对某组件进行操作。DCOM使用了Windows NT提供的扩展的安全框架。Windows NT提供了一套稳固的内建式安全模块,它用来提供从传统的信用领域的安全模式到非集中管理模式的复杂的身份确认和鉴定机制,极大地扩展了公钥式安全机制。安全性框架的中心部分是一个用户目录,它存储着用来确认用户凭据(用户名、密码、公钥)的必要信息。大多数并非基于Windows NT平台的系统提供了相似或相同的扩展机制,我们可以使用这种机制而不用管此平台上用的是哪种安全模块。大多数DCOM的UNIX版本提供了同Windows NT平台相容的安全模块。

安全性设置

DCOM无需在客户端和组件上进行任何专门为安全性而做的编码和设计工作就可以为分布式应用系统提供安全性保障。就象DCOM编程模型屏蔽了组件的位置一样,它也屏蔽了组件的安全性需求。在无需考虑安全性的单机环境下工作的二进制代码能够在分布式环境下以一种安全的方式工作。 DCOM通过让开发者和管理员为每个组件设置安全性环境而使安全性透明。就象Windows NT允许管理员为文件和目录设置访问控制列表(ACLs)一样,DCOM将组件的访问控制列表存储起来。这些列表清楚地指出了哪些用户或用户组有权访问某一类的组件。使用DCOM的设置工具(DCOMCNFG)或者在编程中使用Windows NT的registry以及Win32的安全函数可以很简单地设置这些列表。 只要一个客户进程调用一个方法或者创建某个组件的实例,DCOM就可以获得使用当前进程(实际上是当前正在执行的线程)的用户的当前用户名。Windows NT确保这个用户的凭据是可靠的,然后DCOM将用户名正在运行组件的机器或进程。然后组件上的DCOM用自己设置的鉴定机制再一次检查用户名,并在访问控制列表中查找组件(实际上是查找包含此组件的进程中运行的第一个组件)。如果此列表中不包括此用户(既不是直接在此表中又不是某用户组的一员),DCOM就在组件被激活前拒绝此次调用。这种安全性机制对用户和组件都完全是透明的,而且是高度优化的。它基于Windows NT的安全框架,而此框架是Windows NT操作系统中最经常被使用(也是最完美的!)的部分,对每一个对文件或者诸如一个事件或信号的同步线程的访问都需要经过相同的访问检查。Windows NT能够和同类的操作系统以及网络操作系统竞争并超过它们的事实可以显示出这种安全性机制是多么有效。

图13 安全性设置

DCOM提供了一个非常有效的缺省的安全性机制,它使开发员能够在无需但心任何安全性问题的情况下开发出安全的分布式应用。

对安全性的编程控制

对某些应用系统来说,仅仅是组件级的访问控制列表是不够的,因为一个组件中的某些方法是只能被特定的用户访问的。

例子:一个商务结算组件可以有一个方法用来登录新事务,以及另一个方法用来获得已经存在的事务。仅仅只有财务组(“Accounting”用户组)的成员才能够添加新事务,同时仅仅只有高级管理人员(“Upper Management”用户组)才能查看事务。

正如上一部分所说,应用系统能够通过管理自己的用户数据库以及安全凭据来达到本身的安全。然而,在一个标准的安全框架下工作将会给最终用户带来更多的好处。没有一个统一的安全性框架时,用户需要为他们所使用的每一个应用记住和管理相应的登录凭据。开发者为每一个组件靠虑到安全性问题。

DCOM通过加入Windows NT提供的非常灵活的安全性标准将安全性用户化的要求简化为对某些特定组件和应用的需求。

使用DCOM安全性标准的应用达到上面例子所要求的有所选择安全性呢?当一个方法调用来到时,组件要求DCOM提供客户的身份。然后根据其身份,被调用线程就仅仅执行允许该客户执行的安全对象中的某些操作。接着组件就试着访问诸如登录字之类的安全对象,这些对象中有一个访问控制列表ACL,如果访问失败,说明客户不在ACL中,组件就拒绝方法调用。通过根据所调用的方法的不同而选择的不同的登录字,组件就能够用一种非常简单,但却灵活而有效的方式提供有选择的安全性。

图14 使用登录字的安全接口

组件也能够很轻易地得到客户的用户名并且利用它在自己的数据库中查找有关的许可和策略。这一策略使用了Windows NT的安全性框架(密码/公钥,传输线上加过密的密码等等)所提供的鉴定机制。应用系统无需为储存密码和其它有关的敏感信息担心。新版本的Windows NT将提供一个扩展的目录服务,它允许应用系统将用户信息存储到Windows NT的用户数据库中。 DCOM的做法更为灵活。组件能够要求不同级别的加密以及不同级别的鉴定,同时可以在自己进行身份认证时阻止组件使用自己的凭据。

Internet上的安全性

设计在Internet上公作的应用系统时需要面对两个主要问题。

下一篇