通过 Web 浏览器重新启动 Linux 服务器 (PHP)
Restarting a Linux Server via Web Browser (PHP)
打开并阅读 Google 上的每个结果后,我认为是时候在某个地方创建自己的线程了。 很抱歉,我需要问一个以前已经问过的问题,对此我怎么强调都不为过,但我别无选择,因为没有其他问题帮助我实现我的目标。
我正在尝试通过由 HTML(对于 buttons/text)和 PHP(对于上述功能的执行)。
我无法让它工作。我读到我需要将网络用户添加到 sudoers 文件中,我试过了。我的服务器上是 运行 Nginx,在我的情况下如何将用户添加到 sudoers?
另外,我知道安全风险。
以下是我目前的情况:
HTML (index.html):
<body>
<h3>Restart</h3>
<p>
<form action="restart.php" method="get">
<input type="submit" value="Press me.">
</form>
</p>
</body>
PHP (restart.php):
<?php
echo "This is a test";
echo "<br>";
echo "<br>";
echo shell_exec('ifconfig');
echo "<br>";
echo "<br>";
echo "Restarting server...";
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
shell_exec("/sbin/reboot");
exec("/sbin/reboot");
system("/sbin/reboot");
?>
请注意,在这里,我只有这么多东西要执行,所以我确保在其中一个起作用时我击中了目标,如果这有意义的话。 IFConfig 只是一个测试,以确保它确实能够执行。
Sudoers:
# User privilege specification
root ALL=(ALL:ALL) ALL
www-data reboot = NOPASSWD: /sbin/reboot
这一切都在 Ubuntu 14.04 LEMP。
www-data reboot = NOPASSWD: /sbin/reboot
这意味着您在 运行 执行 sudo 时不需要密码,而不是该用户 运行 时命令 运行 作为 sudo。
答案是使用sudo /sbin/reboot
作为命令
你可以使用腻子。我认为使用 php 不是一个好计划。
您可以通过编辑 sudoers 文件来完成此操作:
Sudoers:
www-data ALL=(root) NOPASSWD: /sbin/reboot
第一个 ALL 是主机名 如果你的主机名是 而不是 'reboot' 我建议你 保留所有,因为它可以在任何主机名中工作。这就是它似乎无法在您的服务器上运行的原因
restart.php
exec('sudo /sbin/reboot');
或者不编辑你的 sudoers 文件。
- 首先创建一个文件,您将在其中存储您的 root 密码
~/密码:
myrootpassword
- 第二个 运行 从 php 文件中成为 root 时你想要的任何命令(不要忘记指定存储密码的文件)
phpfile.php :
exec('sudo -u root -S /sbin/reboot < ~/password');
打开并阅读 Google 上的每个结果后,我认为是时候在某个地方创建自己的线程了。 很抱歉,我需要问一个以前已经问过的问题,对此我怎么强调都不为过,但我别无选择,因为没有其他问题帮助我实现我的目标。
我正在尝试通过由 HTML(对于 buttons/text)和 PHP(对于上述功能的执行)。
我无法让它工作。我读到我需要将网络用户添加到 sudoers 文件中,我试过了。我的服务器上是 运行 Nginx,在我的情况下如何将用户添加到 sudoers?
另外,我知道安全风险。
以下是我目前的情况:
HTML (index.html):
<body>
<h3>Restart</h3>
<p>
<form action="restart.php" method="get">
<input type="submit" value="Press me.">
</form>
</p>
</body>
PHP (restart.php):
<?php
echo "This is a test";
echo "<br>";
echo "<br>";
echo shell_exec('ifconfig');
echo "<br>";
echo "<br>";
echo "Restarting server...";
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
shell_exec("/sbin/reboot");
exec("/sbin/reboot");
system("/sbin/reboot");
?>
请注意,在这里,我只有这么多东西要执行,所以我确保在其中一个起作用时我击中了目标,如果这有意义的话。 IFConfig 只是一个测试,以确保它确实能够执行。
Sudoers:
# User privilege specification
root ALL=(ALL:ALL) ALL
www-data reboot = NOPASSWD: /sbin/reboot
这一切都在 Ubuntu 14.04 LEMP。
www-data reboot = NOPASSWD: /sbin/reboot
这意味着您在 运行 执行 sudo 时不需要密码,而不是该用户 运行 时命令 运行 作为 sudo。
答案是使用sudo /sbin/reboot
作为命令
你可以使用腻子。我认为使用 php 不是一个好计划。
您可以通过编辑 sudoers 文件来完成此操作:
Sudoers:
www-data ALL=(root) NOPASSWD: /sbin/reboot
第一个 ALL 是主机名 如果你的主机名是 而不是 'reboot' 我建议你 保留所有,因为它可以在任何主机名中工作。这就是它似乎无法在您的服务器上运行的原因
restart.php
exec('sudo /sbin/reboot');
或者不编辑你的 sudoers 文件。
- 首先创建一个文件,您将在其中存储您的 root 密码
~/密码:
myrootpassword
- 第二个 运行 从 php 文件中成为 root 时你想要的任何命令(不要忘记指定存储密码的文件)
phpfile.php :
exec('sudo -u root -S /sbin/reboot < ~/password');