sudoを使用しても$ HOMEが変更されないのはなぜですか?


15

ターゲットユーザーの環境を提供する-Hオプションを期待していました。

nbest @ geo:〜$ sudo -H -u tanum echo $ HOME
/ home / nbest
nbest @ geo:〜$ sudo -u tanum echo $ HOME
/ home / nbest
nbest @ geo:〜$ sudo -i -u tanum echo $ HOME
/ home / nbest
nbest @ geo:〜$ sudo -H -i -u tanum echo $ HOME
/ home / nbest

これにより、次のことが言えます。

sudo -u tanum ls ~

ターゲットユーザーのホームディレクトリリストを取得します。そうではありません。これはのenv_resetデフォルトが原因sudoersですか?

その場合、-Hは効果がありますか?この動作をオーバーライドする最も安全な方法は何ですか?

そうでない場合、-Hの意図する効果は何ですか?

まっすぐにしてください。

回答:


16

$HOMEそして、~することによって拡張を取得あなたのシェル、彼らはによって解釈されませんecho

言い換えれば、引数としてecho$HOMEていません。実際に見/home/nbestます。したがって、次のコマンドはまったく同じです(あなたの場合)。

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

あなたがしようものは何でも(-H-i、...)あなたは望んでいた挙動を得ることはありません。$HOMEはシェルに置き換えられ、シェルはユーザーとして実行されるためです。sudoシェルに影響を与えることはありません。


この「問題」(実際には機能)を回避するには、新しいサブシェルを開始できます。

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(拡張を避けるために一重引用符を使用していることに注意してください。)この方法では、新しいシェルshはユーザーtanumとして実行され、ホームディレクトリを出力します。


別の代替方法は、を使用することです~username。これは、sudoまたはを使用する必要なく、そのユーザーの自宅に拡張されsuます。試してください:

nbest@geo:~$ echo ~tanum

1
もちろん。なんて恥ずかしい! sudo do what I mean
ニールベスト

1
これは私にはうまくいきません。たとえば、いくつかのUbuntuイメージのデフォルトのユーザーであるsudo -H -u buildbot bash -c "echo $HOME"meを提供/home/ubuntuします。
セリン

単一引用符を使用することは@Cerin拡大を防ぐために:sh -c 'echo $HOME'
アンドレアCorbellini

3

してみてください:

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