在使用 GlibC 2.17 的 CentOS 机器上工作时,我正在努力寻找一种禁用远程目录上本地用户组查找的配置。
我知道组查找的设计是搜索所有目录,但我认为添加group: file [SUCCESS=return]
可以解决这个问题。
但看起来,事实并非如此:(
然后我想也许initgroups
可以提供帮助,但似乎不起作用initgroups: files [SUCCESS=return] nis ldap
我的nsswitch.conf
passwd: compat ldap
shadow: files
group: files nis ldap
hosts: files dns nis
protocols: files
rpc: files
services: files
initgroups: files [SUCCESS=return] nis ldap
internal_getgrouplist
这是glibc函数的代码片段
80 if (__nss_initgroups_database == NULL)
81 {
82 if (__nss_database_lookup2 ("initgroups", NULL, "",
83 &__nss_initgroups_database) < 0)
84 {
85 if (__nss_group_database == NULL)
86 no_more = __nss_database_lookup2 ("group", NULL, DEFAULT_CONFIG,
87 &__nss_group_database);
88
89 __nss_initgroups_database = __nss_group_database;
90 }
91 else
92 use_initgroups_entry = true;
93 }
...
133 /* For compatibility reason we will continue to look for more
134 entries using the next service even though data has already
135 been found if the nsswitch.conf file contained only a 'groups'
136 line and no 'initgroups' line. If the latter is available
137 we always respect the status. This means that the default
138 for successful lookups is to return. */
139 if ((use_initgroups_entry || status != NSS_STATUS_SUCCESS)
140 && nss_next_action (nip, status) == NSS_ACTION_RETURN)
141 break;
142
143 if (nip->next == NULL)
144 no_more = -1;
145 else
146 nip = nip->next;
147 }
看起来它应该尊重initgroups
配置,但事实似乎并非如此。我尝试从 nsswitch.conf 中完全删除,group:
但没有成功。id
本地用户的命令仍然挂起
有什么办法可以绕过这个吗?
就我而言,如果远程目录端口被阻止或远程目录响应缓慢,则执行查找的服务将完全挂起。我们的产品附带默认的 nsswitch.conf,最终用户无法配置。
由于组查找转到此远程查找服务,本地用户也无法登录