【问题标题】:Run a sudo command with a html button使用 html 按钮运行 sudo 命令
【发布时间】:2021-02-28 20:19:12
【问题描述】:

对于我的树莓派项目,我想托管一个简单的网站,其中包含一些可以运行 sudo 命令的 html 按钮。我试过这个方法:

<?php
    if (isset($_POST['button']))
    {
         exec('sudo reboot');
    }
?>
<html>
<body>
    <form method="post">
    <p>
        <button name="button">Run</button>
    </p>
    </form>
</body>
</html>

并将 www-data 添加到 sudo 组并确保 sudo 登录不需要密码,并在我的 sudoers 文件中替换此行

%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

但没有执行任何命令,甚至没有执行非 sudo 命令。

【问题讨论】:

  • 你可以尝试使用“/usr/bin/sudo -S reboot”
  • 检查您的 php.ini 文件中是否有包含“exec”的disable_functions 行。

标签: php html linux raspberry-pi


【解决方案1】:

这可能失败的原因有很多。我不会在这里提供所有这些的详细信息,而是简要介绍:

  • 您的应用程序不仅受文件系统权限的限制。试试disabling apparmor
  • 您的 sudoers 文件的权限可能有误。它必须由 root:root 拥有并具有权限位 0400
  • 您的 PHP 代码可能正在运行 chroot 环境。检查is_readable('/usr/bin/sudo');的输出
  • 其他的 - 尝试exec('touch /tmp/test1'); 然后exec('sudo touch /tmp/testroot'); - 查看文件的创建以及它们的所有者

【讨论】:

    最近更新 更多