如何配置git-lfs-transfer支持归属组用户访问仓库?
解决git-lfs-transfer识别仓库组权限的问题
问题概述
编译scutiger项目的git-lfs-transfer工具用于通过SSH传输LFS大文件,但当仓库所有权设为git:git(当前用户属于git组)时,工具报错提示用户不是仓库所有者,仅当仓库归属当前用户个人账号时才能正常工作。
核心原因
git-lfs-transfer默认仅检查仓库目录的用户所有权,未实现组权限校验逻辑——即使当前用户属于仓库所属组,工具仍会判定权限不足。
解决方案
方案1:修改scutiger源码,添加组权限校验
这是最彻底的解决方式,直接修改工具的权限检查逻辑:
- 打开scutiger项目中
cmd/git-lfs-transfer/main.go(或对应权限检查的源码文件) - 找到仓库所有权校验的代码段,原逻辑仅对比仓库目录的UID与当前用户UID
- 添加组权限校验逻辑:
- 获取仓库目录的GID
- 枚举当前用户所属的所有组ID,检查是否包含仓库的GID
- 若用户UID匹配或所属组包含仓库GID,则判定权限通过
- 重新编译git-lfs-transfer,替换服务器上的对应可执行文件
方案2:调整服务器端git-lfs-transfer的运行权限(临时兼容)
如果暂时不想修改源码,可以通过setgid权限调整工具的运行上下文:
- 在服务器上,将git-lfs-transfer的所属组设为git:
chown root:git /path/to/git-lfs-transfer - 给工具添加setgid权限:
这样工具运行时会继承git组的权限,从而允许属于git组的用户访问仓库。chmod g+s /path/to/git-lfs-transfer
验证方法
修改完成后,直接执行以下命令测试:
ssh {host ip} git-lfs-transfer /mnt/data/git-repos/tst.git upload
若不再返回repository path ... is not owned by current user错误,则配置生效。
内容的提问来源于stack exchange,提问作者dstibbe
相关产品推荐
相关产品推荐

