我正在尝试使用 fcgid 设置每个用户的 trac 实例。问题是 trac 需要对 trac 实例的 rw 访问权限,因此我需要 fcgi 进程在相应的用户下运行。
我安装了 suexec、fcgid 和 userdir Apache 模块(在 Debian 上)。我设置了 vhost 指令
ScriptAliasMatch /~(.*)/trac /home/$1/public_html/trac.fcgi
只要 trac.fcgi 运行,这种方法就有效,但不幸的是,是在 www-data 用户下运行的。我怎样才能让 fcgid 在 $1 用户下启动它?
答案1
我正在使用 Rackspace 的 IUS RPM,并且 suexec 已默认编译和配置。
以下是我的 mod_fcgid 配置的相关部分:
LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script fcg fcgi fpl php
DefaultInitEnv PHPRC "/etc/"
FCGIWrapper /usr/bin/php-cgi .php
我建议删除“ScriptAliasMatch”指令,并全局或在 UserDir 部分中使用 AddHandler 指令。在我的设置下,任何 UserDir 文件夹(即 ~/public_html)都会自动为相关用户使用 suexec。
答案2
Trac 是用 Python 编写的,支持在 mod_wsgi 下运行(根据 FAQ 中的一项),因此我会放弃其中几个可移动的部分,转而使用出色的 mod_wsgi,它支持为脚本指定运行用户。我在另一个项目中使用了此功能,效果很好。
查看官方 mod_wsgi 文档,了解如何完成此操作,我发现文档中包含一个有关 Trac 集成的页面,其中包含许多示例,包括指定以特定用户身份运行。因此,您最好的选择就是阅读:
答案3
使用 mod_fastcgi,您可以使用以下命令启用 FastCGI 脚本的 Suexec 执行:
FastCgiSuexec '/usr/lib/apache2/suexec'
suexec 的路径可能需要修改,此示例来自 Debian 系统。