我目前正在研究是否可以在类似于 gitolite 为 git 所做的设置中提供 bzr。这意味着一个单一的 unix 帐户,不同的用户通过他们的 ssh 公钥进行管理。我很乐意将其与 gitolite 集成,在这种情况下,~/.ssh/authorized_keys
可以委托用户管理和创建合适的帐户。这将处理身份验证。
让我担心的是授权。据我所知,bzr serve
开箱即用只有--directory
提供访问控制的标志。这可以很好地为每个用户提供一组自己的存储库,或者将用户分配到组中并为每个组提供一组固定的存储库。再多做一点工作,就可以为每个用户使用一个目录,但使用符号链接允许多个用户共享对存储库的访问。
尽管如此,这仍然远远少于 gitolite 所能做的。使用这种方法,不可能授予个人用户对某些存储库的只读访问权限,但授予对其他存储库的读写访问权限。也不可能阻止覆盖推送或在用户目录中创建新存储库。
这些功能可能尚未实现。在相关的 Stack Overflow 问题我问的是实施我自己也做过。在 Server Fault 上我主要关注的是现存的解决方案。是否有任何现成的解决方案能够提供bzr serve
比简单限制更细粒度的访问控制--directory
?像 gitolite 这样完全集成的解决方案将是最有趣的,但即使是一些可以配置为解决我提到的问题之一的扩展也会很有帮助。
答案1
如果您不只坚持一个用户,您可以考虑以下设置:
- 每个用户都有自己的UID。
- 所有 bzr 用户的 umask 都是 002。
- 每个存储库都有一个所有者 UID 和一个唯一的写入权限组。
- 每个存储库都有一个基于所有者 UID 树的目录。
- 每个存储库目录都是 sgid(
chmod g+s <repo>
)。 - 每个存储库目录都有默认的 fileacl 所有者 rwX (
setfacl -R -m d:u:UID:rwX <repo>; setfacl -R -m u:UID:rwX <repo>
)。这确保所有者始终可以删除。 - 每个目录都有模式 775,每个文件都有模式 664。
- 共享存储库时,它会被符号链接到 UID 目录中,就像您提到的使用目录限制一样。
- 授予对存储库的写访问权限时,用户将被添加到与该存储库关联的写权限组中。
因此,您可以通过“符号链接存在”控制读取权限,并通过“组中的用户”控制写入权限。如果您想为存储库实现多个主用户,则可以为每个附加主用户添加一个额外的 d:u:UID:rwX,u:UID:rwX。