Я пытаюсь настроить экземпляры трассировки для каждого пользователя, используя fcgid. Проблема в том, что trac требует доступа rw к экземпляру trac, поэтому мне нужно, чтобы процесс fcgi запускался под соответствующим пользователем.
У меня установлены модули Apache suexec, fcgid и userdir (в Debian). Я установил директиву vhost
ScriptAliasMatch /~(.*)/trac /home/$1/public_html/trac.fcgi
Это работает постольку, поскольку trac.fcgi запускается, но, к сожалению, от имени пользователя www-data. Как мне заставить fcgid запускать его под пользователем $ 1?
Trac написан на Python и поддерживает работу под mod_wsgi (согласно пункту в FAQ), поэтому я бы отбросил некоторые из этих движущихся частей и переключился на фантастический mod_wsgi, который поддерживает указание пользователя для скрипта, от имени которого запускается. Я использую эту функцию для другого проекта, и она хорошо работает.
Проверяя официальную документацию mod_wsgi, чтобы указать вам, как это делается, я вижу, что в документации есть страница по интеграции Trac, на которой есть много примеров, в том числе с указанием конкретных пользователей, от имени которых нужно запускать. Так что лучше всего просто прочитать:
Я использую RPM IUS от Rackspace, а 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 и использовать директиву AddHandler глобально или в разделе UserDir. В моих настройках любая папка UserDir (т.е. ~ / public_html) будет автоматически использовать suexec для данного пользователя.
С помощью mod_fastcgi вы можете использовать следующее, чтобы включить выполнение Suexec сценария FastCGI:
FastCgiSuexec '/usr/lib/apache2/suexec'
Возможно, потребуется изменить путь к suexec, этот пример взят из системы Debian.