追加の補足グループとしてプログラムを実行する

追加の補足グループとしてプログラムを実行する

私はuidとプライマリgidを使用していますが、追加のセカンダリグループを使用してプログラムを実行できるsudo(またはsudoで実行できるもの)のようなものを探しています。

答え1

警告#1:これは別の「ハッキング」アプローチです。

警告#2:すべてのアプリケーション/スクリプトがこのあいまいなuid / gidを処理できるわけではありません。

同じ uid/gid を持つ複数のユーザーをuseradd許可するオプションと、追加のグループを指定するオプションを使用して、同じ uid と gid を持つ新しいユーザーを作成します。たとえば、--non-unique--groups

useradd --uid 1001 --gid 1001 --groups 1002,1003 --shell /bin/bash \
        --home /home/cloneduser cloneduser

その後、新しいユーザーとしてプログラムを実行する必要があります。デバッグに使用することをお勧めしますid

答え2

perlたとえば、特権プロセスで次のコマンドを使用して、有効な実際のuid / gidと補足IDのリストを設定できます。

$ sudo perl -e '$( = $) = "1 2 3"; $> = $< = 4; exec @ARGV' id
uid=4(sync) gid=1(daemon) groups=1(daemon),2(bin),3(sys)

perldoc -v '$)'詳細については...を参照してください。

答え3

添付されたグループをプライマリグループ(つまり、作成されたすべての新しいファイルのグループ)にするか、そのグループがこのユーザーのセカンダリグループではないかどうかはわかりません。

最初の場合、すでにグループのメンバーである場合は、「newgrp」と「sg」という2つのコマンドを使用できます。両方とも同じ結果が得られますが、1つは新しいgidを使用して対話型シェルを実行し、2つ目はコマンドのみを実行します。

2番目のケースでは、groupaddまたはgroupmodコマンドを使用してグループのパスワードを設定する必要があり、「newgrp」または「sg」を使用するときにコマンドを実行する前にそのパスワードを入力するように求められます。

別の簡単なアプローチは、実行可能ファイルのグループ所有者を変更し、setgidビットを設定することです。このビットの詳細は chmod のマニュアルページにあります。

答え4

no_new_privs次のコマンドを使用して、任意のプロセス権限設定(UID、GID補足グループ、機能、ビット、securebits、SELinuxラベル、AppArmorプロファイル)を設定できます。setprivユーティリティコマンドは以下から提供されます。util-linux集める

新しいプロセスのセカンダリグループに名前付きグループを一時的に追加するには、setpriv次のコマンドで使用できますsudo

function with_group() {
    local -r target="$1"
    shift
    sudo --preserve-env setpriv --reuid "$(id -u)" --regid "$(id -g)" --groups "$(id -G | tr ' ' ','),$(getent group "$target" | cut -d: -f3)" "$@"
}

dockerこれは、rootとしてコマンドを実行して一時的にグループをセカンダリグループとして追加するために使用できます。

with_group docker docker-compose ps

関連情報