sudo -uは$ HOME / .profileにパスを追加しません。

sudo -uは$ HOME / .profileにパスを追加しません。

root権限を必要とするスクリプトがあります。私は実行スクリプトを使用しますsudo ./script.sh。スクリプトの一部は実際に元のユーザーとして実行する必要があるため、sudo --user=$SUDO_USERスクリプト内でそれを使用して操作を実行します。私が経験している問題は、ユーザーのためにいくつかのユーティリティがインストールされていて、そのパスが私に追加されることです~/.profile。 sudo で実行すると ~/.profile が実行されないようです。確認されましたsudo --user=$SUDO_USER echo $PATH

$HOME/.profileをインポートしてこの問題を解決できますが、これは正しい解決策ではないようです。

sudo --user=$SUDO_USER source $HOME/.profile; command_i_want_to_run

状況に関係なく使用できるように、別のファイルに$ PATHを追加する必要がありますか?

ベストアンサー1

ローカルのsudoersポリシーに依存するかどうかはわかりませんが、少なくとも私のUbuntuシステムでは、sudoまたは-iオプションを使用して--loginログインシェルを指定できます。

 -i, --login
             Run the shell specified by the target user's password data‐
             base entry as a login shell.  This means that login-specific
             resource files such as .profile or .login will be read by the
             shell.

例えば

$ sudo sudo -u steeldriver sh -c 'echo $PATH'
[sudo] password for steeldriver: 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

しかし、

$ sudo sudo -iu steeldriver sh -c 'echo $PATH'
/home/steeldriver/bin:/home/steeldriver/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

おすすめ記事