命令示例:
drush cc all
有效,但是这个:
sudo drush cc all
给我:
sudo: drush: command not found
为什么?如何解决这个问题?
答案1
当你 时sudo
,你会得到一个预配置的$PATH
,它(应该是)类似于根用户的默认路径。您的程序不在由 标识的目录列表中$PATH
。
参见示例
- 如何保留
sudo
$PATH? - 为什么通过 sudo 和 su 运行时 PATH 变量不同?
- 须藤者(5)(参见相关的各种设置
PATH
) - 须藤(8)
须藤执行外部命令时尽量保证安全。
有两种不同的方法来处理环境变量。默认情况下,
env_reset
苏多尔斯 选项已启用。这会导致在包含以下内容的最小环境中执行命令TERM
,PATH
,HOME
,SHELL
,LOGNAME
,USER
和USERNAME
env_check
除了和允许的调用过程中的变量之外env_keep
苏多尔斯选项。实际上有一个环境变量白名单。
如果您无法配置sudo
保留您的$PATH
,通常的解决方法是指定程序的完整路径名。这可能不适用于调用(未访问的)目录中其他可执行文件的脚本。
答案2
您应该指定完整路径。它也更安全;如果您不指定路径,可以想象攻击者可以创建另一个以 root 权限运行的程序。
另外,您需要插入一条线/etc/sudoers
以允许它。man sudoers
对于语法来说,放在这里太多了。