【问题标题】:Why am I able to run PHP sudo commands?为什么我能够运行 PHP sudo 命令?
【发布时间】:2021-02-16 16:10:44
【问题描述】:

我有一个执行以下操作的 PHP 脚本:

$output = exec('sudo nginx -t 2>&1');
echo $output;

正如预期的那样,由于使用了sudo 命令,它返回以下内容:

sudo: no tty present and no askpass program specified

但是,我可以在终端 php /var/www/html/script.php 中运行 PHP,并且它可以在不提示输入 sudo 密码的情况下运行。

有人告诉我,我在我的系统上以 root 身份运行 PHP,这很危险。

然而,我所做的只是关注这个tutorial - 真的有那么危险吗?

另外,如果我使用 Cron 作业 来运行 PHP 脚本,它会完美运行

我在 Ubuntu 20.04 + PHP 7 上使用 NGINX

【问题讨论】:

  • PHP 以网络服务器用户身份运行,并且无法提示输入没有 tty 或 askpass 的密码。在终端中,您以您登录的任何用户身份运行它。
  • @AbraCadaver 从普通用户帐户(不是root)运行它并且没有sudo 命令使其工作。此外,如果我设置了一个 Cron 作业来运行该 PHP 脚本,那也可以 - 这是预期的吗?还是因为我的 PHP 以 root 身份运行,这应该是危险的
  • 如果你只做exec('/path/to/nginx -t 2>&1')会发生什么

标签: php ubuntu nginx


【解决方案1】:

当您运行php /var/www/html/script.php 时,您在当前用户下运行php 进程(很可能在sudoers 组中)。

Ubuntu 默认 sudo 密码超时为 15 分钟。这意味着,如果您的用户(也运行 PHP 脚本的用户)在不到 15 分钟前输入了 sudo 密码,系统将不会再次要求。

【讨论】:

  • 运行一个 cron 作业也让它工作,这是预期的吗?
  • 取决于运行 cron 作业的用户。如果它是 root(不推荐),它将始终成功运行特权(sudo)脚本。如果是您的用户,则应遵循 15 分钟规则。
  • @PetrHejda 从 root 运行 CRON 有什么问题?
  • @user3783243 风险更大。 Root 用户比普通用户拥有更多权限,因此如果您运行的脚本存在缺陷,它能够损坏系统的其他部分。
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2012-07-29
  • 2022-08-02
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多