Apache能够在Web服务器根目录之外执行文件

时间:2012-06-30 20:44:51

标签: php apache unix

我的Mac上安装了XAMP,我尝试运行命令 - ps axo user,group,comm | grep httpd了解用户apache正在运行的内容。 我得到多个结果一个用于root,另一个用作没有人。那么apache运行的是什么?一个根或没有人,为什么我得到root和nobody?是因为httpd以root身份开始,然后变成了没人?

我得到ps axo user,group,comm | grep httpd的结果是 -

root        20 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd
nobody      -1 /Applications/XAMPP/xamppfiles/bin/httpd

其次,当我执行以下脚本时 - echo shell_exec('whoami');(来自https://stackoverflow.com/questions/2509334/finding-out-what-user-apache-is-running-as) 我只是得到结果 - nobody

我想知道用户的原因是因为php引擎实际上能够执行Web服务器根目录之外的php文件(mysql_details.php)。这个mysql_details.php具有以下权限 - rwxr--r--,即只读取其他人和组的权限。因此,如果apache用户是nobody,那么它如何执行mysql_details.php。

谢谢, 普拉特。

1 个答案:

答案 0 :(得分:1)

主Apache进程以root身份运行 - 其他进程以nobody身份运行。处理请求的唯一进程是那些作为nobody运行的进程,因此如果有人试图访问没有人无法访问的文件,他们将收到错误(而root将能够访问该文件)。

如果您需要执行该文件,您可以执行以下操作:

  1. 没有人拥有该文件。这将使任何人无法对文件进行完全读/写/执行访问,同时阻止其他用户编写或执行该文件。
  2. 将nobody添加到组中,并授予该组对该文件的执行访问权限。组中的任何人都可以执行该文件,但只有所有者才能写入该文件(不会是任何人)。
  3. 允许任何人执行该文件。这可能不是一个好主意,因为任何用户都能够以不同的权限级别执行内容。最好使用以上两种中的一种。