php 脚本在 apache uid 下运行

php 脚本在 apache uid 下运行

我有一个 vps,运行 directadmin,安装了 apache 2 和 php 5。一切都运行正常,直到今天,我发现 PHP 脚本是在 apache:apache 下执行的,而不是在文件所有者 uid 下执行的。这搞砸了整个系统,但主要的问题是我无法弄清楚为什么 suphp 会突然停止工作??

一些信息:

root # php -v
PHP 5.2.17 (cli) (built: Aug 17 2011 21:02:28)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

httpd配置文件

User apache
Group apache
...
<Directory "/var/www/html">
    Options -Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
   <IfModule mod_suphp.c>
        suPHP_Engine On
        suPHP_UserGroup webapps webapps
    SetEnv PHP_INI_SCAN_DIR
   </IfModule>
</Directory>


<VirtualHost 192.168.56.55:80 >
        ...
    SuexecUserGroup robert robert
        ...
        <Directory /home/robert/domains/testing.com/public_html>
        Options +Includes -Indexes

        php_admin_flag engine ON
    </Directory>
</VirtualHost>

额外的/httpd-php-handlers.conf

<FilesMatch "\.(inc|php|php3|php4|php5|php6|phtml|phps)$">
AddHandler application/x-httpd-php .inc .php .php3 .php4 .php5 .phtml
AddHandler application/x-httpd-php-source .phps
</FilesMatch>

每当我在 /var/www/html 或 home/robert/domains/testing.com/public_html(文件所有者为 robert:robert)中运行 phpinfo() 时,结果都是相同的:User/Group apache(48)/48

我该如何解决这个问题?

  • 并且 suphp 日志是空的 :(

答案1

suPHP 可能未安装。

由于您使用条件加载语句,suPHP 可能在 Apache 升级时被删除。

我不再使用 DirectAdmin 框,但我知道它们曾经在覆盖自定义配置时存在问题。

  1. 确认 suPHP 确实安装在 Apache 中。使用:

    httpd-l

列出内置的 Apache 模块。或者在您的配置中查找 Load 语句。一种快速测试方法是注释条件 Load 语句,然后尝试重新启动 Apache。

  1. 确保在域上启用了 suPHP,并且 httpd 配置中的用户/组规范正确。(您发布的内容看起来不错。)

  2. 一旦启用 suPHP,您可能只需将目录 chown 给正确的用户即可。

答案2

老实说,(从管理员的角度来看)suphp 是一个坏主意,而且很危险。在共享系统上尤其如此。话虽如此……你确定 suphp 正在加载吗?你有一个格式良好的语句,如果模块加载失败或丢失,它将被完全忽略。

相关内容