这是不带sudo的PATH变量:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
这是sudo的PATH变量:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
据我所知,sudo应该不影响PATH。这是怎么呢我该如何改变呢?(这是在Ubuntu 8.04上)。
更新:据我所知,没有一个脚本以任何方式以根更改PATH开始。
来自man sudo:
为了防止命令欺骗,sudo
检查“。和“”(都表示
当前目录)最后搜索
在用户的PATH(如果
一个或两个都在PATH中)。请注意,
然而,实际的路径
未修改环境变量
并原封不动地传递给程序
sudo执行。
我认为实际上让sudo重置PATH是可取的:否则,攻击者已经破坏了你的用户帐户,可以在你的用户的PATH上放置各种工具的后门版本,并且在使用sudo时它们将被执行。
(当然,让sudo重置PATH并不能完全解决这类问题,但它有帮助)
这确实是当你使用
Defaults env_reset
在/etc/sudoers中,不使用豁免组或env_keep。
这也很方便,因为您可以将只对根目录有用的目录(例如/sbin和/usr/sbin)添加到sudo路径,而不必将它们添加到用户的路径中。使用实例指定sudo使用的路径。
Defaults secure_path="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin"
$PATH是一个环境变量,这意味着对于其他用户,$PATH的值可能不同。
当你登录到你的系统,然后你的配置文件设置决定$PATH的值。
现在,让我们来看看:-
User | Value of $PATH
--------------------------
root /var/www
user1 /var/www/user1
user2 /var/www/html/private
假设这些是不同用户的$PATH值。现在,当你用sudo执行任何命令时,实际上是根用户执行该命令。
可以在终端上执行以下命令确认:—
user@localhost$ whoami
username
user@localhost$ sudo whoami
root
user@localhost$
这就是原因。我想你很清楚了。