如果我有groupid,如何获取组名

时间:2013-04-23 07:54:36

标签: linux bash ldap

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

我已经从命令getent passwd userid的结果中获得了用户名。

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

任何人都可以告诉我我的错误或我如何获得组名吗?

谢谢!

2 个答案:

答案 0 :(得分: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”没有,那就是一个bug “getent”。

答案 1 :(得分:1)

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

group:    files ldap

/etc/nsswitch.conf

或ldap服务器上的组信息采用不具有组ID号的形式,例如类型groupOfNamesgroupOfUniqueNames而不是posixGroup类型。

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

可以具有完美功能的ldap配置,而getent group的输出中不存在任何或所有远程组。