2014-04-28 58 views
1

我還沒有找到關於首選(最佳實踐)和/或安全方法的可靠信息,以允許php訪問Linux服務器上的配置文件或其他類型的文件在公共網站目錄或由apache用戶擁有,所以我希望能在這裏找到答案。安全地允許PHP讀寫系統文件

我是一個相當能幹的PHP程序員,但我越來越多地負責編寫Web應用程序(其中大部分不能通過網絡公開訪問),需要更新,更改或添加到配置文件或由某些服務或應用程序生成的文件在服務器上。

例如,我需要創建一個Web界面,用於查看,添加或刪除root所擁有的/etc/mail/spamassassin/white-list.cf文件中的條目。

另一種情況是,我需要php來解析用戶vmail擁有的/ var/vmail中的mime消息。

這些僅僅是一些示例,其他進程/用戶擁有的位置中還會有其他文件。我如何編寫PHP應用程序來安全地訪問和操作這些文件而不會造成安全風險?

+1

我不會推薦對root擁有的文件進行任何未經身份驗證的寫訪問權限。話雖如此,如果您對驗證用戶輸入非常嚴格,並且非常小心如何共享單個文件的所有權........我仍然不會這樣做。使用'cpanel','webmin'或者其他基於網絡的管理工具,這些管理工具已經具有這些功能和內置的安全功能。 –

+1

謝謝,我很欣賞這個輸入。不過,我並沒有要求通過網絡管理服務器的實用程序或應用程序。我正在尋找PHP代碼的最佳實踐來訪問網絡目錄之外的文件並由其他用戶擁有。換句話說,我想採取與cpanel,webmin等相同的方法。 – Avedis777

+0

我的總體策略是將由www-data更改的內容卸載到臨時文件或數據庫中,然後創建一個由root擁有並執行的單獨PHP腳本(作爲cronjob)解析所述輸入實際上執行配置覆蓋。 –

回答

-1

如果我需要實現這樣的事情,我可能會考慮使用類似sudo的東西來微調權限。我不是一個Linux CLI專家,所以我確信在輸入這些信息時我沒有考慮到這些問題。

我可能會確定需要完成哪些任務,並且會爲每個需要完成的任務編寫一個單獨的腳本。使用sudo,我只會爲該腳本分配必要的權限級別。

顯然,隨着任務數量的增加,複雜性和涉及的工作量也會增加。我不確定目前這將如何影響你。

+0

謝謝,我相信這是朝着正確的方向前進。目前,我通過php web界面填充數據庫中的信息來解決這些問題,然後使用cronjob來檢查新的數據庫條目並相應地更新所需的文件,充當「中間人」。儘管我相信這是完成這些任務的安全方式,但我覺得它可能有點過於複雜。 – Avedis777

+0

爲了澄清,您建議永久性地爲相關腳本和文件分配權限,或者使用shell_exec()臨時分配必要的權限並在腳本結尾處還原回去? – Avedis777

+0

我會使用'sudo'配置文件來永久分配權限。因此,給腳本'/ usr/bin/updatesomefile',使用'sudo'來允許PHP用戶使用'shell_exec'(或類似的)執行'sudo/usr/bin/updatesomefile'。在'/ usr/bin/updatesomefile'中你有你所有的更新邏輯。 – garbetjie