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


16

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

echo $PATHsudo 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>上班?


您是否已将该用户添加到Centos OS的sudoers中?
AAlvz 2013年

Answers:


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

这使您可以覆盖以下环境默认值:sudo PATH=$PATH which vim,因为变量在执行命令之前由外壳程序解释,从而导致继承PATH/sbin尽管可能不包括等)。


谢谢。在让所有者推荐sudoers文件之前,我将使用Dennis的解决方法。
JaredMcAteer

6
sudo echo $PATH

不按照你的想法做。在执行命令之前$PATH被(您的)外壳替换。

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

来自man sudo

-i [命令]

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


1
在我可以让所有者调整sudoers文件之前,这是一个合适的解决方法。
JaredMcAteer

1

我该如何sudo <command>上班?

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

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

5
我不会拒绝您的投票,但我永远不喜欢仅解决问题,而不是直截了当地找出并解决问题。
妮可·汉密尔顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.