GINA 与 pGINA——实现自定义的 Windows 用户身份认证

2010/05/03 | 01:08 | 分类:Windows开发 | 标签: | 599次阅读

  最近接触到一个 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 的一个良好范例。

还记得这些老 Linux 发行版吗?

2010/02/11 | 18:37 | 分类:Linux与开源 | 标签: | 1,321次阅读

  回家秀收藏。

还记得这些老 Linux 发行版吗?
  Turbo Linux 可谓让 Linux 走进中国的功臣之一。Turbolinux 公司较早地致力于 Linux 的国际化,并推出了包括简繁体中文在内的多种语言发行版。早期的中文 Linux 教程,无论大陆版还是港台版,几乎是言必称 Turbo。作为一家老牌国际公司,Turbolinux 至今仍在维护其发行版(目前最新版本为兼容 RHEL 5.4 的 GreatTurbo Enterprise Server 11.3),其在中国的部门则偏重于行业应用与教育培训,而桌面市场风光不再。无论如何,Turbolinux 公司相比诸多乘 Linux 之风而起的公司来说,其转型是平稳而成功的。

还记得这些老 Linux 发行版吗?
  蓝点 Linux(BluePoint Linux)曾是几个年轻的创业者打造的中文 Linux 传奇。上个世纪末,它凭借着“内核中文化”的理念,与 Turbo Linux 在中文市场一决高下,曾一度拿下大量国产品牌机的 OEM 订单。可惜蓝点的中文化方案最终没有与标准的 i18n 走到一起,创新的思路反而成了技术骂战的导火索。在历经了一系列技术与市场的变故之后,这个曾在 NASDAQ 上市的小公司先是放弃了 Linux 转做嵌入式,继而光环褪去,从人们的视野中逐渐消失。纪念蓝点,纪念那些执着的技术开拓者们。

还记得这些老 Linux 发行版吗?
  国内涉水 Linux 发行版的大型通用 IT 厂商中,最有名的当数联想了。2000 年,原联想软件事业部一度推出了幸福 Linux(Happy Linux)家用版、服务器版、嵌入式版全线产品,并在自己的部分 PC 产品中预装,以平衡品牌机操作系统的成本与版权。其重要特色之一是将其在 Windows 平台的代表作——“幸福之家”移植到了 Linux 平台。然而已经广泛接受盗版 Windows 的消费市场并不买联想的账,这个幸福 Linux 连同 Linux 版的幸福之家,很快便为 Windows XP 的登台让了路。

还记得这些老 Linux 发行版吗?
  世纪之交,国家开始重视国产核心软件的研发,一系列项目基金投向了基于开源代码的操作系统。这的确催生了红旗等几个掌握某些领域核心技术、推出了市场认可产品的 *NIX 厂商。而更多的厂商,如中标普华,则依赖于政府和相关行业的订单。还有一些发行版则是昙花一现,比如共创 Linux。在这种大环境下也难免出现少数涉嫌抄袭造假的尴尬案例。国产 *NIX 发行版最终谁主沉浮?技术因素(特别是中文化)早已不是核心问题,大众消费市场的神话也不复存在。这些挂靠国家科研项目发行版,恐怕比拼的是在中国特色软件环境下的做事能力了。

还记得这些老 Linux 发行版吗?
  其实当年想借 Linux 发家的不只是这些背景各异的厂商,一些盗版者也动起了 Linux 的脑筋。尽管开源且免费,但对于那个时期的国内互联网,速度和费用的劣势还是让盗版光盘抢占了自由软件发行渠道的一席之地。看看手头这张《PC 软件全接触——Linux 工具集》,涵盖了多少你似曾相识的软件呢?

  历史,就是在这样大浪淘沙。


  补遗(2010-2-25):

还记得这些老 Linux 发行版吗?
  今天幸运地淘到了这款号称是“首套中文 Linux 操作系统”的 Xteam Linux 1.0(中文名为“冲浪平台”)。成立于 1998 年的冲浪平台公司可以说是国内第一家专业 Linux 开发商,其名称显然来源于互联网刚刚进入中国时所流行的“网上冲浪”的说法。Xteam Linux 早已无人问津,不过转型之后的冲浪平台公司目前作为某香港上市企业的子公司,至今仍然存在。这好歹让 Xteam 的名字成为了“先驱”而非“先烈”的代名词。

Hadoop in China 2009 云计算大会

