如何让 sudo 保留我的环境变量?

如何让 sudo 保留我的环境变量?

在 Solaris 5.10 上使用 sudo 1.7.4p4 并在 RHEL4 u6 上使用 sudo 1.6.7p5 时,我看不出如何保存我的环境变量,例如 $PYTHONPATH。我已将此行添加到 sudoers,但没有任何区别:

Defaults !env_reset

是我做错了什么,还是 sudo 安装根本不尊重 env_reset 标志?

编辑:至少在 Solaris 上,我们发现这个问题取决于 shell!标准 root shell 是 Bourne,sudo bash另一方面,如果我们在 sudo () 下运行 bash,!env_preset 将保留环境(包括 PATH 和 LD_LIBRARY_PATH)。我不得不说,这是一种相当令人困惑的行为。

答案1

谨慎使用,sudo 和变量存在安全问题。

man sudoers发现你应该使用

默认 env_reset
默认值 env_keep += “PYTHONPATH OTHERVARIABLE YETANOTHER”

在 Ubuntu 中,sudo确实会保留一些变量。sudo -i更像是以 root 身份登录然后运行命令。这两种方式可能都不方便,前者会将sudo nano myfileroot 拥有的文件留在您的主目录中,而后者sudo -i nano myfile会尝试打开 /root/myfile。


跑步

sudo printenv PATH

看看它给出了什么。这里给出了

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

例如。现在运行sudo visudo并添加行

Defaults        secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

用你之前找到的内容替换。如果需要,可以向其附加一条新路径。

关于图书馆:

sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command

Linux 发行版对 非常谨慎PATH,您在使用它之前确实应该小心谨慎。特别要小心添加“ .”或 之类的路径/home/username,这是不安全的。

添加路径的危险之一是,它为这些路径上的文件被执行打开了可能性root,从而打开了系统安全窗口,恶意软件可能会利用这些窗口。还可能存在其他危险。只需确保您知道自己在做什么。绕过sudo安全措施可能会使您的 Solaris 变得像 Windows XP 一样安全。

答案2

正如其他人所说的那样,摆弄它sudoers必须谨慎进行。

当您想要保留特定的环境变量时,对于更简单的情况,一种更简单的方法是直接通过 sudo 传递您想要的环境变量(如[VAR=value]sudo 命令行帮助中所示)。

请参见这个小例子,其中我还针对多个变量进行了演示。

$ export MY_V1=1
$ export MY_V2=2
$ printenv | grep MY_V
MY_V2=2
MY_V1=1
$ sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V
MY_V2=2
MY_V1=1

PYTHONPATH对于问题中的原始示例,只需使用以下内容:

$ sudo PYTHONPATH=$PYTHONPATH python some_script.py
<script_output_here>

为这种类型的东西创建别名很方便。像这样:

$ alias sudopy='sudo PYTHONPATH=$PYTHONPATH python'

答案3

你的Defaults !env_reset情况看起来还不错,假设你没有使用该-E选项调用 sudo。

您可以尝试完全删除该条目。

您是否已确认您正在编辑正确的 sudoers 文件?我猜可能是/etc/sudoers/usr/local/etc/sudoers取决于它的安装方式。您是否使用 编辑了它visudo

您如何运行 sudo? ,,,,sudo python还有其他吗?只有和才能保留您的环境。sudo susudo su -sudo -ssudo pythonsudo su

说什么env | grep PYTHONPATH?如果没有,请确保通过运行导出 PYTHONPATH export PYTHONPATH,然后重试。

它说了什么sudo env | grep PYTHONPATH?如果它打印了预期的值,那么其他东西正在覆盖您的 PYTHONPATH 值。可能是 root 的 .bashrc 或 .bash_profile 或系统范围的配置文件。

答案4

sudo su
source ~/.bashrc
cd /home/my_nosudo_user

相关内容