【问题标题】:HgWebDir push permission denied errorHgWebDir 推送权限被拒绝错误
【发布时间】:2010-04-19 22:12:08
【问题描述】:

我有一个新的 Fedora 12 服务器,我正在尝试在上面设置 Mercurial。我有yum installed mercurial,大多数事情似乎都运行良好。但是,通过 apache 设置 hgwebdir.cgi 后,我无法对当前托管的唯一存储库执行 hg push。我得到的错误是:

searching for changes
abort: HTTP Error 500: Permission denied: .hg/store/lock

httpd 以 apache 用户身份运行

UID        PID  PPID  C STIME TTY          TIME CMD
root      1691     1  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1694  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1695  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1696  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1697  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1698  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1699  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1700  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd
apache    1701  1691  0 13:19 ?        00:00:00 /usr/sbin/httpd

我设置了权限,以便 apache 用户拥有整个 repo 和所有内容。在最后一次尝试中,我什至让 repo 全局可写。

[root@builds .hg]# ll
total 424K
drwxrwxrwx.  3 apache apache 4.0K 2010-04-19 14:43 .
drwxrwxrwx. 19 apache apache 4.0K 2010-04-15 13:33 ..
-rw-rw-rw-.  2 apache apache   57 2010-04-13 11:42 00changelog.i
-rw-rw-rw-.  1 apache apache   93 2010-04-16 15:33 branchheads.cache
-rw-rw-rw-.  1 apache apache 192K 2010-04-15 13:33 dirstate
-rw-r--r--.  1 apache apache  156 2010-04-19 14:43 hgrc
-rw-rw-rw-.  1 apache apache   42 2010-04-15 13:33 last-message.txt
-rw-rw-rw-.  2 apache apache   23 2010-04-13 11:42 requires
drwxrwxrwx.  4 apache apache 4.0K 2010-04-19 11:26 store
-rw-rw-rw-.  1 apache apache   45 2010-04-14 14:08 tags.cache
-rw-rw-rw-.  1 apache apache    7 2010-04-16 15:33 undo.branch
-rw-rw-rw-.  1 apache apache 192K 2010-04-16 15:33 undo.dirstate
[root@builds .hg]# cd store
[root@builds store]# ll
total 308K
drwxrwxrwx.  4 apache apache 4.0K 2010-04-19 11:26 .
drwxrwxrwx.  3 apache apache 4.0K 2010-04-19 14:43 ..
-rw-rw-rw-.  1 apache apache  20K 2010-04-16 15:33 00changelog.i
-rw-rw-rw-.  1 apache apache  81K 2010-04-16 15:33 00manifest.i
drwxrwxrwx. 17 apache apache 4.0K 2010-04-13 11:47 data
drwxrwxrwx.  3 apache apache 4.0K 2010-04-13 11:43 dh
-rw-rw-rw-.  2 apache apache 177K 2010-04-15 11:03 fncache
-rw-rw-rw-.  1 apache apache   67 2010-04-16 15:33 undo

我在以其他用户身份运行的机器上其他地方有一个 repo 的克隆。如果我将克隆 hgrc 文件的 [paths] 部分中的 default 值设置为服务器上的本地文件路径,则推送工作正常,但如果我将其切换为使用 url,我每次都会收到错误消息。

我如何设置它的一些可能的怪癖... hgwebdir.cgi 位于/var/www/cgi-bin 并且repo 是/opt/hg 的子代。我也关闭了 suexec,这似乎并没有解决问题。我在 apache 配置中添加的使 hgwebdir 运行的唯一行是:

ScriptAlias /hg "/var/www/cgi-bin/hgwebdir.cgi"

hgweb.config 也在/var/www/cgi-bin 中,它的内容是:

[collections]
/opt/hg = /opt/hg

[trusted]
users = *

[web]
baseurl = /hg
push_ssl = false
allow_push = *

