akn*_*ds1 50 sudo environment-variables solaris-10 redhat-enterprise-linux
在 Solaris 5.10 上使用 sudo 1.7.4p4,在 RHEL4 u6 上使用 sudo 1.6.7p5 我看不到如何保留我的环境变量,例如 $PYTHONPATH。我已将此行添加到 sudoers,但没有任何区别:
Defaults !env_reset
Run Code Online (Sandbox Code Playgroud)
我做错了什么,还是 sudo 安装根本不尊重 env_reset 标志?
编辑:至少在 Solaris 上,我们发现这个问题取决于 shell!标准的 root shell 是 Bourne,sudo bash另一方面,如果我们在 sudo ( )下运行 bash ,!env_preset 将保留环境(包括 PATH 和 LD_LIBRARY_PATH)。我不得不说,这是相当令人困惑的行为。
use*_*559 46
小心使用,sudo 和变量存在安全问题。
从man sudoers我发现你应该使用
默认值 env_reset 默认值 env_keep += "PYTHONPATH OTHERVARIABLE YETANOTHER"
在 Ubuntu 中,sudo确实保留了一些变量。sudo -i更像是以 root 身份登录然后运行命令。两者都可能不方便,前者用于sudo nano myfile将 root 拥有的文件留在您的家中,后者sudo -i nano myfile将尝试打开 /root/myfile。
跑
sudo printenv PATH
Run Code Online (Sandbox Code Playgroud)
看看它给了什么。这里给出
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Run Code Online (Sandbox Code Playgroud)
例如。现在运行sudo visudo并添加行
Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Run Code Online (Sandbox Code Playgroud)
替换为您之前发现的内容。如果需要,请为其附加一条新路径。
关于图书馆:
sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command
Run Code Online (Sandbox Code Playgroud)
Linux 发行版PATH非常注意 ,在使用它之前你真的应该小心。添加像 " ." 或 之类的路径时要特别小心/home/username,它是不安全的。
添加路径的危险之一是它打开了这些路径上的文件被执行的可能性root,打开了可能被恶意软件利用的系统安全窗口。可能还有其他危险。只要确保你知道你在做什么。绕过sudo安全措施可能会使您的 Solaris 与 Windows XP 一样安全。
sudoers正如其他人所说,摆弄要谨慎行事。
当您想要保留特定环境变量时,对于更简单的情况,更简单的方法是直接通过 sudo 传递您想要的环境变量(如[VAR=value]sudo cmdline 帮助所示)。
请参阅这个小示例,其中我还针对多个变量进行了演示。
$ 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
Run Code Online (Sandbox Code Playgroud)
对于问题中的原始PYTHONPATH示例,只需使用以下内容:
$ sudo PYTHONPATH=$PYTHONPATH python some_script.py
<script_output_here>
Run Code Online (Sandbox Code Playgroud)
为这种类型的东西创建别名很方便。像这样:
$ alias sudopy='sudo PYTHONPATH=$PYTHONPATH python'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108729 次 |
| 最近记录: |