我在使用sudo
的一些命令时遇到了问题。
我在Centos 6.4上尝试了以下命令并出错。
sudo -u someuser -H bundle install
sudo: bundle: command not found
然而,当我在Ubuntu 14.04上尝试相同的命令时,它运行正常。
不仅bundle
而且许多命令都会出现相同的错误。例如ruby, node
。但是有些命令工作正常。例如echo, mkdir, touch ...
任何人都有一些想法?
答案 0 :(得分:0)
secure_path
中的 /etc/sudoers
确保在sudo下运行二进制文件时路径是干净的。
在CentOS中你应该有像
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
这解释了为什么找到一些命令(echo,mkdir,touch ...)。
您可以保留环境变量($ PATH) 以这种形式
sudo -u someuser "PATH=$PATH" bundle install
来自man sudo
也可以传递要为命令设置的环境变量 VAR = value形式的命令行,例如 LD_LIBRARY_PATH =在/ usr /本地/包装/ lib中。传递给命令的变量 线条也是一样的 作为正常环境变量的限制有一个重要的例外。如果在sudoers中设置了setenv选项,则命令为 运行具有SETENV标记集或匹配的命令是ALL,用户可以 设置变量 否则将被禁止。有关更多信息,请参阅sudoers(5)。
根据您系统的安全政策,您可以使用-E
代替上述方法。
-E -E(保留环境)选项向安全策略指示用户希望保留其现有的安全策略 环境变量。如果安全策略可能会返回错误 指定了-E选项,用户无权保留环境。