您可以在启动程序时操纵该程序的补充组 ID 吗?

您可以在启动程序时操纵该程序的补充组 ID 吗?

以下命令gedit以 开头group_a egid

sg group_a gedit

现在我想知道在启动程序时是否也可以操作程序的补充组 ID。

您可以执行以下操作吗:

  1. 防止启动的程序从其父级继承任何补充组(因此它根本没有补充组)。
  2. 设置启动程序获得的您自己的补充组(不从其父级继承任何补充组)。
  3. 将您自己的补充组添加到启动的程序中(除了启动的程序已经从其父程序继承的补充组之外)。

答案1

是的,如果你是root(或有CAP_SETGID)。

Perl 可以通过$)$EGID) 多变的。这是一个概念证明脚本来做到这一点:

#!/usr/bin/perl    
use English;
use warnings;
$gid = int $EGID;
$groups = shift;
if ($groups =~ s/^\+//) {
    $EGID = "$EGID $groups";
} else {
    $EGID = "$gid $gid $groups";
}    
system @ARGV;

它需要一个以空格分隔的组 ID 列表,可以选择以加号开头;以及要执行的命令:

# id
uid=0(root) gid=0(root) groups=0(root),44(video),50(staff)
# perl setgroups.pl "" id
uid=0(root) gid=0(root) groups=0(root)
# perl setgroups.pl "20 24" id
uid=0(root) gid=0(root) groups=0(root),20(dialout),24(cdrom)
# perl setgroups.pl "+20 24" id
uid=0(root) gid=0(root) groups=0(root),20(dialout),24(cdrom),44(video),50(staff)

Laurent Bercot 的一个预制工具可以实现这一点s6-applyuidgid,哪个使用像

s6-applyuidgid -G 20,24 id

但是,由于您需要 root 权限才能更改组,您很可能也想更改用户 ID。我会将其作为练习留给感兴趣的读者,同时更改主要组 ID 并按名称查找组。

如果您想从非特权用户开始并获得组,则使用或创建持有所需组的目标用户可能会更sudo容易-g group

相关内容