微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 通过访问网页执行命令?

我运行一个ubuntu服务器,我有两个游戏服务器需要半定期更新.

它们在屏幕中的名为“gs”的特定于游戏服务器的帐户下运行.

我有一个’runupdate.sh’脚本,其中包含以下行:

/var/gs/steamcmd/one.sh;/var/gs/steamcmd/two.sh; (一行因为Windows CR / LF抛出错误)

one.sh/two.sh是非常相似的脚本,one.sh的内容是:

screen -r tf2_1 -X quit;
/var/gs/steamcmd/steamcmd.sh +runscript /var/gs/steamcmd/update_tf2_1.txt;
screen -d -m -S tf2_1 /var/gs/tf2/1/srcds_run -game tf -port 27015 +sv_pure 2 +map cp_badlands +maxplayers 24;

当作为’gs’用户运行时,这些脚本可以很好地工作.

出于访问目的,我希望游戏服务器始终在分配给’gs’帐户的屏幕上运行.

目前,当我访问www.mysite.com/admin/restartservers12345上的网页时,我希望运行一个PHP脚本,该网页将执行’runupdate.sh’脚本,并在更新服务器时重新启动服务器,我的updateservers12345.html文档目前看起来像:

<!DOCTYPE html>

<?PHP
echo exec('/var/gs/runupdate.sh')
?>

<html>
<style>
p {
    text-align: center;
    color:white;
    font: bold 60px arial, sans-serif;
}
</style>
<body style="background-color: rgb(60,60,60)">

<p>Server Updating...</p>

</body>
</html>

问题是这个脚本似乎是以’www-data’或其他认的Apache帐户运行,这意味着它无法访问在’gs’上运行的游戏服务器屏幕.

目前我想在屏幕上有一个盒子,人们需要输入gs帐户的密码,然后点击回车,然后输入一个脚本

exec(echo $textBoxpassword | su -s – gs -c’/var/gs/runupdate.sh’)

将运行,有效地运行该脚本作为’gs’帐户.

当前尝试通过ssh运行该命令时我得到一个错误su:必须从终端运行,我似乎无法确认是否在我的服务器上正确执行了任何PHP代码.

任何帮助将非常感激.谢谢.

解决方法:

你应该使用“sudo”而不是“su”

用户www-data添加到sudoers列表,你甚至只允许单个命令’/var/gs/runupdate.sh’作为sudoer从www-data执行.

/etc/sudoers.d/www-data

www-data ALL=(ALL) nopASSWD:  /var/gs/runupdate.sh

更新1:

您可以使用

sudo -u gs bash -c '/var/gs/runupdate.sh'

它将从gs用户执行runupdate.sh

您可以通过/etc/sudoers.d/www-data的后续行允许无密码执行

www-data ALL=(gs) nopASSWD:  /var/gs/runupdate.sh

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