2011-05-08 48 views
3

我需要改變一個PHP腳本的用戶在運行時。我看過posix_setuid,但它看起來不安全,需要root私有權限。最好是用用戶密碼(如posix_setuid($username, $password))更改腳本的用戶標識,並避免以root用戶身份運行腳本。更改用戶PHP

我打開其他方法,和腳本並不一定需要PHP。但是,它將從apache中調用。

一個好的anology的情況是蘇的cPanel如何對用戶在其上的文件管理器當前登錄。

我需要,因爲我創建一個文件管理器爲多用戶設置更改用戶。目前,我設置了文件管理器,以便Apache以root用戶身份爲我的PHP文件管理器提供服務。但是,這是不合理的,因爲在代碼中存在安全錯誤的情況下,一個用戶可以編輯整個服務器上的文件。

我正在尋找一種方式來SU腳本登錄的用戶,這樣的安全漏洞的情況下,用戶只限於自己的文件。

+2

爲什麼你需要在運行時改變用戶?也許問題可以用另一種方式解決? – Crozin 2011-05-08 16:10:43

+0

我很樂意以另一種方式解決問題。如果您認爲自己有其他選擇,那麼請隨時繼續發佈。 – xaav 2011-05-08 16:21:09

+0

暗示的替代將取決於你的感受,你需要改變的用戶,但你不能在你的問題解釋了這個 – 2011-05-08 16:27:42

回答

6

我需要做的這一段時間以前。我基本上創建了一個bash腳本,它訪問只有root可以訪問的資源。下面是我所做的:

使用visudo命令更改/etc/sudoers

## Allow root to run any commands anywhere 
root ALL=(ALL)  ALL 
apache ALL= NOPASSWD: /sbin/myscript.sh 

我已經添加允許apache用戶無需輸入密碼運行/sbin/myscript.sh用sudo命令行。

之後,你可以把你的PHP文件如下得到的輸出:

$output = shell_exec("sudo /sbin/myscript.sh"); 
+0

這聽起來像是一個可能的解決方案。我會進一步調查,並將其標記爲正確的答案,如果它產生理想的結果。 – xaav 2011-05-08 16:41:59

+0

僅供參考我在我的服務器上使用CentOS 5.5,它工作正常。 – DarthJDG 2011-05-08 16:45:07

+0

好的,這看起來不錯。我將其標記爲正確的答案。 – xaav 2011-05-08 16:47:49

1

This recent question討論使用PHP這樣做兩種選擇:

  • PHP + FastCGI的與suexec的
  • suPHP
+0

此答案的問題是,我需要根據登錄的用戶更改用戶。如果以這種方式執行操作,我只能對一個用戶進行硬編碼。 – xaav 2011-05-08 16:42:54

+0

**以用戶身份運行**是指系統上整個進程的權限。爲了在具有不同權限的PHP應用程序中爲每個經過驗證的用戶實現一些業務功能,您不需要更改正在運行的進程的權限。如果你可以讓你的需求(原始問題)更清楚你想要完成什麼(例如「在我的應用程序中,我只希望用戶能夠管理屬於他們的小部件」),我們可以幫助你更好地。 – 2011-05-08 16:48:50