2008-09-25 132 views
6

我的Apache服务器运行在一些非默认(非根)帐户上。当它试图运行一个python脚本这反过来执行颠覆checkout命令,“svn签”失败,出现以下错误信息:在apache和mod_python下运行颠覆

svn: Can't open file '/root/.subversion/servers': Permission denied 

同时运行里面颠覆结账命令python脚本从同一用户帐户下的命令行进行得非常顺利。

带有mod_python 3.2.8的Apache服务器2.2.6运行在Fedora Core 6机器上。

有人可以帮我吗?非常感谢。

回答

0

尝试为该文件授予Apache用户(运行apache服务的用户)r + w权限。

5

这听起来像你的Apache进程运行的环境有点不寻常。无论出于何种原因,svn似乎认为它需要的用户配置文件在/ root中。你可以避免SVN使用这些文件的根目录版本通过指定命令行上使用的config目录,比如:

svn --config-dir /home/myuser/.subversion checkout http://example.com/path 

虽然没有固定的enviornment,它至少会允许你有你的脚本正常运行...

+0

大加赞赏,道格拉斯,这迅速解决,我有同样的问题。 – 2011-04-28 19:29:50

0

Apache的错误日志不给你一个线索吗?

也许它与SELinux有关。检查/var/log/audit/audit.log并相应地调整你的SELinux配置,如果audit.log文件指出它是拒绝Apache访问的SELinux。

0

Permission Denied错误显示脚本以root用户凭据运行,因为它正在root的主目录中查找文件。

我建议你换钩脚本来的东西做:

id > /tmp/id 

,这样就可以检查的结果,以确保UID/GID和EUID/EGID是什么。您可能会发现它并不像您认为的那样正在运行。

我的第一个猜测,就像Troels一样,也是SELinux,但如果你确定通过Apache运行的脚本与你手动测试的用户/组完全相同,那么这只是我的猜测。

0

恩,谢谢所有回答问题的人。无论如何,我想我已经解决了神秘事件。

SELinux在机器上完全禁用,所以问题是'svn co'无法为其运行的用户帐户找到config_dir。

Apache/mod_python没有在Apache运行的用户帐户的shell环境中读取。因此,对于examle没有$ HOME通过mod_python的当Apache 下一些真正的用户(没有人)

现在的“svn合作”有一个标志--config-dir的指向配置目录读取PARAMS运行见过。默认情况下它是$ HOME/.subversion,即它对应于用户帐户主目录。显然,当没有$ HOME存在mod_python去根目录dir(/根),并试图摆弄。颠覆内容 - 显然 失败惨败。

SETENV HOME /家用/ QA

到/etc/httpd/conf/httpd.conf中没有解决,因为无关使用shell环境SETENV的问题 - 只有它套阿帕奇相关的环境

同样PythonOption - 仅设置了mod_python可与

运行后req.get_options()读取相关的变量“SVN共同--config-DIR /家/ ......”肯定给runni的解决方法ng从mod_python中,但阻碍那些将尝试从命令行运行脚本的人。

所以所提出的(和工作)的解决方案是之前开始appache设置HOME环境变量。

例如在/etc/init.d/httpd脚本

QAHOME=/home/qa 
    ... 
    HOME=$QAHOME LANG=$HTTPD_LANG daemon $httpd $OPTIONS 
0

正在发生的事情就是Apache正在启动以root的环境变量,因此它认为它应该找到它的配置文件/根/。不是这种情况。 发生的事情是,如果你做须藤apache2ctl开始,它拉你的$ HOME变量从须藤$ HOME = /根/

我刚刚找到了解决这个问题我自己(虽然mod_perl的,但同样的事情)

运行此命令(如果它的Apache 1,去除2):

sudo /etc/init.d/apache2 stop 
sudo /etc/init.d/apache2 start 

当/etc/init.d/apache2启动Apache的,它集所有的Apache应该下运行适当的环境变量。