为什么以 sudo 方式运行命令会返回“找不到命令”?

为什么以 sudo 方式运行命令会返回“找不到命令”?

命令示例:

drush cc all

有效,但是这个:

sudo drush cc all

给我:

sudo: drush: command not found

为什么?如何解决这个问题?

答案1

当你 时sudo,你会得到一个预配置的$PATH,它(应该是)类似于用户的默认路径。您的程序不在由 标识的目录列表中$PATH

参见示例

须藤执行外部命令时尽量保证安全。

有两种不同的方法来处理环境变量。默认情况下,env_reset 苏多尔斯 选项已启用。这会导致在包含以下内容的最小环境中执行命令TERM, PATH,HOME,SHELL,LOGNAME,USERUSERNAMEenv_check除了和允许的调用过程中的变量之外env_keep 苏多尔斯选项。实际上有一个环境变量白名单。

如果您无法配置sudo保留您的$PATH,通常的解决方法是指定程序的完整路径名。这可能不适用于调用(未访问的)目录中其他可执行文件的脚本。

答案2

您应该指定完整路径。它也更安全;如果您不指定路径,可以想象攻击者可以创建另一个以 root 权限运行的程序。

另外,您需要插入一条线/etc/sudoers以允许它。man sudoers对于语法来说,放在这里太多了。

相关内容