2007年11月23日星期五

认证方法

1. 信任认证

如果声明了 trust (信任)认证模式, 软件就假设任何可以联接到服务器的人都可以以任何他声明的用户, 这个方法应该用于那些在联接到服务器端口已经有足够系统层次保护的环境里.

trust 认证对于单用户工作站的本地联接是非常合适和方便的. 通常它本身并不适用于多用户环境的机器. 不过,即使在多用户的机器上,你也可以使用 trust, 只要你利用文件系统权限限制了对 postmaster 的套接字文件的访问.

trust 认证模式只有在你信任那些在配置文件里声明为 trust,允许联接到服务器上的所有机器上面的所有用户的时候才是合适的.风险比较大, 很少有理由使用 trust 作为任何除来自localhost(127.0.0.1) 以外的 TCP 联接的认证方式.

2. 口令认证

以口令为基础的认证方法包括 md5,crypt,和 password.这些方法操作上非常类似,只不过口令通过联接传送的方法不同.如果你担心口令被窃听("sniffing"), 那么 md5 比较合适,如果我们在开放的互联网上使用, 应该尽可能避免使用 password(除非你在联接上使用了 SSL, SSH,或者其他通讯安全的联接封装.)

MD5是将任意长度的字符串和128位的随机数字运算后生成一个16byte的加密字符串。因此窃听者抓住的是一团乱码。但是,这有一个问题:如果窃听者就用这团乱码去认证,还是可以认证通过。因为服务器将用户名密码MD5加密后得到的字符串就是那一团乱码,自然不能区别谁是合法用户。这叫重放攻击(replay attack)。为了防止重放攻击,采用摘要访问认证。在客户发送请求后,收到一个401(未授权)消息,包含一个Challenge。消息里面有一个唯一的字符串: nonce,每次请求都不一样。客户将用户名密码和401消息返回的挑战一起加密后传给服务器。这样即使有窃听,他也无法通过每次认证,不能重放攻击。 Http并不是一个安全的协议。其内容都是明文传输。因此不要指望Http有多安全。

3.Kerberos 认证

Kerberos 是一种适用于在公共网络上进行分布计算的工业标准的安全认证系统. 概括说来Kerberos系统是相当复杂(同样也相当强大)的系统.Kerberos FAQMIT 雅典娜计划 是个开始探索的好地方.你也可以去看看这篇介绍Kerberos是什么,它如何工作,你如何使用它的文章 The Moron's Guide to Kerberos, Version 2.0

现存在好几种 Kerberos 发布的源代码.

4.基于 Ident 的认证


身份(ident)认证方法的运做模式是使用一个映射文件列出许可的用户 和对应的用户的配对,然后通过检查客户端的操作系统用户名 以及判断许可的数据库用户名的方法来认证。判断客户端的用户名 是非常关键的安全点,根据连接类型的不同,它的实现方法也略有不同。

1) 透过 TCP/IP 的身份认证

"Identification Protocol(标识协议)"在 RFC 1413 里面描述.实际上每个类Unix的操作系统 都带着一个缺省时侦听113端口的身份服务器. 身份服务器的基本功能是回答类似这样的问题: "是什么用户从你的端口X初始化出来 联接到我的端口Y上来了?". 因为在建立起物理联接后,软件既知道 X 也知道 Y,因此它可以询问运行尝试联接的客户端的主机,并且理论上可以用这个方法判断发起联接的操作系统用户.

这样做的缺点是它取决于客户端的完整性:如果客户端不可信或者被攻击者攻破,而且它们可以在113端口上运行任何程序并且返回他们选择的任何用户的话,就无法认证了. 因此这个认证方法只适用于封闭的网络,这样的网络里的每台客户机 都处于严密的控制下并且数据库和操作系统管理员可以比较方便地 联系上.换句话说,你必须信任运行身份(ident)服务的机器.下面是警告:

身份标识协议并不适用于认证或者访问控制协议.

--RFC 1413


2) 透过本地套接字的身份认证

在支持用于 Unix 域套接字的SO_PEERCRED请求的系统上,(目前是 Linux, FreeBSD, NetBSD, 和 BSD/OS), 身份认证也可以用于局部联接.这个时候,使用身份认证不会增加安全风险;实际上这也是在这种系统上使用本地联接时的优选方法.

在没有 SO_PEERCRED 请求的系统上,身份认证只能通过TCP/IP连接获取。如果需要绕开这个限制,我们可以声明 localhost 地址 127.0.0.1,然后让连接指向这个地址。

3) Ident 映射

当使用以身份为基础的认证时,在判断了初始化联接的操作系统用户的名字后,软件判断他是否可以以他所请求的数据库用户的身份联接. 这个判断是由配置文件中设置的的身份映射控制的.

5. PAM 认证

这个认证类型操作起来类似 password, 只不过它使用 PAM(Pluggable Authentication Modules)作为 认证机制。 有关 PAM 的更多信息,请阅读 Linux-PAM页面 Solaris PAM 页面