我正在尝试使用 wakeonlan 发送魔术包。但是,只有使用 sudo 时它才有效:
sudo wakeonlan xx:xx:xx:xx:xx:xx
当我不使用 sudo 时,输出显示魔术包已发送,但服务器从未唤醒。有没有办法在不使用 sudo 的情况下运行此命令?我需要这样做才能在 php 脚本中运行该命令。谢谢!
答案1
sudo
正如本文所述,有几种使用 php 的方法:
在执行此操作之前,请记住文章的警告:
为 PHP 提供 sudo 是从 Web 界面执行 shell 命令的几种方法之一。这可能不是最安全的方法之一,因此我建议不要在具有外部(WAN)互联网访问权限的服务器上执行此操作,因为可能会执行恶意代码。然后,心怀不轨的人可能会访问您的整个网络,包括任何共享文件、网络附加存储等。您需要小心处理此问题。
将用户添加到/etc/sudoers
文件
上面的文章介绍了如何设置无需密码即可访问的用户sudo
。此问答提供了其他示例:
答案2
您可以将 cap_net_raw+ep 添加到程序中,这样它就不需要 sudo。这也不会以 root 身份运行命令。它允许它生成任意网络包。
sudo ln -s /usr/sbin/etherwake /usr/bin/etherwake
sudo setcap cap_net_raw+ep /usr/sbin/etherwake
此选项可能并非在所有系统上都可用。允许某些程序在没有密码的情况下使用 sudo 可能会打开特权升级途径。滥用原始包生成有点困难。