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