GINA 与 pGINA――实现自定义的 Windows 用户身份认证
最近接触到一个 Windows 平台下的开源项目――pGINA。鉴于网上没有较为完整的中文介绍,特在此推介一下。
要知道 pGINA 做什么,首先需要了解 Windows 的用户管理框架。相关资料推荐阅读 Microsoft Windows Internals,这里不再赘述,只给出我列的一张 Linux 与 Windows 用户管理中的对应技术表格供熟悉 Linux 的开发人员参考。其实 Windows 也像 Linux 一样,开放了用户身份认证与用户管理系统的接口,允许第三方如同开发 Linux PAM/NSS 那样,为 Windows 开发新的认证入口(GINA)与认证包(Windows Authentication Packages)。
Linux 与 Windows 用户管理中的对应技术 | ||
Linux | Windows | |
登录程序 * | login | Winlogon |
认证入口 | PAM (Pluggable Authentication Modules) | GINA (Graphical Identification and Authentication) |
默认认证模块 | pam_unix.so | msgina.dll |
用户系统入口 # | NSS (Name Service Switch) | LSASS (Local Security Authority Subsystem Service) |
默认本地用户系统 | files (/etc/passwd, /etc/group, /etc/shadow) | SAM (Security Account Manager) |
常用目录用户系统 | LDAP (Lightweight Directory Access Protocol) | AD (Active Directory) |
* 仅以 Linux 本地 shell 登录和 Windows 本地图形界面登录为例 | ||
# NSS 与 LSASS 功能并不相同,只在用户认证的流程中的位置相似 |
然而,我们能在网上找到的开源的 GINA 模块和认证包的相关资料远不如 PAM/NSS 丰富,找到的第三方实现几乎都是软硬件厂商用于接入自己基础设施的闭源专有软件(例如某些笔记本电脑的指纹认证)。这一方面可能出于微软商业风格与 Linux 开源风格的差异;而单从技术上看,微软“大而全”的 API 风格相比 Linux 的 KISS 风格对于简单的示例性或改进性开发无疑是一道壁垒。完整的 GINA 模块需要实现数十个接口,而系统中一次只能配置一个有效的 GINA,不像 PAM 那样可以通过配置文件灵活地组合使用只关注特定功能(认证、账户、密码或会话)的小模块。因此连微软自己的文档也告诫开发者,在编写新的 GINA 模块之前看看能不能用 Hook 之类偏 Hack 的技术实现自己所需的功能。
正是由于 GINA 开发的繁琐性,才蕴生了开源的 pGINA 框架。pGINA 本身是一个 GINA 模块,它提供了一致的图形界面,并将 GINA 的数十个接口二次抽象为几个简单易懂的接口(密码认证、密码修改、会话 Hook 等),允许二次开发人员利用这些接口开发插件,实现自定义的认证交互程序。pGINA 只适用于以密码作为认证凭证,在这一前提下,其功能可以涵盖 GINA 接口的主要功能点(认证管理、密码管理、屏幕锁定等),而且图形界面交互的开发也由必须变为可选。因此,使用 pGINA 将在很大程度上简化自定义用户认证机制的开发。对于最终用户,只需要安装 pGINA 并配置指定的插件,即可使用新的用户名/密码源取代 Windows 默认的 SAM 用户名/密码认证。
pGINA 的作者和其他志愿者已提供了十余种开源的 Windows 用户认证插件,例如基于既有 LDAP、MySQL、FTP、SSH 用户系统的认证,甚至基于 Slashdot 账号的认证等,可供开发者学习或修改。对于认证通过但在本地系统中尚不存在的用户,pGINA 的默认行为是为之自动创建新账户,这在一些公共计算机中比较有用。
pGINA 针对 Windows XP 的 1.X 版本代码已在 2006 年底稳定冻结,我测试多个插件(包括自己实验开发的插件)工作正常。而针对 Windows Vista 和 Windows 7 的 2.X 版本目前正在持续开发中(Alpha 阶段),我测试发现部分旧插件不能正确运行。
有关 pGINA 的 GINA 模块、插件、源代码和开发资源,可在其 SourceForge.net 页面下载。pGINA 给出了 M$ Style to KISS Style 的一个良好范例。
建议继续学习:
- 一个登陆认证系统 (阅读:3647)
- Apache用户认证方法汇总 (阅读:2620)
- 探索MySQL源代码-客户端连接过程和用户认证体系 (阅读:2322)
- 通过中间件来实现应用的认证 (阅读:1605)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Jian Lin 来源: 林健的BLOG
- 标签: GINA pGINA 认证
- 发布时间:2010-05-04 10:20:51
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 图书馆的世界纪录
- [54] 如何拿下简短的域名
- [54] android 开发入门
- [52] Oracle MTS模式下 进程地址与会话信
- [52] Go Reflect 性能
- [49] 【社会化设计】自我(self)部分――欢迎区
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 程序员技术练级攻略
- [35] 视觉调整-设计师 vs. 逻辑