内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
以下为没有sudo的路径变量:
$ echo 'echo $PATH' | sh /opt/local/ruby/bin:/usr/bin:/bin
这是带有sudo的路径变量:
$ echo 'echo $PATH' | sudo sh /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
据我所知,sudo对路径不应该产生任何影响,那么我应该如何消除这种影响?(版本为Ubuntu 8.04)
更新:据我所知,没有一个脚本以任何方式作为根更改路径
man sudo:
为了防止命令错误,sudo在搜索用户PATH中的命令(如果其中一个或两者都在PATH中)时会检查最后一个“.”和“”(都表示当前目录)。但是请注意,实际的PATH环境变量没有被修改,并且不变地传递给sudo执行的程序。
如果有人遇到这个问题,并希望所有用户禁用所有路径变量。
可以使用visudo
命令访问sudoers文件,并且你可以看见以下这一行:
Defaults env_reset
然后,在下一行添加以下内容:
Defaults !secure_path
secure_path默认启用。这个选项指定了sudoing时$PATH的组成。并且感叹号将禁用该功能。