sudo
ing 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 sudoers
Debian 上提到了另一种可能性。不确定你想要哪种方式,但你的问题听起来像是你想要选择env_reset
-/etc/sudoers
相反的基本上是env_keep
列表。为了设置正确的,HOME
您可以直接使用该-H
选项sudo
,或者再次在 中使用sudoers
该always_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.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
上下文价值。