📄 使用winbind在windows nt与unix间进行统一登录.txt
字号:
作者:studyboy
email: studyboy@21cn.com
日期:8/19/2001 3:04:37 PM
本文出自: http://6bytes.com/meaculpa 编译:meaculpa (2001-05-31 15:00:00)
7.1. 概要
7.2. 介绍
7.3. Winbind的功能
7.3.1. 使用目标
7.4. winbind如何工作
7.4.1. Microsoft远程过程调用
7.4.2. 名字服务切换
7.4.3. 可插式验证模块
7.4.4. 用户及组ID的分配
7.4.5. 缓存结果
7.5. 安装及配置
7.6. 限制
7.7. 结语
7.1. 概要
在异种计算机环境中通过统一登录来集成UNIX和Windows NT系统长期以来一直是人们追求的目标。我们向你推荐一个称为winbind的Samba组件来解决统一登录的问题。它在UNIX上实现了微软的RPC调用、可插式验证模块和名字服务切换,通过这些功能可以使NT域用户能在UNIX主机上以UNIX用户身份进行操作。本文对winbind系统进行了描述,解释了它所提供的功能以及配置和内部工作原理方面的问题。
--------------------------------------------------------------------------------
7.2. 介绍
大家都知道UNIX和Windows NT系统使用不同的技术和方式来表示用户和组信息。这就使得集成这两种系统变得更加困难。
现在常用的方法之一,就是在两种系统上创建相同的用户账号,并使用Samba在两者之间提供文件和打印服务器。但是这种方法还不是很完美,因为在一大堆机器上维护账号是件麻烦事儿,而且在两种系统间使用两套口令既容易引起同步问题,又使用户感到很混乱。
于是,我们就把UNIX主机的统一登录问题划分成三个小问题来看:
获得Windows NT用户和组信息
验证Windows NT用户
为Windows NT用户更改口令
最理想的情况是,所使用的方法应该可以解决以上所有的问题,并且无须在UNIX主机上复制信息,也无须使系统管理员在维护这两种系统的用户及组信息时产生额外的负担。winbind系统提供了一套解决上述三个问题简单而漂亮的方案。
--------------------------------------------------------------------------------
7.3. Winbind的功能
winbind把一台UNIX主机变成一个完全的域成员,这样就可以统一管理UNIX和NT上的账号了。这时,这台UNIX主机将可以查看NT的用户及组信息,就好象这些信息是UNIX本地的一样,同时,使用户可以在纯UNIX环境里象使用NIS+一样的来使用NT域。
最后实现的结果是,当UNIX主机向操作系统查询任何用户或组名时,该查询都会被发往指定域中的NT域控制器。因为winbind通过系统低层(使用C库中的NSS名字解析模块)重定向了该查询,而这对NT域控制器来说是完全透明的。
UNIX主机上的用户可以把NT用户及组名当作“本地”账号来用,还可以把文件的属主改成NT域用户,甚至可以用一个域用户的身份登录到UNIX主机并运行一个X-Window会话。
使用winbind要当心的唯一问题,就是用户名和组名使用DOMAIN\user和DOMAIN\group这样的形式,这是winbind所必须的,因为它要用这种形式来检测重定向查询的目标域控制器,并考虑信任域的问题。
另外,winbind还利用了可插式验证模块(PAM)通过NT域向任何使用PAM的应用程序提供验证服务。这就解决了系统间的口令同步问题,因为所有口令都保存在一个单一的位置上(域控制器中)。
--------------------------------------------------------------------------------
7.3.1. 使用目标
winbind的服务目标是那些要把UNIX工作站或服务器加到现有NT域结构的机构。这些机构可以利用winbind在无须维护单独账号结构的情况下配置UNIX工作站,这就减少了向NT结构中添加UNIX工作站的管理费用。还有,使用winbind可以把基于UNIX的设备环境集成到基于微软系统的域结构中去。
--------------------------------------------------------------------------------
7.4. winbind如何工作
winbind系统是按客户机/服务器结构设计的。一个持续运行的winbindd进程监听一个UNIX套接字,并等待请求的到达。这些请求是由运行NSS和PAM的客户机产生的,服务器按序对其进行处理。
下面详细描述winbind的实现技术。
--------------------------------------------------------------------------------
7.4.1. Microsoft远程过程调用
在过去的两年中,Samba开发小组的各位成员已经对微软的远程过程调用系统(MSRPC)进行了分析!在Windows NT主机上,很多与网络有关的操作都使用了这套系统,如远程管理、用户验证以及打印假脱机。虽然,一开始对该系统的分析工作只是为了有助于在Samba中实现主域控制器功能,但是,同时又产生了大量有其它用途的代码。
winbind使用各种MSRPC调用来处理域用户和组信息,并以此获得个别用户或组的详细情况。MSRPC调用还可以用于验证NT域用户并更改它们的口令。winbind向NT主域控制器直接查询用户及组信息,并把这些NT的账号信息映射到UNIX的用户名和组名上。
--------------------------------------------------------------------------------
7.4.2. 名字服务切换
名字服务切换(NSS)是很多UNIX操作系统所具有的功能。使用它可以从不同的资源中解析系统信息,如主机名、邮件别名和用户信息等。例如,单独的UNIX工作站可以从一系列保存在本地系统上的平面文件中解析系统信息;而网络工作站则可以先从本地文件中获得系统信息,再参考NIS数据库查询用户信息或从DNS服务器查询主机信息。
在解析UNIX用户名和组时,使用NSS应用编程接口的winbind就象一个系统信息源。而另一方面,它通过使用MSRPC调用获得NT服务器的信息,并使用上述接口提供一套新的账号信息表。使用这套标准UNIX库调用的好处是,只要在运行winbind的UNIX主机上查阅一次用户和组信息,就可以象在本地一样查看NT域及其受托域在内的所有用户和组信息。
NSS主要的控制都包含在/etc/nsswitch.conf文件中。当一个UNIX应用程序产生一个查询请求时,C库就会在该文件中查找与所请求之服务类型相匹配的行。例如,当查询用户和组信息时,就使用“passwd”这个服务类型。对指定服务类型的进一步查找则按其配置次序进行,例如,如果passwd配置行为:
passwd: files example
那么标准C库首先装入模块/lib/libnss_files.so,然后才是/lib/libnss_example.so。从这里可以看出,它会依次动态地进行装载,然后使用模块调用解析器功能来尝试对请求进行解析,完成之后就把结果返回给应用程序。
使用NSS接口,winbind可以很方便地与操作系统结合。我们要做的只是把libnss_winbind.so放到/lib/目录中,并在/etc/nsswitch.conf文件的适当位置添加“winbind”,到时候C库就会调用winbind去解析用户名和组名了。
--------------------------------------------------------------------------------
7.4.3. 可插式验证模块
可插式验证模块(PAM)是一套对验证和授权技术进行抽象化的系统。使用PAM模块,可以为不同的系统应用指定不同的验证方法,而无须重新编译这些应用。另外,还可以使用PAM实现特殊的授权策略。例如,系统管理员可以限制用户在登录控制台时使用本地口令文件,在进行网络登录时使用NIS数据库。
winbind使用验证管理和口令管理这两种PAM接口把NT用户集成到UNIX系统中。这样,NT用户就可以由合适的主域控制器进行验证,然后登录到UNIX主机中,之后,这些用户就可以更改他们的口令,并使更改立即在主域控制器上生效。
PAM的一组配置文件位于/etc/pam.d/,它们用于各种验证服务。当应用程序产生一个验证请求时,PAM代码就会查找这些配置文件,以便决定按什么样的次序装载哪些模块来执行验证核查。利用PAM的这种多接口形式可以很方便地为winbind添加新的验证服务。只须把pam_winbind.so模块拷贝到/lib/security/目录中,并更新配置文件,使相关的服务通过winbind来进行验证。详情请参考PAM文档。
--------------------------------------------------------------------------------
7.4.4. 用户及组ID的分配
当在Windows NT中建立一个用户或组账号时,系统就为之分配一个数字关系符(RID),而UNIX则在一定的数字范围内使用合适的值产生uid和gid。winbind要做的就是对这两种标识符进行互相转换,它在UNIX系统可用的uid和gid范围中寻找可用于保存NT用户和组账号的值。当首次解析NT用户时,就把该范围内可用的下一个uid值分配给他,对于解析组账号也是同样操作。今后,winbind就可以把NT账号完全映射到UNIX账号了。winbind把映射结果保存在tdb数据库中,保证了映射操作的可靠性。
--------------------------------------------------------------------------------
7.4.5. 缓存结果
持续运行的系统会产生大量的用户及组账号查询。为了使这些查询不影响网络流量,winbind使用了一种缓存机制,这种机制是基于PDC所提供的SAM序列号的。winbind把PDC返回的用户及组账号信息和序列号一起缓存起来,只要修改了用户或组账号信息,NT就会把对应的序列号增值,如果winbind发现一个缓存过的序列号过期了,就再向PDC发出请求,并把返回结果与缓存项进行比较,如不匹配,就丢弃缓存信息,直接向PDC要求更新。
--------------------------------------------------------------------------------
7.5. 安装及配置
安装winbind最简单的方法就是使用Samba镜像站提供的工具包了,它位于站点的pub/samba/appliance/目录中。这些工具包向你提供了处于snapshots阶段的Samba源代码,以及具备完整功能的winbind二进制程序。由于winbind需要少量的Samba_TNG代码,而Samba_TNG还处于开发阶段,因此安装起来就要比普通的Samba版本稍微复杂一点。
完成安装之后最好读一下winbindd(8)手册页,它提供了完整的配置信息及配置样本。
--------------------------------------------------------------------------------
7.6. 限制
在当前版本中,winbind还存在一些限制,我们希望在将来的版本中克服这些限制:
winbind现在还只有Linux版,当然要把它移植到其它操作系统是完全可能。要实现这样的目标,需要其它操作系统中的C库支持“名字服务切换”和“可插式验证模块”,而对大多数UNIX系统来说,这两样通常都是可以获得的。
winbind在对两种系统的标识符进行映射时并没有使用什么更好的算法,它是根据未映射的用户及组账号的次序来看的。如果包含映射信息的文件有问题或被破坏的话,它很难对其进行恢复。
现在,winbind的PAM模块还无法对NT用户设置的可登录工作站及登录时间限制进行记账。
在对winbind的源代码进行编译时要花很长时间,因为它要组合两个Samba分支的源代码。正在考虑的解决方法是,在主分支代码中提供所有必须的功能。
--------------------------------------------------------------------------------
7.7. 结语
winbind系统通过使用“名字服务切换”、“可插式验证模块”以及适当的MSRPC调用向UNIX系统提供了对NT域用户的无缝集成,减少了使用混合系统的网络管理负担。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -