
我確信這是一個簡單的問題,但我似乎找不到任何無法讓它發揮作用的原因。
我正在嘗試在 PHP 伺服器的 Web 根目錄中設定群組資料夾。每個部門都應該有這樣的小組:
/srv/www/htdocs/dev/dept1
/srv/www/htdocs/dev/dept2
群組dept1 中的所有使用者都應該具有對dept1 資料夾的讀取/寫入存取權限,dept2 中的所有使用者都應該具有對dept2 資料夾的讀取/寫入存取權限,等等。建立了一個如下所示的群組:
sudo groupadd dept1
sudo useradd -G dept1 -m user1
cd /srv/www/htdocs/dev
mkdir dept1
sudo chown -R wwwrun:dept1 dept1
sudo chmod -R g+rwxs dept1
wwwrun
是 Apache 運行時的使用者。這個想法是讓用戶能夠在其部門資料夾中創建/讀取/更新/刪除他們想要的任何內容。但是,嘗試後,使用者帳戶可以查看資料夾的內容並讀取文件,但不能建立或寫入文件。
我究竟做錯了什麼?
答案1
使用您授予的權限,dept1
群組中的使用者可以建立和刪除/srv/www/htdocs/dev/dept1
.但是,在典型配置下,它們將建立的檔案和子目錄將不可群組寫入。
您可以透過更改每個人的遮罩環境。 umask 設定決定什麼權限不是給新文件。它通常設定為 022,這意味著除非明確指定,否則檔案將不可群組寫入或其他可寫入。您可以將其變更為 002,以便檔案預設為群組可寫入。但是,只有當每個使用者都有自己的私有群組時,這才是合理的(否則,人們的檔案將可由其主要群組中的每個人寫入)。
更好的解決方案是確保存取控制列表在所在的檔案系統上啟用/srv/www/htdocs/dev
(確保該fstab
條目包含acl
在第四列中)。然後建立一個 ACL,srv/www/htdocs/dev/dept1
授予dept1
群組對該目錄的寫入權限,並使該權限授予由目錄中新建立的條目繼承。這類似於 umask 更改,但它與檔案系統中的這個特定位置相關。執行以下兩個命令後,所有典型用例中的權限都將是正確的。
setfacl -R -m group:dept1:rwx /srv/www/htdocs/dev/dept1
setfacl -R -d -m group:dept1:rwx /srv/www/htdocs/dev/dept1
答案2
您的用戶如何存取這些文件?他們如何嘗試更新/創建它們?我假設他們正在登入伺服器,讓他們執行“groups”命令以確保它們實際上位於正確的群組中,並且應該首先列出。