相对于环境的其余部分和 sudo,“PATH”有什么特别之处?

相对于环境的其余部分和 sudo,“PATH”有什么特别之处?

使用 sudo 时找不到命令

事实上,只需正确调用它就可以使用sudo当前环境 PATH(使用env命令)和/或其余环境(使用选项):-E

sudo -E env "PATH=$PATH" <command> [arguments]

事实上,我们可以用它来创建一个别名:

alias mysudo='sudo -E env "PATH=$PATH"'

(也可以命名别名本身sudo,替换原来的sudo。)

为什么在命令中sudo使用当前而不是选项?PATHenv-E

为什么要通过选项而不是命令来sudo使用环境的其余部分?-Eenv

PATH是环境的一部分吗?

PATH相对于其他环境有什么特别之处?

谢谢。


sudo 联机帮助页

sudo 在执行外部命令时尝试确保安全。为了防止命令欺骗,sudo 检查“.”。在用户的 PATH 中搜索命令时(如果其中一个或两者都在 PATH 中),最后是“”(均表示当前目录)。但请注意,实际的 PATH 环境变量未修改,而是原封不动地传递给 sudo 执行的程序。

这是否意味着“实际的 PATH 环境变量未修改,而是原样传递给 sudo 执行的程序”,将用户的变量PATH原封不动地传递给执行的命令?sudo

答案1

如果env_reset启用(默认情况下是这样),sudo则清除环境,特别是提供它自己的环境PATH(参见secure_path参考资料/etc/sudoers)。如果env_reset被禁用,env_check并且env_delete仍然适用,并且PATH仍然有可能被清除。您可以通过比较输出来看到这一点

echo $PATH

sudo printenv PATH

如果您有自定义的PATH,您将不会在 的输出中看到它sudo printenv

env技巧围绕环境清理工作:

sudo env "PATH=$PATH" command

要求sudo运行env "PATH=$PATH" command,并由$PATH您的 shell 扩展以包含当前的PATH; env,以 root 身份运行,然后将给定值存储PATH在其环境中并command在该环境中运行。

所以PATH并不特殊,除了在 的上下文中sudo,具体取决于您的配置。通过适当配置,任何变量都可以以相同的方式变得“特殊” sudoPATH也可以变得“非特殊”。请参阅sudosudoers详细信息请参阅联机帮助页。

相关内容