为什么我不能 sudo 某些命令?(例如,vim)

Jar*_*eer 16 centos sudo

我在我的朋友服务器上有 sudo 访问权限,运行 centos-6.3,但是当我尝试运行一些命令时,例如sudo vim /var/www/html/index.html出现错误sudo: vim: command not found,但是我可以运行sudo su,然后vim /var/www/html/index.html它按预期工作。

echo $PATH并且sudo echo $PATH都产生:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
Run Code Online (Sandbox Code Playgroud)

sudo which vim 然而产生:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Run Code Online (Sandbox Code Playgroud)

我试过添加

export PATH=$PATH:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)

/root/.bashrc其使用时,作为固定的问题,sudo su而不是只sudo <command>

我如何sudo <command>上班?

Dan*_*eck 18

运行时sudo,许多系统被配置为清除所有非白名单值的环境,并将 PATH 变量重置为已清理的值。

你会发现前者为Defaults env_reset和几个Defaults env_keep += "SOME_VARIABLE_NAME"/etc/sudoers。后一个“安全”PATH覆盖指定为Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin– 删除此行以在sudoing时删除此行为。


当您 sudo -Vroot.


如果您不想摆脱这些默认设置,您始终可以使用完整路径 ( sudo /usr/local/bin/vim)指定程序。

或者,您可以允许您的帐户SETENVsudoers文件中,例如:

%wheel  ALL=(ALL)       SETENV: ALL
Run Code Online (Sandbox Code Playgroud)

这允许您像这样覆盖环境默认值:sudo PATH=$PATH which vim,因为该变量在执行命令之前由您的 shell 解释,导致继承PATH/sbin尽管可能不包括等)。


Den*_*nis 7

sudo echo $PATH
Run Code Online (Sandbox Code Playgroud)

不做你想的。在执行命令之前$PATH被(您的)shell替换。

要完成所需的行为,您可以使用sudo -i.

来自sudo

-i [命令]

-i模拟初始登录)选项运行在指定的外壳的passwd目标用户(5)的条目作为登录shell。这意味着shell 将读取特定于登录的资源文件,例如.profile.login。如果指定了命令,则将其传递给 shell 执行。