linux 'id' 命令报告该进程所属的 groups=。何时以及如何填写?
我正在编写一个 suid/sgid 程序,似乎这些组永远不会为我的进程填充,也许只是巧合,但是与 nfs 挂载的文件系统有关的权限也不能正常工作(顺便说一句,我玩过 no_root_squash 并没有帮助)
linux 'id' 命令报告该进程所属的 groups=。何时以及如何填写?
我正在编写一个 suid/sgid 程序,似乎这些组永远不会为我的进程填充,也许只是巧合,但是与 nfs 挂载的文件系统有关的权限也不能正常工作(顺便说一句,我玩过 no_root_squash 并没有帮助)
在大多数情况下,补充组由 设置login
。
如果您想自己设置它们,您将需要函数getgrouplist()
和setgroups()
from <grp.h>
- 请注意,您需要成为 root 才能setgroups()
成功调用。
谢谢, setgroups() 几乎是答案。但是,我最终使用了 initgroups(),它的效果非常好。在我从 root 执行 setuid 之前进行了调用。
在手册页 NAME initgroups 中找到了这个 - 初始化补充组访问列表
概要 #include #include
int initgroups(const char *user, gid_t group);
显然,如果组来自 LDAP,您需要这样做才能正确填写它们。
多组成员资格通常在登录时设置,但使用不多。SOP 通常是给每个用户自己的组。
网络文件系统通常不尊重本地客户端根权限。