首頁  >  文章  >  後端開發  >  如何在 PHP 中以特定使用者身分執行外部命令?

如何在 PHP 中以特定使用者身分執行外部命令?

DDD
DDD原創
2024-10-31 11:55:01961瀏覽

How to Execute External Commands as a Specific User in PHP?

在PHP 中以特定使用者身分執行外部命令

在伺服器端環境中工作時,經常會遇到需要執行外部命令列程式的情況來自PHP腳本。但是,執行 PHP 的預設使用者可能沒有足夠的權限或存取某些應用程式。

問題

考慮一個場景,您在本機上執行 Apache 並嘗試控制 Rhythmbox 播放來自以 www 使用者身分執行的 PHP 腳本。執行指令 Rhythmbox-client --pause 手動執行時間效果很好,但以 www-user 身分執行時失敗,因為 Rhythmbox 無法辨識或存取使用者的執行個體。

解決方案

一個有效的方法解決方案是利用 sudo 指令,讓您以特定使用者身分執行外部程式。這涉及修改sudoers 檔案(visudo) 以授予Web 伺服器使用者(例如wwwuser)運行特定命令的權限:

wwwuser ALL=/usr/bin/rhythmbox-client

這限制了Apache 只執行必要命令的能力,從而防止潛在的安全風險.

擴充解決方案

在這種特殊情況下,Rhythmbox 可能仍然無法辨識使用者的實例,因為PHP 是以www 使用者身分運作的。為了解決這個問題,建立一個呼叫Rhythmbox-client 的bash 腳本,並從執行使用者的環境中檢索DBUS_SESSION_BUS_ADDRESS:

<code class="bash">#! /bin/bash
DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2>> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1`
if [ "x$DBUS_ADDRESS" != "x" ]; then
        export $DBUS_ADDRESS
        /usr/bin/rhythmbox-client --pause
fi</code>

這個bash 腳本可以由PHP 作為www.作為PHP 應用程式的使用者。

以上是如何在 PHP 中以特定使用者身分執行外部命令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn