2010-01-06 48 views
13

我有一個需要連接到數據庫的PHP腳本。數據庫的憑證存儲在另一個php腳本中。Unix權限,讀取與執行(PHP上下文)

如果我將憑證文件的權限設置爲661,以便公有已執行權限但未讀取權限,是否允許主腳本訪問憑據並連接到數據庫,同時阻止某人使用用戶帳戶服務器查看憑證文件的內容?

我想我對讀和執行之間的區別感到困惑。一個php腳本(以www或類似的方式運行)需要讀取權限才能包含另一個php腳本並使用其中的任何內容?還是隻需要執行?讀取權限是否隱含給予執行權限?子問題:如果我將所有的腳本都設置爲只有執行權限而沒有讀取,那麼我是否應該有任何缺陷?這是假設我將離開任何文件我需要明確的讀取權限(數據文件)設置爲讀取。

回答

9

就文件而言,執行權限與您無關 - Web服務器運行的用戶帳戶需要訪問和讀取相關文件的權限。爲了遍歷目錄,用戶還需要在該目錄上執行許可。

如果您試圖讓您的腳本可以被Web服務器讀取(假設您正在以屬於組「www」的帳戶「www」運行),而不是由系統上的其他用戶運行,以下是我會做(假設你的帳戶「myuser的」):

# Change owner to "myuser" and group to "www" for file(s) in question 
chown myuser:www config.php 

# 640: myuser has rw-, www has r--, world has --- 
chmod 640 config.php 

如果你想阻止全球化的一個「祕密」目錄讀取任何文件,只是禁止執行位:

# 750: myuser has rwx, www has r-x, world has --- 
chmod 750 secrets 

如果您將所有腳本設置爲擁有執行權限但未具有讀取權限,則無人可以執行任何操作有用的東西(包括網絡服務器);-)

+0

請注意,如果其他用戶有權通過Web服務器運行自己的PHP代碼,那麼這不會阻止他們。在這種情況下,可以查看open_basedir或一個解決方案,它允許您以不同的用戶身份運行不同的虛擬主機/應用程序。 – oops 2010-01-06 02:53:59

+0

是的,經過仔細檢查,我發現www是小組中的成員,因爲我正在根據自己的困惑尋找目錄。我沒有試圖破解它,我只是想模仿他們所做的事情,但沒有反映它。 – Anthony 2010-01-06 03:31:39

12

腳本被讀取,未執行。腳本的執行權限告訴加載器或內核讀取shebang行並將腳本傳遞給指定的解釋器。

+0

因此,如果我有一個名爲「祕密」的文件夾中的腳本,並將祕密設置爲只執行,那麼曾經有人可以讀取祕密(但現在不)直接將文件名插入到nano等東西,仍然看到內容?我猜這是我真正關心的問題。 – Anthony 2010-01-06 02:40:17

+0

如果「祕密」是一個腳本,那麼如果運行該解釋器的用戶沒有對該腳本的讀取權限,則該祕密將無法運行。無論過去擁有什麼權限都無關緊要;權限的唯一時間是文件打開時,無論是閱讀還是運行。 – 2010-01-06 02:42:53