如何获取sudo -u $ user以使用用户env?


19

似乎在sudo使用时sudo -u $user,仍在使用root环境。如何sudo使用用户环境?作为特别说明,并非所有我将在其上使用的用户都具有登录外壳。


定义“环境”。 # whoami => root # sudo -u user whoami => user
Alex

1
@alex我认为sudo -u user这类似于su user在您必须使用的su中切换环境su - user
xenoterracide 2010年

但是,如果用户没有登录外壳,对“用户环境”意味着什么?
Thomas Themel

@Thomas用户可以运行程序,即使他们无法安装它们...我相信-u也可以忽略组...我从根开始尝试了某些操作(使用sudo -u down),但它确实有效,但显然不适用于用户。 ..因此,我必须确保我以某种方式运行命令,而该命令将存在所有局限性和环境问题。
xenoterracide 2010年

Answers:


21

尝试 sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

不幸的是,如果他们在/etc/passwd:()中没有外壳,将无法正常工作
xenoterracide 2010年

综观手册页,似乎-E是一个保留了环境,即所有的环境变量等都是存在的,但它仍然不设置PATHLD_LIBRARY_PATH给主叫用户。
Shahbaz 2013年

1
$SUDO_USER可以使用
Rahul Patil 2015年

4

man sudoers在Debian上提到了另一种可能性。不确定要使用哪种方式,但是您的问题听起来像是您希望从中env_reset选择选项/etc/sudoers-基本上相反env_keep。为了设置适当的值,HOME您可以直接使用-H选项,也可以在选项中sudo再次sudoers使用always_set_home

或者,您可以env_file用来指定要传递的确切环境。但是,我认为最好是env_*从中签出选项man sudoers,因为将/etc/sudoers其全部控制就可以了。

这是我env_resetsudoers文件中使用的上下文的一部分:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

sudo的荷兰国际集团的环境变量不会保留。

就我而言,我使用here-document

您将您的操作(例如)my_script.sh放入了HERE DOCUMENT中:

su -u some_user <<EOF
./my_script.sh
EOF

您不应在此处直接放置变量,因为变量将由当前用户解释。

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

如果$MY_VAR未为运行脚本的用户设置,则不会设置。

必须在脚本内部调用变量,或者必须使用对其进行转义\

例如。

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

在这里,$MY_VAR将具有some_user上下文价值。


好答案。一个小的更正:应该是su - some_user而不是su -u some_user
rudolfbyker
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.