Php
通過 PHP 在 shell 腳本中啟動服務
所以我正在尋找一種使用 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 權限實際上會導致權限升級漏洞。