Apache-2.2
使使用者能夠通過 PHP 中的“su -”在伺服器上執行 shell 命令
我從 GitHub 下載了一個庫,可以在 PHP 腳本中執行 shell 命令。它是這樣工作的:
$process = new Process("su - {$login}"); $process->put($password); $process->put("\n"); $process->put($command); $process->put("\n"); $data = $process->get(); $process->put("exit"); $process->put("\n");
它基於
proc_open()
. 我在我localhost
的 Linux 登錄名和密碼上使用它,一切正常。我想在 Web 伺服器上使用這個庫。我想嘗試'www-data'
登錄,但不知道要傳遞什麼作為www-data's
密碼。使用什麼作為登錄來允許使用者在真實的 Web 伺服器上使用這個庫,而不是 localhost?(我將此發佈到stackoverflow,但他們否決了它並補充說它與程式無關,更多關於伺服器故障)
首先,從 web 伺服器 PHP 腳本執行系統命令,甚至將密碼以純文字形式儲存在 php 腳本中,這實際上是一個壞主意。想像一下,您正在獲取一些使用者輸入以將其傳遞給
$command
,現在如果您錯過了一些檢查,您將允許惡意使用者製作使用者參數以在您的系統上執行任意命令。接下來為什麼你實際上不能這樣做很可能是因為有兩件事:
- 您的 www-data 使用者很可能沒有設置任何密碼。這不允許使用
su
該使用者登錄。- 您的 www-data 使用者外殼很可能設置為
/sbin/nologin
有意義的內容,因為該使用者不應該以真實使用者身份登錄系統。但是您實際上不需要更改使用者來執行系統程序。此外,您的發行版很可能有該 www-data 使用者在其下執行 Web 伺服器(使用系統方式),並且您在 Web 伺服器上執行的每個 PHP 腳本都已經在該使用者權限下執行。只需執行您的命令而不執行 su 就可以了。像這樣的東西:
$process = new Process($command); $data = $process->get();
如果這不起作用,請參閱該庫手冊,了解如何在沒有 的情況下生成 shell
su
,可能$process = new Process('/bin/bash')
也可以。