File-Permissions

chrooted 環境中的文件/文件夾權限和使用者/組權限(簡單場景大頭疼)

  • October 24, 2013

我知道通過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. 使用者 1 應該
  • 擁有對“私人”文件夾、子文件夾和文件的完全訪問權限(讀/寫/執行)。
  • 不允許刪除“私人”文件夾本身,但允許在其中執行任何操作
  1. 使用者 2 應該
  • 根本無法訪問此文件夾/子目錄和文件

“公共”文件夾

  1. 使用者 1 應該
  • 不允許刪除“公共”文件夾,但可以瀏覽它。
  • 不允許在“公共”文件夾中寫入
  1. 使用者 2 應該
  • 不允許刪除“公共”文件夾,但可以瀏覽它。
  • 不允許在“公共”文件夾中寫入

“公共/下載”文件夾

  1. 使用者 1 應該
  • 對“public/downloads”文件夾、子文件夾和文件具有完全訪問權限(讀/寫/執行)。
  • 不允許刪除“public/downloads”文件夾本身,但允許在其中執行任何操作
  1. 使用者 2 應該
  • 對“公共/下載”中的文件和文件夾具有隻讀訪問權限
  • 不允許刪除“public/downloads”文件夾

“公共/上傳”文件夾

  1. 使用者 1 應該
  • 對“public/downloads”文件夾、子文件夾和文件具有完全訪問權限(讀/寫/執行)。
  • 不允許刪除“public/uploads”文件夾本身,但允許在其中執行任何操作
  1. 使用者 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 &lt;-- 和 --&gt; setfacl -m "default:group::rx"
 - **上傳**(root:group3) chmod g+s && chmod g+rwx &lt;-- 和 --&gt; setfacl -m "default:group::rwx"

這給出了以下結果

  1. “私人”文件夾歸 user1 所有,只有他和 group1 可以訪問它
  2. “public”文件夾歸 root 所有,group3 可以只讀方式訪問。
  • 這意味著只有 root 可以在此文件夾內創建/修改/刪除文件/文件夾,但 group3 的成員可以訪問/讀取/下載它們。
  • 該文件夾還將組的預設 acl 設置為“rx”,這意味著在此文件夾內創建的所有文件/文件夾預設情況下將繼承 group3 的只讀權限。
  1. “public/downloads”文件夾歸 user1 所有,group3 可以只讀方式訪問。
  • 這意味著只有 user1 可以在此文件夾中創建/刪除/修改新文件/文件夾,但 group3 的成員可以訪問/讀取/下載它們。
  • 該文件夾還將組的預設 acl 設置為“rx”,這意味著在此文件夾內創建的所有文件/文件夾預設情況下將繼承 group3 的只讀權限。
  • 該文件夾還打開了“g+s”,這意味著 user1 創建的所有文件/文件夾將自動繼承 group3 組 ID

我在解決問題時遇到的問題

  1. user1 仍然可以刪除“私人”文件夾(ISSUE)。
  • 我嘗試在“私人”文件夾上使用 chattr +i 但它沒有達到預期的效果,因為似乎在“私人”內部創建的文件/文件夾繼承了該屬性。
  • 我目前在 Linux-Vserver 中工作,無法從 vserver 中 chattr +i 文件夾,因此必須通過主機進行操作(這是另一個問題,但可能很重要)。
  1. 目前,“public/uploads”文件夾歸 root 所有,group3 可以讀寫訪問。
  • 這意味著 user1 和 user2 可以訪問/讀取/下載/創建/刪除/修改文件夾內的新文件/文件夾,但不能刪除它。(好的)
  • 該文件夾還將組的預設 acl 設置為“rwx”,這意味著在此文件夾內創建的所有文件/文件夾預設將繼承 group3 的讀寫權限。
  • 該文件夾還打開了“g+s”,這意味著 user1 創建的所有文件/文件夾將自動繼承 group3 組 ID
  1. 這意味著 user2 仍然可以下載/編輯/刪除儲存在“public/uploads”(ISSUE)中的所有文件/文件夾
  • 我在“public/uploads”上嘗試了 +t(粘性位),但它沒有達到預期的效果,因為 user1 將無法再刪除裡面的文件。

我被困住了!

  1. 將“公共/上傳”的所有權更改為 user1
  • 應該允許 user1 訪問內部的任何內容(好)
  • 但現在可以刪除文件夾 (ISSUE)
  1. 其他可能的模組
  • 將預設組 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 不能對該目錄中的新文件做任何事情,除了他自己的文件。

引用自:https://serverfault.com/questions/548327