sudoの制限として単一のコマンドを実行してください。

sudoの制限として単一のコマンドを実行してください。

私はroot権限を持っていませんが、sudo許可されたコマンドのリストを持つコンピュータで作業しています。これらのコマンドの1つはです/bin/su - foouser。したがって、sudo su - foouserfouserというインタラクティブシェルを入力して取得できます。これで何かを実行できますfoouser

問題は、これがfoouserいくつかの重要な生産プロセスを作成するために使用される共有ユーザー/シェルであることです。簡単にカスタマイズしたり、好きな方法で設定することはできません。そして私はいつもその仕事をしてはいけません。これにより、私の端末とコマンド履歴は、私がログインした端末と私がいる端末との間に分割されますfoouser

私が本当にやりたいことは、単一のコマンドを実行し、コマンドをブロックし、コマンドが通常行うようfoouserにstdoutとstderrをシェルに印刷してから、まだ自分でログインした状態で返す方法です。いいえfoouser)。たとえば、as_foo bar次のようにコマンドをbar実行しfoouser、stdoutとstderrを印刷し、戻りコードを返してbarからシェルに戻すスクリプトでラップできます。

システム管理者に権限の変更を要求できます。たとえば、barsudoリストに追加してから、su -c私が説明した方法でbarを実行するために使用できます。しかし、翌日走りたければbar2彼らと再び話をしなければならなかった。

この問題から逃れる方法はありますか?foouserセキュリティの観点から違いが見えないように、明らかに必要な数のコマンドを実行して実行できるため、これはかなり愚かなようです。これを達成するための明らかに便利な方法が見つかりません。

答え1

sudo su - foouser <command>rootとして実行するには、少なくとも制限されたrootアクセス権が必要ですsu - foouser <command>

sudo -u foouser <command>必要なものを1段階で達成できます。ただし、システム管理者は以下を介してsudoアカウントへのアクセスを許可する必要があります。foouser

ignacio ALL=(foouser) ALL

代わりに:

ignacio ALL=(root) su - foouser

このように構成すると、たとえば、sudo次のようなエイリアスを定義できます。

as_foo='sudo -u foouser'

を避けると、カスタムsu -設定を引き続き使用できます。sudoこの方法では、ユーザーIDのみが変更されますが、HOME以前の値は保持され、すべてのシェル起動スクリプトおよびその他のカスタム設定が読み取られます。あなたの'sの代わりにホームディレクトリですfoouser

(もちろん、これらのスクリプトは他のユーザーが読むことができる必要があり、実行できる共有スクリプトは.だけでなく、foouserホームディレクトリを明示的に参照するのが最善です。)/home/foouser$HOME

sudoただし、このソリューションの動作を妨げる可能性があるいくつかの設定があります。always_set_homesudoersファイルにsudoオプションが設定されているか、オプションが設定されているがenv_resetリストHOMEに追加されていない場合は、とにかくリセットされます。この場合は、コマンドにオプションを追加して環境を保存するように明示的に要求してください。env_keepHOME-Esudo

foouserログイン時とまったく同じ環境設定foouser(同等の環境など)を実際に実行するには、sudo su - foouserこの-iオプションを追加してこのオプションを具体的に要求してください。sudo -i -u foouser100%正確な交換も同様ですsudo su - foouser

以前のバージョンのシステムにsudoこのオプションがない場合は、代わりにsudoと一緒に-iこの-Hオプションを使用してください。完璧な代替方法ではありませんが、十分です。これらの以前のバージョンにはsudoセキュリティに敏感ないくつかの既知のバグがある可能性が高いため、とにかく更新する価値があります。

sudo -l自分で使用して、sudoアクセスの定義方法と、どのsudoオプション(デフォルト項目とも呼ばれます)が適用されるかを確認できます。

答え2

追加のパラメータをに渡しますsu

sudo su - foouser sh -c 'echo $USER'

関連情報