我有使用stat
命令读取的文件的参数(尤其是userid和groupid),我在一个网络中工作,在该网络中,在ldap服务器上指定了用户和组。
我已经从命令getent passwd userid
的结果中获得了用户名。
现在我的想法是使用getent group groupid
获取组名,但这不起作用。
任何人都可以告诉我我的错误或我如何获得组名吗?
谢谢!
答案 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号的形式,例如类型groupOfNames
,groupOfUniqueNames
而不是posixGroup
类型。
只有posixGroup具有适当的属性,允许它用作linux / unix中的有效组(即匹配所需的组ID号)。在那种情况下,ldap服务器不会返回有效的组。
你可以具有完美功能的ldap配置,而getent group
的输出中不存在任何或所有远程组。