他のユーザーとその環境へのsudo

他のユーザーとその環境へのsudo

$ whoami
admin
$ sudo -S -u otheruser whoami
otheruser
$ sudo -S -u otheruser /bin/bash -l -c 'echo $HOME'
/home/admin

bashはログインシェルとして呼び出されますが、なぜに$HOME設定されないのですか?/home/otheruser

具体的には/home/otheruser/.bashrcソースがありません。しかも/home/otheruser/.profileまだソースもありません。 -(/home/otheruser/.bash_profile存在しない)

答え1

ログインシェルを呼び出すには、sudoを使用します-i。コマンドを指定しない場合はログインシェルプロンプトが表示され、それ以外の場合はコマンド出力が表示されます。

はい(ログインシェル):

sudo -i

はい(指定されたユーザーを使用):

sudo -i -u user

はい(コマンドを含む):

sudo -i -u user whoami

はい(ユーザーの印刷$HOME):

sudo -i -u user echo \$HOME

注:バックスラッシュ文字は、ドル記号がターゲットユーザーのシェルに到達し、呼び出されるユーザーのシェルから解釈されないようにします。

最後の例を確認しました。ストレス何が起こったのか正確に教えてくれます。以下の出力は、--loginbash が明示的に呼び出されたかのように、指定されたコマンドでシェルが呼び出されていることを示しています。Sudo設定などの作業を直接行うことができます$HOME

# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...

私はあなたが使用していることを知っていました-Sが、これは一般的に良いスキルではないと思います。キーボードを介して認証を行わずに他のユーザーとしてコマンドを実行するには、SSHを使用できます。これはlocalhost他のホストで動作し、対話型入力なしで機能する公開鍵認証を提供します。

ssh user@localhost echo \$HOME

注:SSHの場合、SSHサーバーは常にSSHクライアントにアクセスできるログインシェルを作成するため、特別なオプションは必要ありません。

答え2

あなたはBashをとても信頼しています。 Bashのすべての「ログインシェル」は、起動時と終了時に取得されるファイルです。この$HOME変数は含まれません。

Bashのドキュメントでは、ログインシェルが何であるかを詳しく説明します。https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Bash-Startup-Files

$HOME実際、Bashは何の設定もまったく行いません。$HOMEシェルを呼び出すすべてのもの(ログイン、SSHなど)によって設定され、シェルはそれを継承します。$HOMEadminでシェルを起動してexec-edすることに関係なくbash、他のユーザーがシェルから継承するようにsudo要求または構成されていない限り、設計上の環境は変更されません。bash

予想される方法でより多くの環境を処理するには、sudoスイッチをsudo見てください。-i努力する:

sudo -S -u otheruser -i /bin/bash -l -c 'echo $HOME'

sudo のマニュアルページにこれについての詳細が記載されていますが、それほど良くありません。http://linux.die.net/man/8/sudo

答え3

sudo -u www-data bash -i -c "env"

-ibashがインタラクティブに実行されるように指示するこのフラグを参照してください。

www-dataこのコマンドは、(たとえば)envコマンドが実行されているユーザーに対して対話型bashシェルを実行します。

ユーザーがwww-data持っていてもログインできませんシェルをデフォルトのシェルとして使用します。

関連情報