Answers:
环境变量SUDO_USER应该代替USER。
因为您将所有权设置为USER:USER,所以我假设总有一个与用户同名的组?否则,更严格的解决方案可能是使用SUDO_UID和SUDO_GID。
两种可能的解决方案是:
chown "${SUDO_USER}:${SUDO_USER}" dir
要么
chown "${SUDO_UID}:${SUDO_GID}" dir
SUDO_USER可以被用户覆盖。
$ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
USER=root
SUDO_USER=test
USERNAME=root
您应该使用“我是谁”或“登录名”来获取原始用户名
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto pts/4 Jan 23 15:13 (:0.0)
来自/programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands
logname
和who am i
工作。
sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER
因此它仍然是安全的,仍应对此进行验证。