他のユーザーとその環境への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クライアントにアクセスできるログインシェルを作成するため、特別なオプションは必要ありません。

おすすめ記事