File-Permissions
chrooted 環境中的文件/文件夾權限和使用者/組權限(簡單場景大頭疼)
我知道通過Google搜尋可以在任何地方找到權限和特權操作方法,相信我,我已經做到了,並徹底閱讀了我能找到的關於該主題的所有資訊。要麼我不夠聰明,無法解決問題*(這裡很可能就是這種情況)*,要麼沒有辦法在我設置的上下文中實現我想要做的事情。
在任何情況下,任何回饋都將不勝感激。
設想
使用者和組
- user1:group1 - 這裡user1預設屬於他自己的組group1(即 - john:john)
- user2:group2 - 這裡 user2 預設屬於他自己的組 group2 (ie - jane:jane)
- group3 - 這裡 group3 是完全獨立的(即 sftp)
- user1 & user2 - 也屬於 group3
文件和文件夾
- 我在 /path/to/chroot 中為兩個使用者創建了一個 sftp 監獄(chroot sftp 使用 ssh 與使用者 1 的組 1 和使用者 2 的組 2 匹配的節)
- 我在 /path/to/chroot 中創建了 2 個文件夾 - “私人”和“公共”
- 我在 /path/to/chroot/public 中創建了 2 個文件夾 - “下載”和“上傳”
我想要達到的目標
“私人”文件夾
- 使用者 1 應該
- 擁有對“私人”文件夾、子文件夾和文件的完全訪問權限(讀/寫/執行)。
- 不允許刪除“私人”文件夾本身,但允許在其中執行任何操作
- 使用者 2 應該
- 根本無法訪問此文件夾/子目錄和文件
“公共”文件夾
- 使用者 1 應該
- 不允許刪除“公共”文件夾,但可以瀏覽它。
- 不允許在“公共”文件夾中寫入
- 使用者 2 應該
- 不允許刪除“公共”文件夾,但可以瀏覽它。
- 不允許在“公共”文件夾中寫入
“公共/下載”文件夾
- 使用者 1 應該
- 對“public/downloads”文件夾、子文件夾和文件具有完全訪問權限(讀/寫/執行)。
- 不允許刪除“public/downloads”文件夾本身,但允許在其中執行任何操作
- 使用者 2 應該
- 對“公共/下載”中的文件和文件夾具有隻讀訪問權限
- 不允許刪除“public/downloads”文件夾
“公共/上傳”文件夾
- 使用者 1 應該
- 對“public/downloads”文件夾、子文件夾和文件具有完全訪問權限(讀/寫/執行)。
- 不允許刪除“public/uploads”文件夾本身,但允許在其中執行任何操作
- 使用者 2 應該
- 允許在“公共/下載”中添加新文件/文件夾
- 被允許刪除/編輯他在“public/downloads”中上傳的文件
- 不允許在“public/downloads”中讀取/下載/執行不屬於他的文件
- 不允許在“公共/下載”中編輯/刪除不屬於他的文件
- 不允許刪除“public/downloads”文件夾
我已經完成的
- chroot (/path/to/chroot)
+ 私人(user1:group1 0770)
- 備份 - 個人的 - 其他
+ public (root:group3) chmod g+rx <– and –> setfacl -m “default:group::rx”
- **下載**(usesr1:group3) chmod g+s && chmod g+rx <-- 和 --> setfacl -m "default:group::rx" - **上傳**(root:group3) chmod g+s && chmod g+rwx <-- 和 --> setfacl -m "default:group::rwx"
這給出了以下結果
- “私人”文件夾歸 user1 所有,只有他和 group1 可以訪問它
- “public”文件夾歸 root 所有,group3 可以只讀方式訪問。
- 這意味著只有 root 可以在此文件夾內創建/修改/刪除文件/文件夾,但 group3 的成員可以訪問/讀取/下載它們。
- 該文件夾還將組的預設 acl 設置為“rx”,這意味著在此文件夾內創建的所有文件/文件夾預設情況下將繼承 group3 的只讀權限。
- “public/downloads”文件夾歸 user1 所有,group3 可以只讀方式訪問。
- 這意味著只有 user1 可以在此文件夾中創建/刪除/修改新文件/文件夾,但 group3 的成員可以訪問/讀取/下載它們。
- 該文件夾還將組的預設 acl 設置為“rx”,這意味著在此文件夾內創建的所有文件/文件夾預設情況下將繼承 group3 的只讀權限。
- 該文件夾還打開了“g+s”,這意味著 user1 創建的所有文件/文件夾將自動繼承 group3 組 ID
我在解決問題時遇到的問題
- user1 仍然可以刪除“私人”文件夾(ISSUE)。
- 我嘗試在“私人”文件夾上使用 chattr +i 但它沒有達到預期的效果,因為似乎在“私人”內部創建的文件/文件夾繼承了該屬性。
- 我目前在 Linux-Vserver 中工作,無法從 vserver 中 chattr +i 文件夾,因此必須通過主機進行操作(這是另一個問題,但可能很重要)。
- 目前,“public/uploads”文件夾歸 root 所有,group3 可以讀寫訪問。
- 這意味著 user1 和 user2 可以訪問/讀取/下載/創建/刪除/修改文件夾內的新文件/文件夾,但不能刪除它。(好的)
- 該文件夾還將組的預設 acl 設置為“rwx”,這意味著在此文件夾內創建的所有文件/文件夾預設將繼承 group3 的讀寫權限。
- 該文件夾還打開了“g+s”,這意味著 user1 創建的所有文件/文件夾將自動繼承 group3 組 ID
- 這意味著 user2 仍然可以下載/編輯/刪除儲存在“public/uploads”(ISSUE)中的所有文件/文件夾
- 我在“public/uploads”上嘗試了 +t(粘性位),但它沒有達到預期的效果,因為 user1 將無法再刪除裡面的文件。
我被困住了!
- 將“公共/上傳”的所有權更改為 user1
- 應該允許 user1 訪問內部的任何內容(好)
- 但現在可以刪除文件夾 (ISSUE)
- 其他可能的模組
- 將預設組 acl 設置為 rwx(對於 group3,所有新文件/文件夾將是 rwx)
- 設置 g+s(所有新文件都將繼承 group3 組 ID)
- 設置 +t (尚未測試,但希望只適用於組而不是所有者)
- 應該允許 user2 創建/修改/刪除他自己的文件,而不是其他人的文件(好)
- 但他也將被允許下載/查看他不是 (ISSUE) 所有者的文件。
當我開始研究這個時聽起來很微不足道,但目前看來我已經達到了我的極限。如果有人有任何想法或指針,請告訴我。
非常感謝,JS
這是一個應該做你想做的事的目錄結構。
# file: . # owner: root # group: root user::rwx group::r-x other::r-x # file: public # owner: root # group: root user::rwx group::r-x other::r-x # file: public/uploads # owner: user1 # group: group1 user::rwx group::r-x group:group3:rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:group1:rwx default:group:group3:--- default:mask::rwx default:other::--- # file: public/downloads # owner: user1 # group: group1 user::rwx group::r-x group:group3:r-x mask::r-x other::--- default:user::rwx default:group::r-x default:group:group3:r-x default:mask::r-x default:other::r-x # file: private # owner: user1 # group: group1 user::rwx group::rwx other::---
重要的區別是: 基本目錄和公共目錄由 root 擁有。這種方式 private 和 public/* 不能被 user1 刪除。public/uploads 有 default:group:group1:rwx 和 default:group:group3:—。這樣 user1 可以做任何事情,但 user2 不能對該目錄中的新文件做任何事情,除了他自己的文件。