Mercurial(hg)はデフォルトの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「default、acl」オプションを使用してパーティションをマウントします。また、touch /tmp/test/test1期待どおりに適切な基本権限を持つファイルを生成します。

編集する

  • 記念版: 2.0.2-1ubuntu1
  • Ubuntu12.04

答え1

起こり得る状況は次のとおりです。

  • 制限的なumaskのため、グループ権限なしで "hg init"を介して/tmp/test/.hgディレクトリを作成しています。
  • ACL を再帰的に設定しますが、一致するようにレガシー権限ビットを再帰的に設定することはありません。
  • 水銀コピー既存の権限ビット/tmp/テスト/.hg/.hg の下に新しいファイルを生成する場合
  • したがって、新しく追加されたファイルにはグループ権限がありません。
  • 定義によって、これはユーザーが設定したデフォルトのACLエントリをブロックします。

修正:リポジトリに対する正しいレガシーUnix権限を設定します。

答え2

これ以上エラーを再現できません。この設定/テスト中に間違いを犯したようです。

関連情報