
我正在為使用者(userA/、userB/等)建立多個資料夾,任何人都可以在任何目錄中建立/讀取檔案/資料夾(userC 可以在 userA/ 中建立 fileX)。但是,只有目錄的擁有者可以修改或刪除該資料夾中的檔案(userC 只能修改/刪除 userC/ 中的檔案)。
我嘗試將目錄權限更改為 7777,但是 SUID 不適用於目錄。
如何讓上傳的檔案繼承目錄擁有者?
編輯:UserZ 擁有目錄 dirZ/。 UserZ 可以建立(上傳)、修改、刪除和讀取 dirZ/ 內的所有內容。
同樣,UserY 擁有目錄 dirY/。使用者 Y 可以建立、修改、刪除和讀取 dirY/ 中的所有內容。
用戶Y可以存取dirZ/。 UserY 可以建立或讀取 dirZ/ 內的任何內容。用戶Y不能修改或刪除 dirZ/ 中的任何內容。
同樣,UserZ 可以存取 dirY/。 UserZ 可以建立或讀取 dirY/ 內的任何內容。用戶Z不能修改或刪除 dirY/ 中的任何內容。
答案1
大多數 UNIX 變體不允許使用者建立屬於另一個使用者的文件,這是有充分理由的。
很奇怪你會需要它。如果您希望 userC 能夠在userA
/ 內建立和刪除文件,請授予 userC 對該目錄的寫入權限。根據您的設置,最簡單的方法是將所有這些使用者放入一個公共群組中mygroup
,並使該群組的所有使用者目錄均可寫入。
chgrp mygroup userA userB userC
chmod g+w userA userB userC
使用存取控制清單 (ACL)如果您需要更大的靈活性(例如允許多個群組存取這些目錄)。看使目錄中的所有新文件可供群組訪問如果您需要協助啟動系統上的 ACL。
如果您希望使用者能夠修改其目錄之外的目錄中的文件,可以將文件設定為群組可寫,或在該目錄上設定預設 ACL。
setfacl -d -m group:mygroup:rwx userA userB userC
如果您確實需要更改文件的擁有者(但是為什麼這很重要,因為所有文件都可以由同一組使用者存取?),您可以透過上傳文件時以 root 身份運行的作業來完成此操作。在 Linux 上您可以使用基於inotify的工具如果您確實需要,但最好更改執行上傳的工具(一方面,使用基於 inotify 的解決方案,並且會在很短的時間內文件擁有錯誤的所有權)。
答案2
Unix 檔案系統沒有類似 Windows 的存取控制,這將使您能夠區分建立和修改檔案 - 一旦您授予使用者在目錄中建立檔案的權限 (chmod +w),他/她將也能夠修改它們。因此,您需要伺服器端來提供此額外的功能。
例如vsftpd
可以將chown
文件用於匿名的連線 - 我希望它能夠(或多或少容易地)擴展到其他使用者帳戶,而其他一些 FTP 守護程式可能已經具有此功能。
如果您不一定必須使用 FTP,Samba
似乎能夠滿足您的需求 - 看看(每股)inherit owner
選項。