2009/11/16 | 23:45 | 分类:学科活动 | 标签: | 1,494次阅读

  Hadoop in China 2009 云计算大会昨天在我所成功举行。这个大会是由我们网络科学与技术重点实验室主办,并得到了 Yahoo! 等企业的支持与赞助。我作为会议的志愿者——并且幸运地是场内志愿者,听完了一层报告厅的所有演讲。
  参会的企业和研究机构都是国内外云计算领域的领先力量。尽管有的企业和 Hadoop 没有太大关系,但纷纷赶在这个机会来宣传自己在云计算相关方面的产品与成果。这也好,让一个偏专业的主题峰会变得更贴近 IT 企业和普通用户了。这也是本次大会敢于超越,并成功超越前两次 Hadoop in China Salon 规模的重要原因。
  徐老师在这次大会上一方面强调了开源软件和开源社区对于国内 IT 产业发展的重要意义;另一方面,也重申了他在第五届“大学计算机课程报告论坛”上对于现阶段计算机产业、计算机教育发展的期望与担忧
  包括我们实验室和清华大学在内的几个单位也在活动现场进行了产品与技术展示。不过这种场合下大家都善于把握好一个尺度,适当地把自己的实力笼罩在云里雾里,还要努力探测对手的虚实。

Hadoop in China 2009 云计算大会
鲁博士讲解云计算的秘密

  媒体方面,科学网对这次会议进行了在线文字直播。我坐在几位工作人员身后,赞叹速录和编辑人员娴熟的配合,更佩服其中那位向速录员进行同声传译的翻译。可惜科学网并不是那种擅长炒作的媒体,今天 google 并百度了一下,发现 Hadoop in China 2009 的风头全被其它转载的媒体抢去了;而科学网首页上昨天也不怎么显眼的链接今天则直接被其它“刷屏”的新闻淹没了。

Hadoop in China 2009 云计算大会
速录 MM 在会议之余不忘上 SNS 偷菜

  比较成功的宣传要算中国移动了,移动研究院黄晓庆院长有关启动“大云”的文章今天被各大网站转载。其实“大云”早在今年九月就已经低调发布了,但这套东西主要还是移动内部使用的,究竟是会给用户带来应用价值,还是会进一步巩固移动的垄断地位,还不好说。
  在会后的晚宴上,从西邮 Linux 出来的 VIP rhlei 大大据说认出了我,我可是他的 Blog 的长期订户呵,可惜当时没有交流。
  最后来秀一下 Yahoo! 提供的纪念品吧。布袋、马克杯、雨伞、大本、小本,还有 Logo 贴纸,看上去就差一瓶“这样紫啊”。这给新成立的 Yahoo! 北京全球研发中心做足了广告。

Hadoop in China 2009 云计算大会
Yahoo! ——杯中要是斟上“这样紫啊”就完美了

Imagoxy: A Picasa Image Proxy for Personal Website and Blog

2009/07/17 | 22:59 | 分类:Linux与开源 | 标签: | 2,180次阅读

Picasa had been banned in Mainland China yesterday. I don't know if it is temporary or persistent. Lots of pictures on my blog are stored in Picasa. Unlike Flickr, I found it difficult to replace domain name or IP to pass the URL/IP filter. So I choose another way: download pictures from Picasa server to my Godaddy host, and replace the picture links in my posts from Picasa to my host. I wrote Imagoxy, a tiny PHP toolkit and Imagoxy-WP, a wordpress plug-in to implement this automatically and dynamically. This mechanism will certainly apply additional overhead and occupy more bandwidth. However, it is sustainable for my small website. Experiment shows it works well with wordpress 2.8.1. I make it open-source under a BSD license and you can get it from SourceForge or WordPress Plugin page.

Security issues should be considered carefully before it being used in significant applications. Some measures had been taken, but I hope you to review my codes and eliminate the hidden dangers. If you are interested in Imagoxy, welcome to join the small project at SourceForge and contribute your codes! Thanks. :)

I do not profit from my open source works. But if you really think they are useful, you can click here.

Imagoxy Version 0.53 - Update: 2009/12/10
Imagoxy-WP Version 0.53 - Update: 2009/12/10

Imagoxy

