Acl

Mercurial (hg) 不遵守預設 ACL 設置

  • May 9, 2013

我正在嘗試使用 ACL 對各種 mercurial 儲存庫設置細粒度的訪問控制。當我將更改推送到儲存庫時,在其下創建的任何新文件/myrepo/.hg/store/data都沒有預設權限,使用者無法訪問它們。

這個問題是可重現的。假設使用者“myuser”是 www-data 組的一部分。在伺服器上:

hg init /tmp/test
chown root:root /tmp/test
chmod 770 /tmp/test
setfacl -Rdm g:www-data:rwx /tmp/test
setfacl -Rm g:www-data:rwx /tmp/test

在帶有 TortoiseHg 的 windows 盒子上,設置為使用plink.exe共享密鑰的 ssh:

hg clone ssh://myuser@servername//tmp/test test
#add file test1.txt and commit to test
hg push ssh://myuser@server//tmp/test
cd ..
hg clone ssh://myuser@servername//tmp/test test2  <---FAIL

回到伺服器檢查 ACL

getfacl /tmp/test/.hg/store/data/test1.txt.i
# file: tmp/test/.hg/store/data/test1.txt.i
# owner: myuser
# group: myuser
user::rw-
group::rw-
other::r--

所以新文件不是使用我添加到父文件夾的預設權限創建的/tmp/test。當您hg pull在伺服器和hg serve客戶端上執行此操作時,也會發生此問題。

/etc/fstab正在使用“預設,acl”選項安裝分區。還touch /tmp/test/test1按預期創建具有適當預設權限的文件

編輯

  • Mercurial 版本:2.0.2-1ubuntu1
  • Linux Ubuntu 12.04

以下是可能發生的事情:

  • 您正在通過“hg init”創建一個 /tmp/test/.hg 目錄,可能由於限制性 umask 而沒有組權限
  • 您正在遞歸設置 ACL,但沒有遞歸設置傳統權限位以匹配
  • 當在 .hg 下創建新文件時,Mercurial會複製*/tmp/test/.hg/*上的傳統權限位
  • 因此,新添加的文件沒有組權限
  • 根據定義,這會屏蔽您設置的任何預設 ACL 條目

修復:在您的儲存庫上設置適當的傳統 Unix 權限。

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