Acl
Mercurial (hg) 不遵守預設 ACL 設置
我正在嘗試使用 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 權限。