【问题标题】:Insufficient Permission Pushing to Git Shared Repo over Smart HTTP通过智能 HTTP 推送到 Git 共享存储库的权限不足
【发布时间】:2011-10-25 22:43:21
【问题描述】:

我正在尝试为我们的团队评估 git,其中一项要求是使用 HTTPS 作为传输方法。我一直在尝试关注git-http-backend 文档以及一些关于使用新的智能 HTTP 传输进行设置的稀疏博客,但我只是没有让它工作。我知道这可能是愚蠢的,但我绞尽脑汁却无济于事。不要假设对 git 有任何真正的了解,我对这个工具还很陌生。


现在我可以通过 HTTP 克隆就好了,但是当我尝试推送时,客户端得到:

$ git push
Username:
Password:
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
error: unpack failed: unpack-objects abnormal exit


服务器 Apache 错误日志显示:

错误:将对象添加到存储库数据库的权限不足 ./objects

致命:写入对象失败


阿帕奇配置:

SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<Location /git>
        AuthType Basic
        AuthName "Private Git Access"
        Require valid-user
        AuthUserFile /opt/git/passwords
</Location>


显然我的第一个想法是文件权限,所以我做了一个快速的 chown -R apache: /opt/git

# ls -l /opt/git
drwxr-xr-x. 7 apache apache 4096 Aug 12 11:06 project.git

但我仍然遇到同样的错误。

谢谢,非常感谢我能得到的任何帮助。

【问题讨论】:

  • 这最终导致 SELinux 阻止从 apache 写入目录。

标签: linux git apache permissions smart-http


【解决方案1】:

尝试运行:

git repo-config core.sharedRepository true

这为我解决了类似的问题。来自文档:

core.sharedRepository

如果为 true,则该存储库可在多个用户之间共享 组(确保所有文件和对象都是组可写的)。

您能否验证此处给出的步骤(这绝对是权限/组问题):

http://parizek.com/?p=177

【讨论】:

  • 谢谢,但不幸的是,这似乎无法解决此错误。 # git repo-config core.sharedRepository true # cat config [core] repositoryformatversion = 0 filemode = true bare = true sharedRepository = true
  • 我在这里假设这发生在 apache 进程用户 (apache) 下的服务器上。 $ 组阿帕奇 = “阿帕奇:阿帕奇”。以apache为组运行该帖子中的所有(3)个命令-同样的错误。我什至授予每个人对整个 repo 的 r/w 权限,但仍然出现同样的错误!
  • 呃。 SELinux 再次踢我的@ss。禁用它,一切正常。
  • @bfos - 啊,是的,我应该记得的!
【解决方案2】:

解决办法大概是在服务器上repository的组权限中。

  1. cd 到 /opt/git
  2. sudo chgrp -R apache project.git

我的东西 apache 通常作为 www-data 运行,而不是 apache,所以该组也可能是错误的

我使用 gitosis 并通过服务器帐户而不是 Apache 来管理帐户,但是用这种解决方案解决了我同样的问题

【讨论】:

  • 我一直认为它一定是这样的,但它似乎并不想工作。我正在使用的这个发行版(CentOS)作为“apache”运行。从帖子中的“ls”中,您可以看到用户和组都是“apache”,但为了安全起见,我做了一个明确的递归 chgrp,但仍然是同样的错误。顺便说一句,下一步是使用 gitosis/gitolite 进行设置,希望能插入我们的 Atlassian Crowd SSO 目录。
猜你喜欢
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
相关资源
最近更新 更多