sudo之前的用户名


8

我有一个需要sudo的脚本,但是该脚本必须根据原始用户设置参数,例如:

chown "${USER}:${USER}" dir

如果将其设置为sudo,则最终得到chmod root:root,这没有帮助。

那么如何在sudo之前获取用户名?

Answers:


11

环境变量SUDO_USER应该代替USER。

因为您将所有权设置为USER:USER,所以我假设总有一个与用户同名的组?否则,更严格的解决方案可能是使用SUDO_UID和SUDO_GID。

两种可能的解决方案是:

chown "${SUDO_USER}:${SUDO_USER}" dir

要么

chown "${SUDO_UID}:${SUDO_GID}" dir

不错的解决方案,包括解决方案和一些其他信息。
e-satis

使用UID / GID是最好的解决方案,因为可能有多个具有相同用户名的UID。
duffbeer703

4

您可以使用SUDO_USER变量:

sudo bash -c 'echo $SUDO_USER'

sudo手册页中:

sudo使用以下环境变量。安全策略可以控制命令环境的实际内容。[...]

SUDO_UID 设置为调用sudo的用户的用户ID。

SUDO_USER 设置为调用sudo的用户的登录名。


但是为什么sudo echo $SUDO_USER什么都不输出呢?
罗伯特

1

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


运行后“苏执行sudo - ”环境变量是不可用的,而是lognamewho am i工作。
RickMeasham'3

没错,不可能依靠环境变量。
cladmi 2015年

在某些主机上发现SUDO_USER不能被覆盖: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER 因此它仍然是安全的,仍应对此进行验证。
cladmi '16

这是因为我的命令设置为“ NOPASSWD”,所以它取决于通过“ NOSETENV”进行的sudoers配置。
cladmi '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.