GNU/Linux >> Linux の 問題 >  >> Linux

sudo su に環境変数を渡す方法

プロのヒント:sudo su を実行する正当な理由はありません。 .別のユーザーとしてコマンドを実行するには、sudo -u username command を使用します .ルート シェルが必要な場合は、sudo -i を実行します。 または sudo -l . root アカウントを有効にしている場合は、su を実行することもできます 単独ですが、sudo su 役に立たないだけです。そして、はい、私はあなたがそれをどこでも見ていることを知っています.

そうは言っても、sudo -E を持っています ユーザーのセッションの環境を維持するスイッチ:

 -E, --preserve-env
        Indicates to the security policy that the user wishes to preserve 
        their existing environment variables.  The security policy may
        return an error if the user does not have permission to 
        preserve the environment.

したがって、最初に変数をエクスポートしてから sudo -E を実行する必要があります。 :

$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy

bash -c 必要ありません。ただし、 sudo -Eu bob echo "$DUMMY" を実行すると 、ルートシェルが起動される前に変数が展開されるため、コマンドが実際に機能することを示していません:

$ sudo -u bob echo $DUMMY  ## looks like it works but doesn't
dummy
$ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed
D:
$ sudo -Eu bob bash -c 'echo D:$DUMMY'  ## works as expected
D:dummy

ログイン シェルを呼び出さずに実行できます:

sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'

または:

sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'

-p su のオプション コマンドは環境変数を保存します。


-E は私のために仕事をします.From man sudo -

<ブロック引用>

-E , --preserve-env
ユーザーが既存の環境変数を保持することをセキュリティ ポリシーに示します。ユーザーが環境を維持する権限を持っていない場合、セキュリティポリシーはエラーを返すことがあります。


Linux
  1. 変数に格納されているコマンドを実行するにはどうすればよいですか?

  2. 環境変数をDockerコンテナに渡す方法

  3. 私のgitの言語を変更するには?

  1. スクリプトをルートとして遡及的に実行する方法は?

  2. Ubuntu 17.10でWiresharkを実行する方法は?

  3. ターミナルをルートとして実行する方法は?

  1. エクスポートされた環境変数を削除するにはどうすればよいですか?

  2. Ubuntu で PhantomJS をセットアップして実行するにはどうすればよいですか?

  3. sudo アクセス権があるかどうかを確認するにはどうすればよいですか?