通过 PHP 在 shell 脚本中启动服务

通过 PHP 在 shell 脚本中启动服务

因此,我正在寻找一种使用 PHP 重定向启动 Plex Media Server 服务的方法。我基本上想通过转到特定 URL 来启动和停止服务器。我正在使用 Apache,这是我使用的代码和命令:

我的/var/www/site/index.php:

<?php
  $output = shell_exec('/var/www/site/plex.sh');
  echo "<h1>Output: " . $output . "</h1>";
?>

/var/www/site/plex.sh

#!/bin/bash

sudo service plexmediaserver start
echo "Done"

访问我的网站后,我按预期获得了标题“输出:完成”。但 Plex 进程仍处于非活动状态(服务状态)。站点目录和文件的权限设置为“www-data”用户,plex.sh 可执行(chmod +x)。目录和文件的权限为 rwxrwxrwx,运行 apache 的用户为 www-data。

命令是错误的还是其他原因?

答案1

通常我会避免使用 webservers/php-fpm 执行 root 权限命令。所以请考虑一下,如果您真的需要它。要使用您现有的脚本成功运行此类作业,您需要将运行 Web 服务器的用户(通常是 www-data)添加到 sudoers 文件中,并允许它使用 sudo 运行命令而无需密码,如下所示:

shell# visudo
 
      User_Alias WWW_USER = www-data
      Cmnd_Alias WWW_COMMANDS = /usr/sbin/service
      WWW_USER ALL = (ALL) NOPASSWD: WWW_COMMANDS

然后你可以用 curl 启动你的服务http://example.com/index.php

但是正如我所说,这是一个严重的安全风险。所以只有在你真的需要这样做的时候才这样做,真正重要的是,你的 nginx 只能执行,但不能写入文件index.php和plex.php。所以你的777权限实际上会导致特权提升漏洞。

相关内容