我成功地使 mod_fastcgi 与 fpm 一起工作,这使我能够设置 user:group 通过 fpm 池定义运行脚本。但是,对于通过 mod_fastcgi 运行的 python 脚本没有类似的替代方案,所以我正在尝试学习如何使用 suexec 通过 mod_fastcgi 和我选择的 user:group 运行任何脚本。
我从这个工作配置开始:
#/etc/apache2/sites-available/test1
<VirtualHost *:80>
ServerName test1.slothcompany.net
DocumentRoot /var/www/test1
LogLevel Debug
ErrorLog /var/www/test1/error.log
<Directory /var/www/test1/>
Options Indexes Includes FollowSymLinks ExecCGI
AllowOverride All
DirectoryIndex index.php
AddHandler php5-fastcgi .php
Action php5-fastcgi /php5.fcgi
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#/var/www/test1/php5.fcgi
#!/bin/bash
PHPRC="/var/www/test1/php.ini"
PHP_FCGI_CHILDREN=5
export PHPRC
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
我放了一个phpInfo()
inside /var/www/test1/index.php
,它显示了正确的php.ini
路径。
现在,要激活suexec
i:
- 安装
apache2-suexec
:sudo apt-get install apache2-suexec
- 激活
mod_suexec
:sudo a2enmod suexec
- 更改文件的权限:
sudo chown -R michele:michele /var/www/test1
- 将此行添加到 vhost 配置中:
SuexecUserGroup michele michele
- 重新激活站点并重新启动 apache:
sudo a2dissite test1 && sudo a2ensite test1 && sudo service apache2 restart
用户:组michele:michele
存在于系统中。运行时,test1.slothcompany.net
我看到的phpInfo()
输出与以前完全相同,并echo exec('whoami');
打印www-data
而不是michele
.
sudo /usr/lib/apache2/suexec -V
告诉我日志文件应该在/var/log/apache2/suexec.log
,但不存在这样的文件。然后,我知道 apache 应该在 error.log 文件中记录 suexec 包装器的激活,作为通知,但是在 error.log 中也没有找到这样的通知。所以,我怀疑由于某种原因 suexec 根本没有开始。
我在这里阅读了 suexec 确定调用是否成功的检查列表,但我不知道如何检查这些检查的结果是什么......它说它们应该写在 suexec 日志文件中,但是这个文件似乎从未被创造出来。
那么,我做错了什么?
非常感谢大家。