我正在使用 Apache2 和 PHP 7.0 与 FastCGI 设置 suexec 环境。
我已经按正常方式安装了一切
Aptitude install libapache2-mod-fcgid apache2-suexec-custom
A2enmod suexec
我的服务器具有以下结构:
- 有些用户的网站位于 /home/用户名/public_html/(Linux 用户“用户名“)
- 并且有一个主网站,其文档根位于 /data/www/(用户“主页”)。
SuEXEC 到目前为止可以正常工作,但有一个主要问题:出于某种原因,suEXEC 查询 /etc/apache2/suexec/www-data 而不是 /etc/apache2/suexec/username ,因此我只能让位于 /data 的网站工作,或者让位于 /home 的网站工作,但不能同时工作。我不明白这一点,因为我的服务器上没有脚本属于 www-data。
/etc/apache2/suexec/www-data(未更改,因为我不使用 www-data)
/var/www
public_html/cgi-bin
/etc/apache2/suexec/主页
/data
www/cgi-bin
/etc/apache2/suexec/用户XYZ
/home/userXYZ
public_html/cgi-bin
/数据/www/cgi-bin/php-fcgi
#!/bin/sh
export PHPRC="/etc/php/7.0/cgi"
exec /usr/bin/php-cgi
/主页/用户XYZ/public_html/cgi-bin/php-fcgi
#!/bin/sh
export PHPRC="/etc/php/7.0/cgi"
exec /usr/bin/php-cgi
在 /etc/apache2/sites-enabled 下,您可以:
<Directory /data/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
FCGIWrapper /data/www/cgi-bin/php-fcgi .php
<FilesMatch \.php$>
SetHandler fcgid-script
</FilesMatch>
Options +ExecCGI
</Directory>
<Directory /home/userXYZ/public_html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
FCGIWrapper /home/userXYZ/public_html/cgi-bin/php-fcgi .php
<FilesMatch \.php$>
SetHandler fcgid-script
</FilesMatch>
Options +ExecCGI
</Directory>
<VirtualHost *:80>
DocumentRoot "/home/userXYZ/public_html"
SuexecUserGroup userXYZ userXYZ
ServerName ...
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/www"
SuexecUserGroup homepage homepage
ServerName ...
</VirtualHost>
因此,当我访问我的主主页 (/data/www) 时,它不起作用,因为 suexec/www-data.conf 的文档根目录位于 /var/www 。如果我将 suexec/www-data.conf 更改为 /data ,则主主页可以正常工作。但是,用户网站无法正常工作,因为它们位于 /home 。如果我将 www-data 更改为 /home ,则我的主主页无法正常工作,因为它的文档根目录位于 /data ... 我如何避免 suEXEC 查询 www-data 配置,而是查询正确的用户配置?
答案1
根据 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=785740:
这个想法是能够让不同的 apache2 进程运行,因为不同的用户能够使用不同的 suexec 配置。
因此,如果 apache2 在 www-data 下运行,则只会考虑文件 /etc/apache2/suexec/www-data。