私は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