HgWebDir推送权限被拒绝错误

时间:2010-04-19 22:12:09

标签: mercurial

我有一个新的Fedora 12服务器,我正在尝试设置Mercurial。我有yum install ed mercurial,大多数事情似乎都很好。但是,在通过apache设置hgwebdir.cgi之后,我无法对当前正在托管的唯一repo执行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和所有内容。在最后的尝试中,我甚至让回购全球可写。

[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文件的default部分中的[paths]值设置为服务器上的本地文件路径,则推送工作正常,但如果我将其切换为使用网址,我会得到每次都出错。

我如何设置它的一些可能的怪癖...... 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 = *

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

8 个答案:

答案 0 :(得分:15)

对我而言,服务器上的权限设置错误。一个chown -R www-data /path/to/repo(在服务器上)为我修好了......也许这对你来说是不同的。 祝好运。

答案 1 :(得分:11)

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

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

答案 2 :(得分:4)

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

执行sudo chown :apache /opt/hg -R将存储库添加到apache组和sudo chmod g+w /opt/hg -R以授予对组的写访问权。这样你只需提供足够的权限。

在Ubuntu下的BTW,apache进程在www-data而不是apache下运行。

答案 3 :(得分:1)

在我看来,repo是从第一个auth锁定的,因为它获得了更改集。 获取chagesets后,hg再次尝试进行身份验证,而我认为,repo仍处于锁定状态 在失败之前Hg autehticates 3次(autenticaçãohttp:usuáriocorolic,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

答案 4 :(得分:1)

这是一个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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我和@ pete-brumm有类似的情况,但是因为我将在稍后过渡到受控区域,关闭SELinux不是一个选择。

像皮特说的那样关闭SELinux并重试动作 - 如果它有效,你就已经解决了这个问题。像这样把它重新打开:

# echo 1> /selinux/enforce

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

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

答案 7 :(得分:0)

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

我正在从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中文件的组应该是hgrepo:hgrepo,事实上,我有这个权利。然而,果然,快速实验chmod 0777显示该问题在某种程度上是标准的所有权/权限问题。好吧,事实证明我在apache配置中有另一个 WSGIDaemonProcess,用于完全不同的目的,指向不同的位置,并分配了不同的processGroup,user和group。然而,这个(上面)WSGIDaemonProcess正在运行其他用户:组,因此,当然,它无法正常工作。现在,我刚刚删除了其他流程,因为它只是实验性的,但是,fwiw,这是档案馆的一个。