首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在启用suEXEC的Apache中避免'403禁忌‘响应

如何在启用suEXEC的Apache中避免'403禁忌‘响应
EN

Server Fault用户
提问于 2012-12-03 14:09:39
回答 1查看 2.1K关注 0票数 0

在阅读了官方文档之后,我已经使用suEXEC配置了Apache2.2Web服务器。我将在这里做一个简短的总结:

代码语言:javascript
复制
# Install and enable Apache, suEXEC, FastCGI and PHP5
aptitude install apache2-mpm-worker libapache2-mod-fcgid apache2-suexec php5-cgi
a2enmod fcgid suexec actions

# Create a user with its directory configured to host a website
adduser -s/bin/false --home /var/www/crm --ingroup ftpclients crm
mkdir -p /var/www/crm/public_html

# Assign permissions after copying the website
chown -R crm:ftpclients /var/www/crm
find /var/www/crm -type -f -exec chmod 0640 {} \;
find /var/www/crm -type -d -exec chmod 0750 {} \;

# Customize FastCGI module
<IfModule mod_fcgid.c>
  AddHandler  fcgid-script .fcgi
  FcgidConnectTimeout 20
  PHP_Fix_Pathinfo_Enable 1
</IfModule>

# Customize PHP ini at /etc/php5/cgi/php.ini
cgi.fix_pathinfo=1

# Setup FastCGI wrapper for PHP
mkdir -p /var/www/php-fcgi-scripts/crm
touch /var/www/php-fcgi-scripts/crm/php-fcgi-starter # see content below
chown www-data:www-data /var/www/php-fcgi-scripts
chown -R crm:ftpclients /var/www/php-fcgi-scripts/crm
chmod 0755 /var/www/php-fcgi-scripts/crm/php-fcgi-starter

# Contents of php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

# Create virtual host
<VirtualHost *:80>
  ServerAdmin me@example.com
  ServerName crm.example.com

  DocumentRoot /var/www/crm/public_html

  ErrorLog /var/log/apache2/crm.log
  CustomLog /var/log/apache2/crm.log combined

  <IfModule mod_fcgid.c>
    SuexecUserGroup crm ftpclients
    <Directory /var/www/crm/public_html>
      Options +ExecCGI +FollowSymlinks
      AllowOverride All 
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-fcgi-scripts/crm/php-fcgi-starter .php
    </Directory>
  </IfModule>
</VirtualHost>

所有这些PHP都执行得很好,但是Apache为每个资产返回403个响应: CSS文件、图像等。为了允许访问内容,我不得不将权限更改为644和755。

我的问题是: suEXEC不应该让Apache按照指定的用户运行(在本例中是crm)吗?那么,为什么需要放宽权限才能访问目录和图像呢?

我已经执行了ps aux,并看到crm实际上是几个/usr/lib/cgi-bin/php进程的所有者。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2013-05-07 12:58:18

Apache只使用suexec运行外部进程。需要注意的是,所有其他文件访问仍然是由httpd工作人员完成的,在大多数情况下,它都是作为apache帐户运行的(不管您的系统上有什么)。即使是CGI脚本也可能需要apache帐户读取;我不确定suexec执行的安全检查中有多少是在它更改到目标用户帐户之前完成的。PHP之所以有效,是因为它是通过包装器脚本执行的,所以只有包装器才需要具有可读性。

要真正实现您所期望的行为,您需要使用mpm-itk,并且您应该意识到MPMs的安全性模型比标准Apache要弱。( Apache进程作为专用用户运行的部分原因是,Apache代码中的安全漏洞很难转化为机器上的根危害。为了实现其目标,mpm将主要的Apache进程作为root运行,这使得整个系统更容易受到代码中发现的漏洞的攻击。)

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/454558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档