Imagoxy ("image proxy") is a tiny PHP toolkit. It downloads pictures from remote server to local server and relocate corresponding http requests to the local one. It is used to access pictures when the remote server is banned or slow from the network of clients (e.g. Download pictures from Picasa on an unbanned US server and tranfer them to China's viewers where Picasa is banned sometimes).

Licensed under a BSD license.

Install:

1. Modify Imagoxy 'getimg.php' file:
* Set '$work_dir' to the location you wish Imagoxy works at.
* Set '$cache_dir' to the location you wish files downloaded to. (default is OK in most cases)
* Set '$error_file' as the file relocated to when access control denied. (default is OK in most cases)
* Set '$reffer_list' as the legal HTTP_REFERER prefix list.
* Set '$check_reffer_before_download' as whether to check HTTP_REFERER before downloading new picutre.
* Set '$check_reffer_before_show' as whether to check HTTP_REFERER before showing downloaded picutre.
* Set '$legal_pattern' as the legal file URL patterns. (default is for Picasa; you can add more)
2. Update the 'imagoxy' directory to your '$work_dir' and make the '$cache_dir' writable.
3. Configure and deploy Imagoxy front-ends such as Imagoxy-WP.

Usage:

1. [ http://www.example.com/imagoxy/getimg.php?s={original URL} ] In this format (we called 'Imagoxy URL'), the http request will be relocated to a file on local server which is downloaded from the original URL. You can embed the Imagoxy URL into your <img src="..."> label. 'http://' in original URL is omissible and the other protocols are not allowed. Notice: as a parameter, original URL should be url-encoded again even if it has been url-encoded. e.g. 'Pic%20A.jpg' -> 'Pic%2520A.jpg'.
2. [ http://www.example.com/imagoxy/getimg.php?u={encoded URL} ] Also does downloading and relocation. However, you should base64-encode, reverse and then url-encode the original URL. In PHP, these are done by 'urlencode(strrev(base64_encode($original_url)))'. This encoding method can pass the URL filter in certain regions.

Test:

You can write a html page with an Imagoxy URL in <img src="..."> label. Open it locally, you should see the '$error_file'; after uploading it to the server with the URL prefix in '$reffer_list', you will see the relocated picture correctly.

Enjoy it!

Imagoxy-WP

Imagoxy-WP is a wordpress front-end for Imagoxy. Imagoxy downloads pictures from remote server to local server and relocate corresponding http requests to the local one. It is used to access pictures when the remote server is banned or slow from the network of clients. Imagoxy-WP now converts Picasa URLs to local Imagoxy URLs, and you can also add your customed conversion.

Licensed under a BSD license.

Install:

1. Download Imagoxy. Imagoxy is available at https://sourceforge.net/projects/imagoxy/.
2. Configure and deploy Imagoxy on your server as Imagoxy's README file described.
3. Modify Imagoxy-WP 'imagoxy-wp.php' file:
* Set '$imagoxy_dir' to your Imagoxy location, which is the same as '$work_dir' in Imagoxy.
4. Upload Imagoxy-WP php file or the whole directory to your wordpress '/wp-content/plugins' directory.
5. Enable it in the dashboard.

After that, You will see:
<img src="http://lhX.ggpht.com/_WWW/XXX/YYY/ZZZ/sMMM/IMG_NNN.JPG" />
in your blog posts now becomes:
<img src="http://www.example.com/imagoxy/getimg.php?u=AABBCCDDEEFFGGHH" />
Since pictures are downloaded from your own server, it won't be banned then.

Enjoy it!

赞Unix-Center.Net的蒋清野先生

2009/04/12 | 22:07 | 分类:IT杂谈 | 标签: | 2,528次阅读

  下午参加了在我们研究生院举办的龙芯 & Linux周日体验活动。说实话,收益不大。本来想多了解一些龙芯的东西,去了才发现演讲成了几家赞助商的秀场。几个演讲的主题相对分散,一些演讲者事先准备并不充分,有效信息不多。
  活动中得到的最有意义的信息是:我用了两年的Unix-Center.Net原来是蒋清野先生一手创办的,并由他个人承担其每月数万元的机器托管和网络流量成本。我们不得不佩服蒋先生的做事风格。实现*NIX与开源技术平民化是他的理想。在具备了一定的经济实力之后,又有多少人能够真正实践这种公益的、不图回报的理想呢?况且推广*NIX技术本身不是一项面向弱势群众的、能直接带来社会效应的工作。然而蒋先生觉得只要能为*NIX与开源技术的初学者和爱好者们提供这样一种零成本的实验环境,就是在为这个领域尽己所能地添砖加瓦,这项工作就是有意义的。是的,我们看看开源与自由软件领域的诸位前辈,他们不都在通过无私的奉献来实现自己的梦想吗?我们需要那些为一个领域的发展提供基石的科研人员,同时也需要这些通过各种渠道使技术走出实验室、将理念变成现实、推动生产力发展的奉献者们。
  尽管Unix-Center.Net是一个沙盘,像一个游乐场(蒋先生的比喻),不能为生产性应用产带来直接的价值。但它为计算机专业学生、程序开发者和相关技术人员开辟了一条基于*NIX和开源技术的新思路,其潜在的、间接的影响力是不可估量的。

页面存档: 上页 1 2 3 下页