回购浏览器工作正常,只是推送不起作用。 Apache error_log 根本没有关于这个错误的任何内容。

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    对我来说,是服务器上的权限设置错误。 chown -R www-data /path/to/repo(在服务器上)为我解决了所有问题......也许这对你来说是不同的。 祝你好运。

    【讨论】:

      【解决方案2】:

      我在 Ubuntu 上遇到了类似的问题。当我放松.hg 目录的权限时,问题就停止了。

      我从 repo 目录中做了一个chmod -R 777 .hg。之后,一切正常。我仍然需要四处寻找允许推送的最小许可选项,但这适用于我们的内部开发服务器。

      【讨论】:

      • 我不太喜欢为文件授予 777 权限,但它在第一次尝试时解决了我的问题。现在我将尝试了解哪些权限是错误的。顺便说一句,为我 +1。
      • 我也遇到了这个问题,但我没有给出 777,而是调查了 .hg/ 和工作目录中的某些文件/文件夹由 www-data 以外的其他用户拥有。所以我将它们更改为www-data,因为这是用户 hgweb.cgi 运行的身份。
      【解决方案3】:

      而不是 777,网络服务器在 apache 组下运行,您的存储库在 /opt/hg 中:

      执行 sudo chown :apache /opt/hg -R 将存储库添加到 apache 组并执行 sudo chmod g+w /opt/hg -R 以授予该组的写入权限。这样您只需提供足够的权限即可。

      顺便说一句,在 Ubuntu 下,apache 进程在 www-data 下运行,而不是在 apache 下运行。

      【讨论】:

        【解决方案4】:

        在我看来,repo 从第一个身份验证中被锁定,它获取变更集。 在获得 chagesets hg 后尝试再次进行身份验证,而我想,repo 仍然被锁定 Hg authticates 3 次失败前 (autenticação http: usuário goolic, senha **************)

        hg push https://versoes.solidarp.com.br/hgweb.wsgi/home/solidarp/public_repos/profile_andre --verbose --debug
        using https://versoes.solidarp.com.br/hgweb.wsgi/home/solidarp/public_repos/profile_andre
        sending between command
        autorização http requerida
        domínio: soliDARP
        usuário: goolic
        senha: 
        autenticação http: usuário goolic, senha **************
        enviando revisões para https://versoes.solidarp.com.br/hgweb.wsgi/home/solidarp/public_repos/profile_andre
        sending capabilities command
        autenticação http: usuário goolic, senha **************
        capabilities: changegroupsubset lookup pushkey unbundle=HG10GZ,HG10BZ,HG10UN stream=65537 branchmap
        sending heads command
        autenticação http: usuário goolic, senha **************
        procurando por mudanças
        common changesets up to 000000000000
        7 revisões encontradas
        list of changesets:
        3d58879c5dcc778704134804de35b0441412cb0f
        a3e6697fa72c9a4e06030b61a84bd2a00427f26f
        481ce6a7f0c58ed5b838fc86d1b93af6b857eaf1
        afed11efb8e2716675a7a39baf3b8b57c8740f44
        ba4d9574fd84311d3b894aea39e8338ad3b242cd
        aea9b49b6a933a11d4801d0dbab0e5b07d70b2d2
        9c1757572d3bac793332999e6966b1135bfaf844
        empacotando mudanças: 0 trechos
        empacotando mudanças: 1 trechos
        empacotando mudanças: 2 trechos
        empacotando mudanças: 3 trechos
        empacotando mudanças: 4 trechos
        empacotando mudanças: 5 trechos
        empacotando mudanças: 6 trechos
        empacotando mudanças: 7 trechos
        empacotando mudanças: 8 trechos
        empacotando mudanças: 9 trechos
        empacotando mudanças: 10 trechos
        empacotando mudanças: 11 trechos
        empacotando mudanças: 12 trechos
        empacotando mudanças: 13 trechos
        empacotando mudanças: 14 trechos
        empacotando mudanças: 15 trechos
        empacotando mudanças: 16 trechos
        empacotando mudanças: 17 trechos
        empacotando mudanças: 18 trechos
        empacotando mudanças: 19 trechos
        empacotando mudanças: 20 trechos
        empacotando mudanças: 21 trechos
        empacotando manifestos: 0 trechos
        empacotando manifestos: 1 trechos
        empacotando manifestos: 2 trechos
        empacotando manifestos: 3 trechos
        empacotando manifestos: 4 trechos
        empacotando manifestos: 5 trechos
        empacotando manifestos: 6 trechos
        empacotando manifestos: 7 trechos
        empacotando manifestos: 8 trechos
        empacotando manifestos: 9 trechos
        empacotando manifestos: 10 trechos
        empacotando manifestos: 11 trechos
        empacotando manifestos: 12 trechos
        empacotando manifestos: 13 trechos
        empacotando manifestos: 14 trechos
        empacotando manifestos: 15 trechos
        empacotando manifestos: 16 trechos
        empacotando manifestos: 17 trechos
        empacotando manifestos: 18 trechos
        empacotando manifestos: 19 trechos
        empacotando manifestos: 20 trechos
        empacotando manifestos: 21 trechos
        empacotando arquivos: .project 0 trechos
        empacotando arquivos: .project 1 trechos
        empacotando arquivos: .project 2 trechos
        empacotando arquivos: .project 3 trechos
        empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 4 trechos
        empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 5 trechos
        empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 6 trechos
        empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 7 trechos
        empacotando arquivos: src/Transporte/Busao.java 8 trechos
        empacotando arquivos: src/Transporte/Busao.java 9 trechos
        empacotando arquivos: src/Transporte/Busao.java 10 trechos
        empacotando arquivos: src/Transporte/Busao.java 11 trechos
        empacotando arquivos: src/Transporte/Busao.java 12 trechos
        empacotando arquivos: src/Transporte/Busao.java 13 trechos
        empacotando arquivos: src/Transporte/Busao.java 14 trechos
        empacotando arquivos: src/Transporte/Busao.java 15 trechos
        empacotando arquivos: src/Transporte/Busao.java 16 trechos
        empacotando arquivos: src/Transporte/Busao.java 17 trechos
        empacotando arquivos: src/Transporte/Cidade.java 18 trechos
        empacotando arquivos: src/Transporte/Cidade.java 19 trechos
        empacotando arquivos: src/Transporte/Cidade.java 20 trechos
        empacotando arquivos: src/Transporte/Cidade.java 21 trechos
        empacotando arquivos: src/Transporte/Cidade.java 22 trechos
        empacotando arquivos: src/Transporte/Cidade.java 23 trechos
        empacotando arquivos: src/Transporte/Cidade.java 24 trechos
        empacotando arquivos: src/Transporte/Cidade.java 25 trechos
        empacotando arquivos: src/Transporte/Cidade.java 26 trechos
        empacotando arquivos: src/Transporte/Cidade.java 27 trechos
        empacotando arquivos: src/Transporte/Cidades.java 28 trechos
        empacotando arquivos: src/Transporte/Cidades.java 29 trechos
        empacotando arquivos: src/Transporte/Cidades.java 30 trechos
        empacotando arquivos: src/Transporte/Cidades.java 31 trechos
        empacotando arquivos: src/Transporte/Controle.java 32 trechos
        empacotando arquivos: src/Transporte/Controle.java 33 trechos
        empacotando arquivos: src/Transporte/Controle.java 34 trechos
        empacotando arquivos: src/Transporte/Controle.java 35 trechos
        empacotando arquivos: src/Transporte/Controle.java 36 trechos
        empacotando arquivos: src/Transporte/Controle.java 37 trechos
        empacotando arquivos: src/Transporte/Controle.java 38 trechos
        empacotando arquivos: src/Transporte/Controle.java 39 trechos
        empacotando arquivos: src/Transporte/Controle.java 40 trechos
        empacotando arquivos: src/Transporte/Controle.java 41 trechos
        empacotando arquivos: src/Transporte/Controle.java 42 trechos
        empacotando arquivos: src/Transporte/Controle.java 43 trechos
        empacotando arquivos: src/Transporte/Controle.java 44 trechos
        empacotando arquivos: src/Transporte/Controle.java 45 trechos
        empacotando arquivos: src/Transporte/Controle.java 46 trechos
        empacotando arquivos: src/Transporte/Controle.java 47 trechos
        empacotando arquivos: src/Transporte/Controle.java 48 trechos
        empacotando arquivos: src/Transporte/Controle.java 49 trechos
        empacotando arquivos: src/Transporte/Controle.java 50 trechos
        empacotando arquivos: src/Transporte/Controle.java 51 trechos
        empacotando arquivos: src/Transporte/Controle.java 52 trechos
        empacotando arquivos: src/Transporte/Controle.java 53 trechos
        empacotando arquivos: src/Transporte/Interface.java 54 trechos
        empacotando arquivos: src/Transporte/Interface.java 55 trechos
        empacotando arquivos: src/Transporte/Interface.java 56 trechos
        empacotando arquivos: src/Transporte/Interface.java 57 trechos
        empacotando arquivos: src/Transporte/Interface.java 58 trechos
        empacotando arquivos: src/Transporte/Interface.java 59 trechos
        empacotando arquivos: src/Transporte/Interface.java 60 trechos
        empacotando arquivos: src/Transporte/Interface.java 61 trechos
        empacotando arquivos: src/Transporte/Interface.java 62 trechos
        empacotando arquivos: src/Transporte/Interface.java 63 trechos
        empacotando arquivos: src/Transporte/Interface.java 64 trechos
        empacotando arquivos: src/Transporte/Interface.java 65 trechos
        empacotando arquivos: src/Transporte/Interface.java 66 trechos
        empacotando arquivos: src/Transporte/Linha.java 67 trechos
        empacotando arquivos: src/Transporte/Linha.java 68 trechos
        empacotando arquivos: src/Transporte/Linha.java 69 trechos
        empacotando arquivos: src/Transporte/Linha.java 70 trechos
        empacotando arquivos: src/Transporte/Linha.java 71 trechos
        empacotando arquivos: src/Transporte/Linha.java 72 trechos
        empacotando arquivos: src/Transporte/Linha.java 73 trechos
        empacotando arquivos: src/Transporte/Linha.java 74 trechos
        empacotando arquivos: src/Transporte/Linha.java 75 trechos
        empacotando arquivos: src/Transporte/Linha.java 76 trechos
        empacotando arquivos: src/Transporte/Passagem.java 77 trechos
        empacotando arquivos: src/Transporte/Passagem.java 78 trechos
        empacotando arquivos: src/Transporte/Passagem.java 79 trechos
        empacotando arquivos: src/Transporte/Passagem.java 80 trechos
        empacotando arquivos: src/Transporte/Passagem.java 81 trechos
        empacotando arquivos: src/Transporte/Passagem.java 82 trechos
        empacotando arquivos: src/Transporte/Passagem.java 83 trechos
        empacotando arquivos: src/Transporte/Passagem.java 84 trechos
        empacotando arquivos: src/Transporte/Passagem.java 85 trechos
        empacotando arquivos: src/Transporte/Passagem.java 86 trechos
        empacotando arquivos: src/Transporte/Passagem.java 87 trechos
        empacotando arquivos: src/Transporte/Passagem.java 88 trechos
        empacotando arquivos: src/Transporte/Passagem.java 89 trechos
        empacotando arquivos: src/Transporte/Viagem.java 90 trechos
        empacotando arquivos: src/Transporte/Viagem.java 91 trechos
        empacotando arquivos: src/Transporte/Viagem.java 92 trechos
        empacotando arquivos: src/Transporte/Viagem.java 93 trechos
        empacotando arquivos: src/Transporte/Viagem.java 94 trechos
        empacotando arquivos: src/Transporte/Viagem.java 95 trechos
        empacotando arquivos: src/Transporte/Viagem.java 96 trechos
        sending unbundle command
        sending 6254 bytes
        autenticação http: usuário goolic, senha **************
        abortado: HTTP Error 500: Permission denied: .hg/store/lock
        

        【讨论】:

          【解决方案5】:

          这是一个 selinux 问题。

          我刚刚解决了同样的问题

          以 root 身份尝试此操作

          echo 0> /selinux/enforce

          然后再试一次。这将禁用 selinux 直到重新启动,因此要永久修复它,您需要禁用 selinux 或弄清楚如何禁用此特定问题

          这是我找到解决方案的地方

          http://mercurial.808500.n3.nabble.com/Push-Denied-hg-store-lock-FC12-https-ldap-wsgi-td814854.html

          selinux 在此处禁用信息

          http://www.crypt.gen.nz/selinux/disable_selinux.html

          【讨论】:

            【解决方案6】:

            在一个稍微不同的设置(ubuntu,存储库库中的 cgi 文件)上尝试解决类似的错误。 长话短说,我有两个主要问题:

            • 我最终删除了 baseurl 选项
            • hgrc 和 hgweb.config 中的选项似乎并不总是以相同的方式处理。

            【讨论】:

              【解决方案7】:

              我的情况与@pete-brumm 类似,但因为我稍后将过渡到受控区域,所以不能选择关闭 SELinux。

              像皮特所说的那样关闭 SELinux,然后重试该操作 - 如果它有效,那么您已经隔离了问题。像这样重新打开它:

              # echo 1> /selinux/enforce
              

              在完全关闭 SELinux 之前,请尝试更改存储库所在的安全上下文:

              # chcon -R -t httpd_sys_content_t /path/to/repo
              

              【讨论】:

                【解决方案8】:

                搜索这些档案的另一种可能性。

                我正在从 apache 运行 WSGIDaemonProcess,如下所示:

                  WSGIScriptAlias /hg /srv/www/hg/wsgiapp.py
                  WSGIDaemonProcess hgserve display-name=%{GROUP} user=hgrepo group=hgrepo \
                                  threads=10 maximum-requests=1000 \
                                  processes=2 umask=0007 inactivity-timeout=300
                  WSGIProcessGroup hgserve
                

                所以,在我的例子中,拥有 repo 中文件的 user:group 应该是 hgrepo:hgrepo,而且,事实上,我有这个权利。然而,果然,一个快速的实验 chmod 0777 揭示了这个问题在某种程度上是一个标准的所有权/权限问题。好吧,事实证明我在 apache 配置中有 另一个 WSGIDaemonProcess,完全出于不同的目的,指向不同的位置,并分配了不同的 processGroup、用户和组。尽管如此,这个(上面的)WSGIDaemonProcess 是以 other user:group 的身份运行的,所以,当然,它没有工作。目前,我刚刚删除了另一个过程,因为它只是实验性的,但是,首先,这是存档的一个。

                【讨论】:

                  猜你喜欢
                  • 2011-12-24
                  • 2013-01-17
                  • 1970-01-01
                  • 2018-10-24
                  • 2014-02-01
                  • 2018-07-19
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-09-25
                  相关资源
                  最近更新 更多