Sim para todos, se você for root (ou tiver CAP_SETGID
).
O Perl pode fazer isso por você por meio da variável $)
( $EGID
) . Aqui está um script de prova de conceito para fazer exatamente isso:
#!/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;
É necessária uma lista delimitada por espaços de id de grupo, começando opcionalmente um mais; e um comando para executar:
# 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)
Uma ferramenta pré-fabricada para fazer isso é s6-applyuidgid
, de Laurent Bercot, usa como
s6-applyuidgid -G 20,24 id
No entanto, desde que você precisa ser root para mudar os grupos, é muito provável que você queira mudar o id do usuário também . Deixarei isso como um exercício para o leitor interessado, juntamente com a alteração do ID do grupo principal e a localização dos grupos pelo nome.
Se você quiser começar de um usuário sem privilégios e ganhar grupos, provavelmente é mais fácil usar sudo
com -g group
ou fazendo um usuário de destino que detenha os grupos necessários.