Permissions

組中的使用者可以訪問另一個使用者主目錄中的文件嗎?

  • November 25, 2015

我在“管理員”組中有 3 個使用者ABC 。我有另一個使用者’ D ‘在其主目錄中有一個project文件夾。我已將D作為該文件夾的所有者,並使用chgrp. 組和所有者擁有所有權限,但ABC仍然無法訪問該文件夾。我有兩個問題:

  1. 其他使用者是否有可能訪問其他使用者目錄中的任何內容
  2. 授予組權限只會使該組中的使用者可以訪問任何使用者主目錄之外的文件?

編輯:這是我設置項目所有者和組的方式

sudo chown -R D project
sudo chgrp -R admin project

嘗試進入D的主目錄中的文件夾時出現錯誤(以projectA身份登錄時)

cd /home/D/project
-bash: cd: /home/D/project: Permission denied

這是ls -la命令的輸出:

drwxrwsr-x 7 D admin      4096 Nov 18 13:06 project

這是該組的描述admin

getent group admin
admin_users:x:501:A,B,C

另請注意,當我從使用者Dadmin鍵入時,組未列出,但在我使用時可見。我所說的D使用者實際上是(亞馬遜伺服器上的預設 Fedora 使用者)groups``cut -d: -f1 /etc/group``ec2-user

最終,我在伺服器上設置了一個 git 儲存庫。我已經在D的主目錄中創建了儲存庫,但希望ABC也可以訪問它(並複製它們)

有些觀點似乎是必要的(儘管我坦率地承認我不是這些問題的專家),而 RobertL 的其他令人欽佩的徹底答案並未涵蓋這些觀點。

  1. 確保其他使用者實際登錄到組admin

A$ newgrp admin

由於使用者已經在組中,我認為您不需要設置組密碼。如果你這樣做:

A$ sudo chgpasswd

admin:secret (輸入標準輸入)

  1. 確保D的主目錄在組中admin並且可以組搜尋。

D$ chgrp admin ~

D$ chmod g+x ~

D$ ls -lad ~

drwx--x--- 3 D admin 4096 Nov 24 19:25 /home/D

該目錄需要是可搜尋的,以允許使用者輸入它或其子目錄project。它不需要是組可讀的,所以D自己的文件名仍然是私有的。為了讓其他使用者project輕鬆訪問,讓他們創建指向它的符號連結;否則,他們每次都必須輸入整個路徑(自動完成功能不起作用,因為 shell 無法讀取路徑名,它只能訪問它)。

  1. 是的,使用者可以訪問另一個使用者主目錄中的文件。
  2. 不,系統文件權限之外的主目錄沒有特殊處理。“授予群組權限”包括兩個部分,授予群組所有權和設置群組權限。您的範例僅涉及所有權。

您可以使用該命令遞歸地設置權限chmod,但僅此一項並不能保證該組中的一個成員創建的新文件可供其他成員訪問。

感謝您提供了迄今為止所做的工作,提供了足夠的詳細資訊,並說明了您共享git儲存庫的目標。

我們先來看看在 Unix 和 Linux 上如何實現組文件共享的一般方式,然後再看看git.

基本群組文件共享配置

以下是 Unix 和 GNU 等中此類文件共享的一些基礎知識。這是一種設置一個或多個目錄的簡單方法,其中組的所有成員都對組中其他使用者創建的文件具有讀寫權限.

假設您的普通使用者組是gitusers並且目錄是repo.

  1. 將共享成員放入一個公共組(例如gitusers)。
  2. 為組umask 002中的所有使用者設置,表示預設創建大多數文件是組可寫的。這可以在各種 shell 啟動文件(例如/etc/bash.bashrc)中設置。在 GNU/Linux 系統上,請參閱man 8 pam_umaskman umask以獲得更多更好的資訊。
  3. -R在所有共享文件上遞歸地設置組所有權 ( ):
chgrp -R gitusers repo
  1. 對所有文件遞歸設置組讀寫權限:
chmod -R g+rw repo
  1. 設置 repo 和所有子目錄的set group id on execution bit( setgid)。表示該setgid目錄中新創建的文件和子目錄繼承與父目錄相同的組所有權。新的子目錄也setgid設置了位,以獲得遞歸效果:
find repo -type d -exec chmod g+s {} \;

完成上述步驟後,您應該可以gitusers在範例中為同一組中的所有使用者讀寫彼此的文件,同時禁止不在gitusers共享組中的使用者的寫入權限。您可以在任意數量的目錄上複製chown,chmodfind命令,以實現您希望的任何共享目的,而不僅僅是git.

共享git倉庫

似乎git僅通過上述配置更改就可以正常工作。但是git,也知道共享和組權限(實際上可能會為您執行上述一些操作)。

如果您要創建共享git儲存庫,請考慮以下選項:

git init --bare --shared=group  repo

如果您有現有的儲存庫,請考慮以下設置:

  1. 核心裸機
  2. core.sharedRepository=組

有關更多詳細資訊,請參見git-init手冊頁手冊頁git-config

筆記

雖然裸的、組共享的git儲存庫將處理與一般範例中相同的一些步驟,但我建議也執行一般範例中的步驟以確保一致性並便於設置任何其他共享目錄。

引用自:https://unix.stackexchange.com/questions/244297