プログラムの実行時にプログラムの補助グループ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

ただし、グループを変更するにはroot権限が必要なので、おそらくユーザーIDも変更したいと思います。。デフォルトのグループIDを変更し、名前でグループを検索しながら、興味のある読者のための練習として残します。

権限のないユーザーから始めてグループをインポートするには、必要なグループを保持するターゲットユーザーを使用または作成するのがsudo簡単になります-g group

関連情報