所以一个用户有一个主要组,可能属于其他补充组。
假设用户A主要组是G,补充组G+1,G+2
用户A运行一个程序是否可以将组id改为G+1
默认情况下,我知道组 ID 将设置为 G,但是当我在程序下面运行时会抛出错误。erroris:不允许操作,其中 4 是用户所属的补充组。
根据手册错误 EPERM 调用进程没有特权(不具备CAP_SETGID能力),gid与调用进程的真实组ID或保存的set-group-ID不匹配。
如何列出进程的能力?
保存的 set-group-id 是什么意思?
int
main ()
{
int x = 0;
char *error = "erroris";
x = setgid (4);
printf ("%d", x);
perror (error);
}
请您参考如下方法:
一个问题太多了!
问题一:无法使用setgid
更改为不同的组id
失败原因:用户不是root,用户不是euid 0
,用户没有CAP_SETGID
问题 2:如何列出进程的功能
答案 2:使用 cap_get_proc和 cap_to_text列出进程的能力
问题三:保存的set-group-id是什么意思
答案 3:当您成功使用其中一个 sete*id()
调用时,它会在保存的 id 中记录旧的。这允许您恢复到保存的值,因为这是您可以使用 set 调用更改的 ID 之一。