Php

通過 PHP 在 shell 腳本中啟動服務

  • October 2, 2020

所以我正在尋找一種使用 PHP 重定向啟動 Plex 媒體伺服器服務的方法。我基本上想通過轉到某個 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。

命令是錯誤的還是其他原因?

通常我會避免使用 webservers/php-fpm 執行 root 權限命令。所以想想,如果你真的需要它。要使用您已經存在的腳本成功執行此類作業,您需要將執行網路伺服器的使用者(通常是 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 權限實際上會導致權限升級漏洞。

引用自:https://serverfault.com/questions/1036106