|
首先,从smb.conf(5)里面对这个指令的说明中,我们可以知道:默认情况下,使用ldap作为后端的pdc会通过nss来查询用户/组信息。比如,看看一个用户是那些组的成员,但是按照Unix的默认处理,需要枚举整个/etc/group文件,或者ldap里面的对应数据,这样子效率会比较低。
在大型环境中,通过使用ldapsam:trusted可以获得更好的性能,这样samba会绕过nss来查询用户/组的成员关系。
手册也中还强调:要实现这种功能,需要把完整的unix账号信息存储在ldap中对应的posixAccount/posixGroup中,并且每个这样的对象需要通过sambaSamAccount 对象类来存储samba的信息。
似乎都说清楚了,可是,我们实现的时候还是有些问题:
1.是否已经不再需要nss了?
答案是:NO,我们仍然需要nss的支持,所以/etc/nsswitch.conf中仍然要指明使用ldap. ldapsam:trusted查询用户/组关系的时候是不需要nss了,但是,系统还需要对从samba登录的用户作权限检查等,它们位于samba之外,所以还需要nss.
2.为什么用smbldap-populate建立出来的root账户,在启用了ldapsam:trusted之后不能登录了呢?
这个问题,其实手册也中已经说清楚了:ldap要有完整的Unix用户/组信息才可以使用ldapsam:trusted.可是,看看你的root账户的gidNumber,它的值是0!但是smbldap-populate建立出来的目录树中并没有这样一个group。
所以,你若是:
smbclient -L localhost -U root
通常会得到下面的错误信息:
[2009/02/18 11:51:26, 2] lib/smbldap.c:smbldap_open_connection(786)
smbldap_open_connection: connection opened
[2009/02/18 11:51:26, 2] passdb/pdb_ldap.c:init_sam_from_ldap(545)
init_sam_from_ldap: Entry found for user: root
[2009/02/18 11:51:26, 0] auth/auth_sam.c:check_sam_security(353)
check_sam_security: make_server_info_sam() failed with 'NT_STATUS_UNSUCCESSFUL
'
[2009/02/18 11:51:26, 2] auth/auth.c:check_ntlm_password(319)
check_ntlm_password: Authentication for user [root] -> [root] FAILED with err
or NT_STATUS_UNSUCCESSFUL
解决方法:自己在ldap中建立一个gidNumber为0的group,或者把root的gidNumber改为一个现有的。 |
|