每次我從“eclipse”創建一個新檔案時,我需要運行這兩行程式碼來獲得讀取/寫入權限:
chmod -R 775 /var/www/folder/filename.extension
和/或
sudo chown -R www-data:www-data /var/www
而且,如果我將一些文件複製到該伺服器資料夾上,並從瀏覽器 URL 存取它,例如:
localhost/folder/filename.extension
我收到 Apache 伺服器的權限錯誤。
難道就沒有辦法讓我擺脫這個問題嗎?
*筆記:move_uploaded_file()
當我的函數嘗試將檔案移至/var/www/MyProject/
目錄時,會發生主要錯誤。
答案1
使用 SGID 位元。
執行一次,然後忘記這個問題:
chmod g+s /var/www/folder
您可能想要對所有子資料夾執行相同的操作:
find /var/www/folder -type d | xargs chmod g+s
並且,以防萬一:
find /var/www/folder -type d | xargs chgrp www-data
/var/www/folder/
現在,無論如何,在其下方建立的所有檔案都將屬於擁有包含資料夾的群組。這將允許您建立任何文件或資料夾,而不必擔心它們不屬於,例如www-數據組,這就是你想要的。
請注意,這僅適用於在目錄中建立的檔案或資料夾。如果檔案在其他地方建立並移至目錄樹中,您仍然需要手動變更所有權。
例子:
# Create folder that belongs to www-data group
$ mkdir test
$ chown john.www-data test
$ ls -l
drwxr-xr-x 2 john www-data 4096 Jun 17 10:14 test
# Create a file, check the ownership
$ touch test/file1
$ ls -l test/
-rw-r--r-- 1 john users 0 Jun 17 10:16 file1
# Set the SGID bit
$ chmod g+s test
$ ls -l
drwxr-sr-x 2 john www-data 4096 Jun 17 10:19 test
# Create a file, check the ownership
$ touch test/file2
$ ls -l test/
-rw-r--r-- 1 john users 0 Jun 17 10:18 file1
-rw-r--r-- 1 john www-data 0 Jun 17 10:19 file2
更多資訊這裡。
答案2
您可以使用預設 ACL 為新檔案和目錄指派使用者和群組權限:
setfacl -dR u:domain:rwx,g:www-data:rwx /var/www/folder/filename.extension
答案3
首先,我想指出的是,提問時應該更具體;例如,您使用什麼作業系統、Linux 發行版,因為這可以大大加快尋找解決方案的過程。話雖如此,您可以透過更改特定資料夾的所有權和聯合應用中心(使用者存取控制)遞歸地,如下所示:
chown domain:www-data /var/www/folder -chR
chmod 775 /var/www/folder -cR
筆記:透過排除尾部斜杠(/)在資料夾名稱末尾,您的變更將套用到該資料夾及其所有內容。
至於在瀏覽器中存取文件(腳本?)時出現的權限錯誤,您必須確保您的用戶具有正確的權限來提供apache
.應該透過編輯/etc/httpd/*/httpd.conf
文件並添加以下內容來解決這個問題:
User domain
Group www-data