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

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

我在朋友的服务器上有 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

sudo which vim然而结果是:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

我尝试添加

export PATH=$PATH:/usr/local/bin

在使用时修复/root/.bashrc了该问题sudo su但不只是sudo <command>

我怎样去sudo <command>上班?

答案1

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

您将在 中找到前者,如Defaults env_reset和 中所述。后者“安全”覆盖指定为– 删除此行可在ing时删除此行为。Defaults env_keep += "SOME_VARIABLE_NAME"/etc/sudoersPATHDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/binsudo


sudo -V当您以 身份运行时,会打印如何处理环境变量 root


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

或者,您可以允许您的帐户SETENV进入该sudoers文件,例如:

%wheel  ALL=(ALL)       SETENV: ALL

这使您可以覆盖环境默认值,如下所示:sudo PATH=$PATH which vim,因为该变量在执行命令之前已由您的 shell 解释,从而产生继承PATH(但可能不包括/sbin等)。

答案2

sudo echo $PATH

没有按照你的想法去做。$PATH被(你的)shell 替换执行命令。

为了实现所需的行为,您可以使用sudo -i

男人须藤

-i [命令]

-我模拟初始登录) 选项运行在密码(5)目标用户作为登录 shell 进入。这意味着登录专用资源文件(如.profile或 ).login将被 shell 读取。如果指定了命令,则该命令将传递给 shell 执行。

答案3

我怎样去sudo <command>上班?

直到解决路径问题之前,请使用完整路径名

  sudo /usr/local/bin/vim /var/www/html/index.html

相关内容