Skip to main content
 首页 » 编程设计

linux setgid()权限错误

2023年11月22日303myhome

所以一个用户有一个主要组,可能属于其他补充组。

假设用户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_proccap_to_text列出进程的能力

问题三:保存的set-group-id是什么意思

答案 3:当您成功使用其中一个 sete*id() 调用时,它会在保存的 id 中记录旧的。这允许您恢复到保存的值,因为这是您可以使用 set 调用更改的 ID 之一。