suPHP 权限要求适用于所有文件还是仅适用于 PHP 脚本?

suPHP 权限要求适用于所有文件还是仅适用于 PHP 脚本?

通常,在 PHP 中,0777当我们想要写入文件/文件夹时,它们具有 的权限。suPHP 禁止 的权限0777。相反,文件应该具有 的权限,0644而文件夹应该具有 的权限0755。然而,这总是用不同的措辞

确切的规则是什么?它适用于哪些文件?如果我README在嵌套目录中的某个位置有文件,是否需要更新其权限,还是仅适用于.php文件?

答案1

这取决于文件/目录的所有权。请记住,suPHP 下的 PHP 将以所有者用户的身份访问 PHP 脚本,并且这些 PHP 脚本将以该用户的身份运行,这意味着它们读取或写入的所有内容都是以该用户的身份完成的。因此,PHP 脚本只需所有者可读即可运行。

但是,除 PHP 脚本以外的任何其他内容都以 Apache 用户身份访问(suPHP 无法访问它们),这意味着用户至少需要对文件具有读取权限,对目录具有读取+执行权限。如果这些文件归普通用户所有,则它们需要是全球可读的(对于目录则是全球可执行的)。但如果它们归 Web 服务器用户所有(nobody、www-data、apache,取决于发行版),则它们只需要是所有者可读/所有者可执行的。

关于目录的说明:Apache(在提供非 PHP 文件时)将尝试读取路径中的每个目录以搜索 .htaccess 文件,如果它无法探索目录,它将失败并出现 403 错误,即使该文件可读。

因此,我认为对于大多数网站或 Web 应用程序而言,所有文件(PHP 文件和非 PHP 文件以及目录)都归单个用户所有,因此权限将是:

  • PHP 脚本:0400(u+r),或者 0600(u+rw)(如果 PHP 需要修改它们)。
  • 非 PHP 文件:如果 PHP 需要修改它们,则为 0444 (ugo+r) 或 0644 (u+rw,go+r)。
  • 目录:0555(ugo+rx)或 0755(u+rwx,go+rx)(如果 PHP 需要在其中创建文件)。

另一个注意事项:即使你为 PHP 脚本设置了 0400,它也可以被同一用户拥有的另一个 PHP 脚本修改,因为它可以简单地从 PHP 运行 chmod,所以 0400 并不比 0644 更安全。这仅适用于使用 suPHP 时。

相关内容