2015-11-29 38 views
1

我在Apache Web服務器上使用PHP,但PHP缺少寫權限,無法創建新文件或修改現有文件,儘管需要修改的文件設置爲通常的644(並且文件夾是755)。如何讓644權限文件可從PHP寫入?

我的第一個猜測是,問題是PHP以與文件所有者不同的用戶身份運行,並且運行「posix_getpwuid(posix_geteuid());」我發現PHP運行爲「www-data」,而文件的所有者和組設置爲「company123」。所以也許我應該簡單地將文件的所有者更改爲「www-data」?

但後來我決定檢查一下我一直在使用的其他Web服務器。在我嘗試的第一個中,我沒有用PHP創建或修改644個文件的問題,然而,所有者和組被命名爲「600」,而PHP作爲用戶「wse253421」運行。顯然,PHP可以作爲一個用戶運行,並寫入由另一個用戶擁有的644個文件。這是如何運作的?

這是怎麼回事,我應該怎樣處理PHP在第一臺服務器上缺少寫入權限的問題?

+0

你也可以創建一個文件夾,並允許「寫」的文件夾如果沒有權限,請在Google中輸入權限文件php,您將找到一個答案 –

+0

我已經花了數小時在網上搜索答案。 「允許」寫入文件夾權限是什麼意思?該文件夾已具有通常的755權限。我需要更改的文件具有644權限,但將其更改爲664並沒有區別。從我所能看到的情況來看,權限與其他服務器上的權限相同,在這些服務器上運行良好。那麼你建議我改變什麼? – omanaga

回答

1

644對所有者和對世界的所有者具有讀/寫權限和只讀權限。因此,如果該文件不是運行於Web服務器的同一用戶所擁有的,則無論羣組如何,PHP都將無法寫入該文件。如果(如你所說)似乎是這樣做的,那麼Web服務器用戶就是文件所有者的別名,即它們共享相同的uid。

對於組寫入文件需要是664,並且該組需要與運行Web服務器的組相同(通常是www-data,但不能保證!)。如果該文件屬於不同的組,則664將不起作用。 666會,但不推薦,因爲它允許任何人寫入文件。

要創建新文件,目錄上的權限是重要的因素。 755是所有者的讀/寫/執行和組和世界的讀/執行。如果您想要編寫組,則需要775,並且該組需要與Web服務器運行時所在的組相同。

編輯: 如果您需要暫時檢查Web服務器用戶/組,請將目錄chmod改爲777,並讓它寫入一個文件。然後檢查文件的所有者和組。只是不要忘記chmod它回到一個更安全的設置

你的第一臺服務器的最佳解決方案可能是chgrp文件和目錄你需要寫入到您的網絡服務器組(可能是www-數據),文件模式的文件664和chmod目錄775

https://www.ics.uci.edu/computing/linux/file-security.php

參見托馬斯·魯特在這裏回答:https://askubuntu.com/questions/386928/default-permissions-for-var-www

+0

「因此,如果文件不是由運行Web服務器的同一用戶擁有的,那麼PHP將無法寫入該文件,而不管該羣組如何」。 那麼爲什麼我可以在其他服務器上寫入(644權限)文件,其中用戶名爲「wse253421」,文件所有者名爲「600」? – omanaga

+0

我懷疑600是wse253421的別名,即它們共享相同的uid – QuantumTiger

+0

謝謝!結果是這樣。我不知道用戶名和別名。你知道如果讓PHP作爲一個用戶運行而另一個用戶擁有這些文件(出於安全原因目的?),或者這可能是一個錯誤? – omanaga