2013-04-23 66 views
7

我有一个文件的参数(特别是用户标识和groupid)使用stat命令读取,我工作在一个网络上,用户和组在ldap服务器上指定。如何获取groupname当我有groupid

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

现在我的想法是获得组名getent group groupid,但这是行不通的。

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

谢谢!

+0

适用于SLES 11.2。 – jwilleke 2013-04-23 14:27:43

回答

1

撇开您提供错误的组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)你的设置失败。

为了测试这个编译这个程序(getgrgid_test.c)以 “让getgrgid_test”:

#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”中的一个错误 。

+0

这完全是**什么getent does – Petesh 2013-04-23 08:48:29

+0

Petesh,是的,测试程序在那里绕过(非常轻微的)getent错误的可能性,并帮助用sysadmins将问题带回家。 – spbnick 2013-04-23 08:56:55

0

你可能有一个配置问题,即要么你没有得到这样一行:

group: files ldap 
在​​

或您在ldap服务器上的群组信息是一种没有群组ID号码的形式,例如类型为groupOfNames,groupOfUniqueNames而不是类型posixGroup

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

可以有一个完美的功能ldap配置没有任何或所有的远程组在getent group的输出中。

相关问题