【问题标题】:How to permanently change sudo's $PATH variable (Ubuntu 9.x)如何永久更改 sudo 的 $PATH 变量(Ubuntu 9.x)
【发布时间】:2009-10-04 22:32:49
【问题描述】:

我想在运行 sudo 时向 $PATH 添加一些目录,这是一个(半)永久性要求,而不是需要添加到脚本本身的东西。我注意到 Django 已经设法做到了,(运行 sudo 时我的 $PATH 是“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/ usr/X11R6/bin:/django/django-trunk/django/bin") - 那么它是怎么做到的呢?

【问题讨论】:

    标签: path sudo


    【解决方案1】:

    这是 sudoers 文件中重置的行:

    Defaults env_reset

    您可以通过将PATH 添加到env_keeps 或添加以下行来解决此问题:

    Defaults env_keep = "PATH"

    编辑:meder,你没有禁用 env_reset,你只是绕过路径重置

    或者您可以删除有问题的env_reset 行。

    但更好的是,您可以声明一个 secure_path,它会在运行 sudo 时替换 PATH

    Defaults secure_path="/bin:/usr/bin"

    这样您就可以控制路径中包含哪些特定目录。

    【讨论】:

    • 这应该是公认的答案。您可以限制仅访问 sudoer 机制所需的路径,而不是打开所有 root 的访问权限。
    • 通过 'sudo visudo' 访问 sudoers 文件
    【解决方案2】:

    我认为如果您将其保存在 /root/.bashrc 中,这应该可以解决:

    export PATH=/www/foo:$PATH
    

    我忘记了它是 PATH 还是 PYTHONPATH,如果它真的很重要,这是基于我用户的 .bashrc:

    export PYTHONPATH=/www/django:$PYTHONPATH
    

    【讨论】:

    • 没问题。不要忘记选择一个答案,以便其他人知道它已解决:)
    • 这对我不起作用。我添加了 /root/.bashrc 的路径,然后运行“sudo env | grep PATH”并且添加的路径不存在。也许它适用于 PYTHONPATH,但不适用于 PATH。
    • 它对我也不起作用。我在stackoverflow.com/questions/2717043/… 提出了一个新问题
    • 这是一个糟糕的解决方案。文件 /etc/sudoers 的存在允许您更改 sudo 的行为。打开可能不应该在根路径中的文件夹的默认根路径是一个可怕的想法。控制 bash 在何处查找可执行文件的也是路径,而不是 pythonpath。
    【解决方案3】:

    您可以在 /etc/environment 中设置变量,然后使用“sudo -i”运行脚本(适用于 ubuntu 10.10)。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2012-07-27
      • 1970-01-01
      • 2011-08-15
      • 2014-08-04
      • 2012-01-11
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      相关资源
      最近更新 更多