我成功地设法使用fpm使mod_fastcgi工作,这使我能够设置用户:通过fpm池定义运行脚本的组。但是,没有类似的选择,例如,运行mod_fastcgi的python脚本,所以我试图学习如何使用suexec通过mod_fastcgi运行任何脚本与用户:我选择的组。
我从这个有效的配置开始:
#/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()
内加/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
SuexecUserGroup michele michele
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根本没有开始。
我读了here suexec的检查列表 判断调用是否成功,但我不知道如何检查这些检查的结果是什么..它们应该写在suexec日志文件中,但是这个文件似乎永远不会被创建。 / p>
那么,我做错了什么?
非常感谢你们。
答案 0 :(得分:5)
在this帖子的帮助下,我终于成功了。我的第一个配置存在两个大问题:第一个是我没有启用suexec来使用fastcgi(这需要编辑fastcgi.conf配置文件);第二个是在我的第一个虚拟主机中,我根本没有使用fastcgi!当我意识到禁用fastcgi后系统工作原理时,我得到了这个。
然而,这些是对我有用的最后步骤(我在为此创建的Debian虚拟机中尝试了它们):
安装软件包(将non-free
添加到/etc/apt/sources.list
的{{1}}后):
libapache2-mod-fastcgi
添加全局fastcgi配置:
sudo apt-get install apache2 libapache2-mod-fastcgi apache2-suexec php5-cgi
在fastcgi配置中启用suexec(从sudo nano /etc/apache2/conf.d/fastcgi
# /etc/apache2/conf.d/fastcgi
FastCGIConfig -killInterval 60 -maxClassProcesses 1 -maxProcesses 50 -minProcesses 0 -startDelay 5
行中删除#
):
FastCgiWrapper
启用apache模块:
sudo a2dismod fastcgi
sudo nano /etc/apache2/mods-available/fastcgi.conf
# /etc/apache2/mods-available/fastcgi.conf
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
FastCgiWrapper /usr/lib/apache2/suexec
FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>
创建测试站点文件:
sudo a2enmod fastcgi suexec actions
创建apache虚拟主机:
sudo mkdir -p /var/www/vhosts/test
cd /var/www/vhosts/test
sudo mkdir cgi-bin etc httpdocs logs
sudo nano httpdocs/index.php
# /var/www/vhosts/test/httpdocs/index.php
<?php
echo exec('whoami');
phpInfo();
sudo nano cgi-bin/php5.fcgi
# /var/www/vhosts/test/cgi-bin/php5.fcgi
#!/bin/bash
export PHPRC=/var/www/vhosts/test/etc
export PHP_FCGI_CHILDREN=5
exec /usr/bin/php5-cgi
sudo chmod +x cgi-bin/php5.fcgi
sudo cp /etc/php5/cgi/php.ini etc/
sudo chown -R michele:michele .
重启apache
sudo nano /etc/apache2/sites-available/test
# /etc/apache2/sites-available/test
<VirtualHost *:80>
ServerAdmin webmaster@slothcompany.net
ServerName test.slothcompany.net
LogLevel notice
ErrorLog /var/www/vhosts/test/logs/error.log
CustomLog /var/www/vhosts/test/logs/access.log combined
ScriptAlias /php5.fcgi /var/www/vhosts/test/cgi-bin/php5.fcgi
FastCgiServer /var/www/vhosts/test/cgi-bin/php5.fcgi -processes 1 -user michele -group michele -idle-timeout 310 -flush
SuexecUserGroup michele michele
DocumentRoot /var/www/vhosts/test/httpdocs
<Directory /var/www/vhosts/test/httpdocs/>
Options FollowSymLinks ExecCGI
AllowOverride All
Action php5.fcgi /php5.fcgi
AddHandler php5.fcgi .php
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
sudo a2ensite test