我正在使用MySQL后端将我的一些UNIX用户存储到数据库中。 为了使系统能够检索关于这些用户的名称信息,我将MySQL添加到了NSS的来源:
passwd: files mysql group: files mysql shadow: files mysql
但是,当我请求存储在/etc/passwd (“ files ”源files )中的用户信息时,MySQL后端仍然被查询(我可以看到我在/etc/libnss-mysql.cfg中configuration的查询被执行)。
有没有办法让NSS在匹配后停下来,以便在使用典型的UNIX身份validation资源find用户/组时找不到MySQL?
正如您在编辑2中看到的那样,当NSS尝试构build组列表时,出现问题,而不是在查找特定名称时出现问题。 这可能是为什么默认的SUCCESS => return链不适用于此。
编辑:我试图“迫使”NSS返回第一场比赛使用以下…
passwd: files [SUCCESS=return] mysql group: files [SUCCESS=return] mysql shadow: files [SUCCESS=return] mysql
(尽pipereturn应该是SUCCESS状态的默认值 ),但MySQL仍然被查询。 从行中删除mysql ,将NSS限制在这些文件中,所以我们可以清楚地说,即使在SUCCESS ,NSS也是如此。
编辑2(我如何看到MySQL仍然被查询) :我的MySQL查询是这样的,当查询MySQL时,不pipe你查询什么用户名,返回的组列表将总是包含GID 5000.所以,例如,如果myuser (存储在数据库中)属于mygroup (也存储在数据库中),那么MySQL将返回mygroup和GID 5000.示意图中,您可以观察到:
mysql> SELECT * FROM grouplist WHERE username='myuser'; |---------------------------| | GID | USERNAME | |---------------------------| | n | myuser | |---------------------------| $ id myuser uid=m(myuser) gid=n(mygroup) groups=n(mygroup),5000(forcedgroup) ^^^^ added for every SQL query
这个小小的“加法”是由查询本身完成的:
gidsbymem SELECT id FROM ( \ SELECT id FROM grouplist WHERE username='%1$s' \ UNION SELECT 5000 AS id \ ) AS custom_groups
现在,当我使用id myotheruser请求有关存储在/etc/passwd的用户的信息时,尽pipe/etc/group没有这种关联,我id myotheruser可以在他的组中看到GID 5000。 对我来说,发生的事情是:
/etc/passwd并findmyotheruser 。 myotheruser在它的组列表中拥有GID 5000,因为MySQL添加了它。 示意图:
$ id myotheruser uid=n(myotheruser) gid=n(myothergroup) groups=n(myothergroup),5000(forcedgroup)
虽然我期望:
$ id myotheruser uid=n(myotheruser) gid=n(myothergroup) groups=n(myothergroup)
但是,当我从NSS的源中删除MySQL时, myotheruser在他的列表中不再有GID 5000(这就是为什么我可以说MySQL是添加它的人)。