10

我有使用命令读取的文件的参数(尤其是用户 ID 和组 ID),stat并且我在一个网络中工作,其中用户和组是在 ldap 服务器上指定的。

我从命令的结果中得到了用户名getent passwd userid

现在我的想法是使用 获取组名getent group groupid,但这不起作用。

谁能告诉我我的错误在哪里或如何获得组名?

谢谢!

4

2 回答 2

3

撇开您提供错误组 ID 的可能性不谈,这可能是 LDAP 设置中的一个错误,表现为反向组解析不起作用。这通过它适用于简单的“文件”设置这一事实得到了加强。

getent(1) 声明:

group     When no key is provided, use setgrent(3), getgrent(3), and
          endgrent(3) to enumerate the group database.  When one  or
          more  key arguments are provided, pass each numeric key to
          getgrgid(3) and each nonnumeric  key  to  getgrnam(3)  and
          display the result.

这可能意味着 getgrgid(3) 在您的设置中失败。

要对此进行测试,请使用“make getgrgid_test”编译此程序(getgrgid_test.c):

#include <stdio.h>
#include <sys/types.h>
#include <grp.h>

int
main(int argc, char **argv)
{
    int gid;
    struct group *g;

    if (argc != 2) {
        fprintf(stderr, "Invalid number of positional arguments\n");
        fprintf(stderr, "Usage getgrid_test GID\n");
        return 1;
    }
    gid = atoi(argv[1]);
    g = getgrgid(gid);
    if (g == NULL) {
        fprintf(stderr, "gid %d not found\n", gid);
        return 1;
    }
    printf("%s\n", g->gr_name);
    return 0;
}

然后像这样使用您的 gid 运行它:

getgrgid_test GID

如果它没有向您的系统管理员生成组名报告。

否则,如果它确实有效,但“getent group GID”没有,这是“getent”中的一个错误。

于 2013-04-23T08:32:54.740 回答
1

你可能有一个配置问题,你没有像这样的一行:

group:    files ldap

在你的/etc/nsswitch.conf.

或者您在 ldap 服务器上的组信息采用没有组 ID 编号的形式,例如 type groupOfNamesgroupOfUniqueNames而不是 type posixGroup

只有 posixGroup 具有允许它在 linux/unix 中用作有效组的适当属性(即匹配所需的组 ID 号)。在这种情况下,ldap 服务器不会返回有效组。

可以拥有完美运行的 ldap 配置,而getent group.

于 2013-04-23T08:28:46.833 回答