linux setgid()权限错误

标签 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);

}

最佳答案

一个问题太多了!

问题一:无法使用setgid 更改为不同的组id

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

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

答案 2:使用 cap_get_proccap_to_text列出进程的能力

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

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

关于linux setgid()权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387188/

相关文章:

C# Windows 窗体应用程序无法从基于 Linux 的服务器正确读取文件

linux - ksh:评估从文件中读取的一行

c++ - 2个线程如何共享同一个缓存行

linux - Shell - 递归查找子目录并将包含的文件复制到另一个目录

c - 如何编译 POSIX 定时器

linux - 如何在 debian 中编写脚本,它将在特定系统时间终止/停止应用程序并在特定系统时间启动它?

php - 将 PHP 回显到文件 linux

linux - makefile:在每个配方中分配变量来存储步骤名称

linux - Opencv 立体相机捕获和帧率限制

linux - 进程在 Linux 上意外终止