2013-07-26 71 views
1

到目前爲止,我的搜索已經顯示了嘗試從PHP執行sudo'd命令時將會發生的潛在安全漏洞。通過PHP使用sudo執行shell命令

我目前的問題是我需要通過PHP的exec()函數在我的工作Web服務器上運行一個bash腳本作爲sudo。我們目前託管的網站少於200個。這樣做的網站只能通過我的辦公室的IP地址訪問。這是否會消除任何可用解決方案帶來的任何潛在安全問題?

其中一種方法是將apache用戶添加到sudoers文件,我認爲這將適用於整個服務器,因此仍然會在所有其他網站上提出問題。

在限制訪問我們的辦公室的網站上使用時,是否有任何解決方案不會構成安全威脅?

在此先感謝。

編輯:簡要背景

這裏的正是我想要實現的簡要說明。我工作的公司開發旅遊相關業務的網站等等。在創建新網站時,我需要設置一個託管軟件包,其中包括:爲新站點創建目錄結構,創建一個包含在httpd.conf中的apache配置文件,添加一個新的FTP用戶,創建一個新的用於網站CMS的數據庫僅舉幾例。

目前我在服務器上創建目錄結構的bash腳本,添加用戶,創建apache配置文件並正常重新啓動apache。這只是其中一部分,我期望做的是在PHP腳本中使用這個shell腳本,以簡單易用的方式自動完成整個網站生成過程,對於其他同事以及一般效率。

回答

1

你至少有4個選項:

  1. 添加apache用戶的sudoers文件(!並限制其運行一個命令)
    • 在這種情況下,一些安全漏洞的php-apps也可以運行該腳本(如果它們可以包含調用php例如 - 或者甚至通過使用另一個也稱爲腳本的mod_rewrite url來繞過對你的ip的限制)
  2. Flag th E腳本與s
    • 危險,不要這樣做。
  3. 運行,只有結合本地接口,而不是從外部
    • 訪問這是我的首選解決方案,因爲該鏈接調用PHP是從你的主網絡服務器和安全鏈接訪問另一個Web服務器可以單獨處理。您甚至可以爲此服務器創建一個新用戶。一些簡單的服務器可以完成這項工作,例如有python和perl的服務器模塊。甚至沒有必要,你可以在你的PHP安裝中啓用exec!
  4. 運行一個守護進程(的inotify例如,看文件的事件)或的cronjob讀取某些文件或DB-條目,然後運行命令
    • 這可能是過於複雜,有一個缺點,那守護進程無法檢查哪個腳本生成了條目。
+0

有將使用這個腳本沒有其他網址,請看我上面的編輯拿到的劇本不正是一個想法。它嚴格用於內部使用,客戶端網站都不會有任何對shell腳本的調用。這對於選項1(這似乎是最簡單的)的安全問題會產生什麼影響? –

+0

@威廉斯圖爾特:至少這是你的意圖!如果某些php軟件具有文件系統讀取訪問您正在調用shell腳本的php-script的權限,並且該軟件中的某個安全問題允許外部用戶包含您的php文件(允許執行shell腳本),那麼該腳本可以執行它! – urzeit

+0

@WilliamStewart:看我的編輯 – urzeit