使用 PAM 框架,可以在多种验证服务中进行选择。可以将 pam_unix 或 pam_ldap 与 LDAP 结合使用。
建议使用 pam_ldap,因为它的灵活性更强,支持更强大的验证方法并且能够使用帐户管理功能。
如果未对 pam.conf(4) 文件进行过更改,则缺省情况下,pam_unix 功能处于启用状态。
Solaris 已经删除了 pam_unix 模块而且将不再支持它。但是,通过一组其他服务模块提供了等效或更强的功能。因此,在本指南中,pam_unix 是指等效的功能,而不是指 pam_unix 模块本身。
pam_unix 遵循传统的 UNIX 验证模型,如下所述。
客户机从名称服务检索用户的加密口令。
系统提示用户输入其口令。
对用户的口令进行加密。
客户机比较这两个经过加密的口令,确定用户是否通过了验证。
口令必须以 UNIX crypt 格式存储,而不应采用任何其他加密方法(包括明文)存储。
名称服务必须能够读取 userPassword 属性。
例如,如果将凭证级别设置为 anonymous,则任何人都必须能够读取 userPassword 属性。同样,如果将凭证级别设置为 proxy,则代理用户必须能够读取 userPassword 属性。
pam_unix 与 sasl 验证方法 digest-MD5 不兼容,因为 Sun Java System Directory Server 要求以明文形式存储口令,以便使用 digest-MD5。而 pam_unix 要求以 crypt 格式存储口令。
实现 pam_ldap 时,用户使用在 pam_ldap 的 serviceAuthenticationMethod 参数(如果存在的话)中定义的验证方法绑定到 LDAP 服务器。否则,将使用 authenticationMethod。
如果 pam_ldap 能够使用用户的标识和提供的口令绑定到服务器,它将对用户进行验证。
启用 pam_ldap 帐户管理之后,所有用户在每次登录系统时都必须提供口令。进行验证时必须提供登录口令。因此,使用 rsh、rlogin 或 ssh 等工具进行的不基于口令的登录将会失败。
pam_ldap 不读取 userPassword 属性。因此,除非其他客户机正在使用 pam_unix,否则无需授予对 userPassword 属性的读取访问权限。此外,pam_ldap 不支持 none 验证方法。因此,您必须定义 serviceAuthenticationMethod 或 authenticationMethod 属性,以便客户机可以使用 pam_ldap。有关更多信息,请参见 pam_ldap(5) 手册页。
如果使用 simple 验证方法,则 userPassword 属性在传输过程中可被第三方读取。
下表概述了 pam_unix 和 pam_ldap 之间的主要区别。
表 9–5 pam_unix 与 pam_ldap
|
pam_unix |
pam_ldap |
---|---|---|
口令的发送方式 |
使用 passwd 服务验证方法 |
使用 passwd 服务验证方法 |
新口令的发送方式 |
加密 |
不加密(除非使用 TLS) |
新口令的存储方式 |
crypt 格式 |
Sun Java System Directory Server 中定义的口令存储方案 |
是否需要读取口令? |
是 |
否 |
更改口令之后,是否与 sasl/digest-MD5 兼容 |
否。口令不以 clear 形式存储。用户无法进行验证。 |
是。只要将缺省的存储方案设置为 clear,用户就可以进行验证。 |
可以使用 passwd(1) 更改口令。要更改口令,用户必须对 userPassword 属性具有写入权限。请记住,对于此操作,passwd-cmd 的 serviceAuthenticationMethod 会覆盖 authenticationMethod。在传输过程中可能未对当前的口令进行加密,具体取决于所使用的验证方法。
对于 pam_unix,新的 userPassword 属性在写入 LDAP 之前会使用 UNIX crypt 格式进行加密和标记。因此,无论使用哪种验证方法绑定到服务器,在传输过程中都会对新口令进行加密。有关更多信息,请参见 pam_authtok_store(5) 手册页。
从 Solaris 10 软件发行版开始,pam_ldap 不再支持口令更新。以前建议使用的带有 server_policy 选项的 pam_authtok_store 现已取代pam_ldap 口令更新功能。使用 pam_authtok_store 时,新口令将以明文形式发送到 LDAP 服务器。因此,为了确保保密性,请使用 TLS。如果不使用 TLS,新的 userPassword 很容易被窥探。 如果使用 Sun Java System Directory Server 设置未标记的口令,则该软件会使用 passwordStorageScheme 属性对口令进行加密。有关 passwordStorageScheme 的更多信息,请参见所用 Sun Java System Directory Server 版本的管理指南中有关用户帐户管理的章节。
设置 passwordStorageScheme 属性时,需要考虑以下配置问题。如果 NIS、NIS+ 或另一台使用 pam_unix 的客户机将 LDAP 用作系统信息库,则 passwordStorageScheme 必须为 crypt。此外,如果在 Sun Java System Directory Server 上结合使用 pam_ldap 和 sasl/digest-MD5,则必须将 passwordStorageScheme 设置为 clear。