프로그램이 실행될 때 프로그램의 보조 그룹 ID를 조작할 수 있습니까?

프로그램이 실행될 때 프로그램의 보조 그룹 ID를 조작할 수 있습니까?

다음 명령은 다음 gedit으로 시작됩니다 group_a egid.

sg group_a gedit

이제 프로그램을 시작할 때 프로그램의 보조 그룹 ID를 조작하는 것도 가능한지 궁금합니다.

다음을 수행할 수 있습니까?

  1. 시작된 프로그램이 상위 프로그램으로부터 보충 그룹을 상속받지 못하도록 방지합니다(따라서 보충 그룹이 전혀 없음).
  2. 런처가 가져오는 자체 보충 그룹을 설정합니다(상위 그룹으로부터 어떤 보충 그룹도 상속하지 않음).
  3. 시작된 프로그램에 자신만의 보충 그룹을 추가합니다(시작된 프로그램이 상위 프로그램에서 이미 상속받은 보충 그룹에 더해).

답변1

예, 루트(또는 루트 CAP_SETGID)인 경우 가능합니다.

펄은 통과할 수 있다$)( $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

다만, 그룹을 변경하려면 루트 권한이 필요하므로,아마도 사용자 ID도 변경하고 싶을 것입니다.. 기본 그룹 ID를 변경하고 이름으로 그룹을 찾는 동안 관심 있는 독자를 위한 연습으로 남겨두겠습니다.

권한이 없는 사용자로 시작하여 그룹을 가져오려면 필요한 그룹을 보유하는 대상 사용자를 사용하거나 생성하는 것이 sudo더 쉬울 수 있습니다 -g group.

관련 정보