linux setgid()权限错误

时间:2013-12-04 22:12:45

标签: linux

因此,用户拥有主要群组,可能属于其他补充群体。

假设用户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);

}

1 个答案:

答案 0 :(得分:1)

一个问题中的问题太多了!

问题1:无法使用setgid更改为其他goup id

失败的原因:用户不是root,用户不是0,用户没有CAP_SETGID

问题2:如何列出流程的功能

答案2:使用cap_get_proccap_to_text列出流程的功能

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

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