我有一个文件的参数(特别是用户标识和groupid)使用stat
命令读取,我工作在一个网络上,用户和组在ldap服务器上指定。如何获取groupname当我有groupid
我已经得到命令getent passwd userid
的结果中的用户名。
现在我的想法是获得组名getent group groupid
,但这是行不通的。
任何人都可以告诉我哪里有我的错误或我如何获得组名?
谢谢!
我有一个文件的参数(特别是用户标识和groupid)使用stat
命令读取,我工作在一个网络上,用户和组在ldap服务器上指定。如何获取groupname当我有groupid
我已经得到命令getent passwd userid
的结果中的用户名。
现在我的想法是获得组名getent group groupid
,但这是行不通的。
任何人都可以告诉我哪里有我的错误或我如何获得组名?
谢谢!
撇开您提供错误的组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”中的一个错误 。
你可能有一个配置问题,即要么你没有得到这样一行:
group: files ldap
在
。
或您在ldap服务器上的群组信息是一种没有群组ID号码的形式,例如类型为groupOfNames
,groupOfUniqueNames
而不是类型posixGroup
。
只有posixGroup具有适当的属性,允许它在linux/unix中用作有效组(即需要匹配的组ID号)。在这种情况下,ldap服务器不会返回有效的组。
你可以有一个完美的功能ldap配置没有任何或所有的远程组在getent group
的输出中。
适用于SLES 11.2。 – jwilleke 2013-04-23 14:27:43