<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/security.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'security.apache.php',
    1 => '以 Apache 模块安装时',
    2 => '以 Apache 模块安装时',
  ),
  'up' => 
  array (
    0 => 'security.php',
    1 => '安全',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.shell.php',
    1 => '情形四：PHP 解释器放在 web 目录以外',
  ),
  'next' => 
  array (
    0 => 'security.sessions.php',
    1 => '会话（Session）安全',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'security/apache.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="security.apache" class="chapter">
   <h1 class="title">以 Apache 模块安装时</h1>

   <p class="simpara">
    当 <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> 以 Apache 模块方式安装时，它将继承 Apache
    用户（通常为“nobody”）的权限。这对安全和认证有一些影响。比如，如果用 <abbr title="PHP: Hypertext Preprocessor">PHP</abbr>
    来访问数据库，除非数据库有自己的访问控制，否则就要使“nobody”用户可以访问数据库。这意味着恶意的脚本在不用提供用户名和密码时就可能访问和修改数据库。一个
    web Spider 也完全有可能偶然发现数据库的管理页面，并且删除所有的数据库。可以通过
    Apache 认证来避免此问题，或者用 LDAP、.htaccess
    等技术来设计自己的访问模型，并把这些代码作为 <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> 脚本的一部份。
   </p>
   <p class="simpara">
    通常，一旦安全性达到可以使 <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> 用户（这里也就是 Apache
    用户）承担的风险极小的程度时候，可能 <abbr title="PHP: Hypertext Preprocessor">PHP</abbr>
    已经到了阻止向用户目录写入任何文件或禁止访问和修改数据库的地步了。这就是说，无论是正常的文件还是非正常的文件，无论是正常的数据库事务还是恶意的请求，都会被拒之门外。
   </p>
   <p class="simpara">
    一个常犯的对安全性不利的错误就是让 Apache 拥有 root 权限，或者通过其它途径赋予 Apache 更强大的功能。
   </p>
   <p class="simpara">
    把 Apache 用户的权限提升为 root
    是极度危险的做法，而且可能会危及到整个系统的安全。所以除非是安全专家，否则决不要考虑使用
    su，chroot 或者以 root 权限运行。
   </p>
   <p class="simpara">
    除此之外还有一些比较简单的解决方案。比如说可以使用
    <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a> 来限制哪些目录可以被
    <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> 使用。也可以设置
    Apache 的专属区域，从而把所有的 web 活动都限制到非用户和非系统文件之中。
   </p>
  </div>
<?php manual_footer($setup); ?>