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


Apache able to execute file outside web server root directory

我的Mac上安装了XAMP,我尝试运行命令- ps axo user,group,comm | grep httpd知道 apache 以什么用户身份运行。我得到了多个结果,一个是根,另一个是没有人。那么 apache 运行为什么呢?一个根或没有人,为什么我得到根和没有人?是因为httpd最初是一个根,然后变成了没有人吗?

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

root 20/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -1/Applications/XAMPP/xamppfiles/bin/httpdnobody -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 用户没有人,那么它如何执行mysql_details.php。

谢谢屁股。

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

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

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