Você pode manipular os IDs de grupo suplementares de um programa ao iniciá-lo?

2

O comando a seguir inicia gedit com o group_a egid :

sg group_a gedit

Agora, quero saber se você também pode manipular os IDs de grupo suplementares de um programa ao iniciá-lo.

Você pode fazer o seguinte:

  1. Impede que o programa iniciado herde qualquer grupo suplementar de seu pai (para que ele não tenha nenhum grupo suplementar).
  2. Defina seus próprios grupos suplementares que o programa iniciado recebe (sem herdar nenhum grupo suplementar de seu pai).
  3. Adicione seus próprios grupos complementares ao programa lançado (além disso aos grupos suplementares que o programa lançado já herda de seu pai).
por user7681202 11.12.2017 / 03:03

1 resposta

2

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.

    
por 11.12.2017 / 13:38