標準のインストールと構成を備えたLinuxシステムを検討してくださいsudo
。つまり、root
すべてのコマンドを別のユーザーとして実行できるので、次のコマンドを検討してください。
sudo -u user1 -g group1 some_program
もちろんsome_program
EUIDで実行したいです。user1
そしてEGIDでgroup1
。しかし、私はuser1
これが実際に会員である場合にのみ機能することを難しい方法で学びました。この問題をもう少し詳しく調べてみるgroup1
必要があるようです。man sudo
コマンドラインオプションの説明から-g
:
[...] sudoers ポリシーでは、-P オプションを使用しない限り、すべてのターゲットユーザーグループを -g オプションとして指定できます。
これは非常に不便です。sudo
特に、サービスまたはプログラムがランダムなUIDとGIDで実行され、そのユーザーがそのグループのメンバーではない場合は、テスト目的でこれを頻繁に使用します。このような場合は、テストする前にsudo
そのユーザーをそのグループのメンバーとして作成し、テストが完了したらそのタスクを復元することを忘れないでください。
したがって、質問は:任意のUIDとGIDをroot
使用してプログラムを実行できる設定や構成はありますか?sudo
一致しないもの?共通のメカニズムを提供するソリューションにのみ興味があります。すべてのプログラム、UID、GID。つまり、特定のプログラム、UID、またはGIDのリストをここに入れることは/etc/sudoers
オプションではありません。
sudo
考えられる解決策の1つは、それを可能にする代替ポリシープロバイダーです。ただし、インストールと構成の方法を学ぶのは難しい場合があり、他の解決策がなくてもこのパスを選択するかどうかはわかりません。そして、私はこれまでこのようなものを見つけませんでした。
アップデート1(2022-01-27)
問題のシステムは、この執筆時点で利用可能なすべてのパッチで更新されたDebian Busterを実行します。 SELinuxはいいえインストールする。ここに私の/etc/sudoers
ファイルがあります(省略)ただコメントと空白行):
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
ipupdate ALL = (root) NOPASSWD: /root/scripts/asterisk-external-ip
私は現在、最後の行が質問とは関係がないと思います。一方、時には「明確にするために削除された」見かけ上重要ではない部分が実際にそのエラーを引き起こすことがわかりました。
答え1
さまざまなターゲットグループでプログラムを実行することが-g
このオプションの鍵です。そして-u
結合に制限はありません-g
。
sudoersポリシーでは、-Pオプションを使用しない限り、すべてのターゲットユーザーグループを-gオプションとして指定できます。
明確には説明されていませんが、この文はsudoがデフォルトで使用できる機能を表します。これはsudoを使うという意味ではありません。 sudoが役に立つ追加sudoers
任意のユーザーとグループのセットを許可するファイルのポリシー。
ルートには特別な権限は与えられません。ルートまたは「sudoer」として実行できる場合は、sudo -u user1
sudoersファイルにそれを許可するルールがあるためです。何らかの理由で(おそらく管理者が更新するつもりはなかったため)、サンプルsudoers
ファイルではこの規則は次のようになります。
root ALL = (ALL) ALL
%wheel ALL = (ALL) ALL
これは、ユーザーがすでに属しているグループ内でデフォルトグループを指定するための制限された目的でのみ許可されますが、sudo -u
許可されていません。ユーザー権限だけでなくグループ権限の昇格を許可するには、これらの規則(またはなどを使用するなど、システム上の同等の規則)を次のように変更します。sudo -g
-g
%admin
%sudo
binarus
root ALL = (ALL:ALL) ALL
%wheel ALL = (ALL:ALL) ALL
これはDebianなどの一部のディストリビューションのデフォルト設定です。