如何让 sudo -u $user 使用用户环境?

如何让 sudo -u $user 使用用户环境?

sudoing down 的时候好像sudo -u $user还在使用 root 的环境。如何利用sudo用户环境?特别注意的是,并非所有我将使用此功能的用户都有登录 shell。

答案1

尝试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

答案2

man sudoersDebian 上提到了另一种可能性。不确定你想要哪种方式,但你的问题听起来像是你想要选择env_reset-/etc/sudoers相反的基本上是env_keep列表。为了设置正确的,HOME您可以直接使用该-H选项sudo,或者再次在 中使用sudoersalways_set_home选项。

或者,您可以使用env_file指定精确的你想要通过的环境。但是,我认为最好查看env_*中的选项man sudoers,因为/etc/sudoers控制一切,这就是要转向的点。

env_reset这是我在文件中使用的上下文的一部分sudoers

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

答案3

什么时候须藤环境变量不会被保留。

就我而言,我使用此处文档

您将您的操作放入my_script.shHERE 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上下文价值。

相关内容