`/ etc / sudoers` — 1つのコマンドのみに` env_keep`を指定しますか?


23

sudo特定のコマンドに対してのみ特定の環境変数を保持するように指定する方法はありますか?いくつかの目的のために、私の$HOME環境が欲しいです。特定のコマンドを実行すると変数が保持されます。他の目的と他のコマンドのために、リセットしたいです。これはできます/etc/sudoersか?

編集:

答えてくれてありがとう。「なぜ、これが機能しないのか」というフォローアップの質問をするのではないかと思います。

私が仕事を始めようとしている例では、私のsudo nanoを読みたいです$HOME/.nanorc。これを使用する場合:

Defaults:simon env_keep=HOME

完璧に機能します。これを使用する場合:

Defaults!/bin/nano env_keep=HOME

またはこれ:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

まったく機能していません。理由について何か提案はありますか?(私はDebianテストを行っています、ところで。)

(注:私はそれがnano具体的だとは思わない、ところで-私は単にechos である1行のbashスクリプトで動作を再現できます$HOME)。


1
nanoにsudoを実行させて同じ構成ファイルを使用するsudoedit代わりに、代わりに使用します。sudoeditは、ファイルの内容をtmpファイルにコピーし、ユーザーが選択したエディターを実行します。エディターが終了すると、変更があったかどうかを確認し、変更された場合は元のファイルを編集したものに置き換えます。$EDITORまたは$ VISUAL`環境変数を設定して、実行するエディターを選択できます。
アローマスター

@Arrowmaster-ありがとう、それは私がいじっていたものよりも良いアプローチのようです。私はすでにsudo独自の関数でラップしているため、単にif [ "$1" == "$EDITOR" ]; thenブロックを追加し、sudoedit代わりに呼び出しています:)
サイモン

回答:


21

(ルールを介して呼び出された場合、ユーザーによって)およびユーザーに対して(ユーザーが実行しているコマンドに関係なく)env_keepのみオーバーライドするには:/path/to/commandjoe

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

-=または+=を使用して、env_keepリストのエントリを削除または追加できます。


素晴らしい、ありがとう。その構文の適切な例を見つけることができませんでした。あなたは私にそれを綴ったので、私は私がmanページからそれをどのように解決すべきだったかを見ることができ、私は少し愚かに感じます。ただし、この回答が他の人にも役立つことは間違いありません。
サイモン

1
@simon:馬鹿げているとは思わない。私もsudoersマニュアルページの構文の説明が正式な説明から解き難く、例を書く方法をすでに知っている場合は例を見つけやすい。
ジル「SO-悪であるのをやめる」

うーん-おそらく私はすぐに話を聞いた。これを試したので、実際に動作させることはできません。私のリビジョンを見るのに苦労することはできますか?
サイモン

1
@simon:私の推測では、すべてを実行できるenv_keep設定があり、その設定はありません(simon ALL = ALL)。sudoは最後に一致したエントリを使用します。
ジル 'SO-悪であるのをやめる'

SECURE_PATHが設定されている場合、あなたはまた、デフォルトを追加する必要があります、注意してください:!ジョーSECURE_PATH
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

これらの行は、ユーザー設定ファイル/etc/sudoerspbuilder探す問題を修正するために私自身のもの$HOMEです。ただし、rootとして実行する必要があります(これを移動すると/root、システム設定ファイルとユーザー設定ファイルの両方の目的が無効になります)。


ええ、それは私が念頭に置いていたものと非常によく似たユースケースです、ありがとう!
サイモン

私のリビジョンの例がうまくいかないように見える理由はありますか?
サイモン

@simon sudoは、設定内のエントリの順序について非常にうるさいです。後のエントリは前のエントリを上書きします。あなたの設定でそのようないくつかの競合があるかもしれません。
アローマスター

1

男の人:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

したがってはい、あなたが使用していることを行うことができenv_resetenv_keepそしてenv_check、あなたの/ etc / sudoersファイルに。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.