为什么PHP脚本的工作权限在不同服务器之间不同?

为什么PHP脚本的工作权限在不同服务器之间不同?
<?PHP

print "hello";

?>

我写下这段代码并保存为“1.php”;

然后我将这个 PHP 脚本上传到我的服务器。

我有 8 个不同的免费托管服务器帐户。

我注意到有两种类型的服务器设置。

(1)
“类型 A”
例如 sqweebs。

我们需要将 PHP 文件权限设置为 640。
这意味着 sqweebs 服务器要求我们
授予 PHP 脚本运行的组权限。

如果我设置 604,那么服务器就会生成这样的错误。例如,

警告:未知:
无法打开流:
 权限被拒绝,未知,第 0 行

致命错误:未知:
需要打开失败
'/www/sqweebs.com/1.php'
(include_path='.:/blahblah')
未知,第 0 行

(2)
另一方面,
这个世界上还有其他类型的服务器。

“B型”,
例如izfree。

在此服务器上,我发现如果我授予它 604 作为权限,
我就可以使 PHP 脚本运行。


所以我想知道为什么服务器设置会有这么多的矛盾,
以及是什么原因,以及其他一些相关的
意见。

比如我应该使用哪个服务器,等等。

答案1

为了执行您的 PHP 脚本,Web 服务器需要能够读取该脚本。通常,出于安全原因,您的 Web 服务器(通常是 Apache)以非 root 用户身份运行。

因此,要解决您的问题,我们首先需要确定您的 Web 服务器以哪个用户身份运行。这在不同的 Linux 发行版中有所不同,但如果您打开 httpd.conf(或 Debian 上的 apache2.conf 文件)并查找以“User”开头的行,您将看到用户名。在 Debian 上,您会看到“User www-data”,而在 RH 派生发行版上,它通常是“User apache”。

现在您需要构建您的权限,以便该用户对您的 php 脚本具有“读取”访问权限。

最简单的方法是将权限设置为 644,这将确保用户 Web 服务器可以通过“world”权限进行访问。

另一个选择是将脚本的所有者更改为 www-data 或 apache 用户(如上所述),并将权限设置为 400。这将导致除 Web 服务器之外的所有用户都无法访问该脚本。

最后一个选项在您需要提供 FTP 访问权限时特别有用,那就是将组所有者更改为 www-data 或 apache,并将权限设置为 640。这为用户所有者提供了对脚本的完全读写访问权限,并为 Apache 提供了所需的读取访问权限,同时锁定了其他所有人。

在上面的示例中,如果 Apache 用户拥有脚本的组所有权,则使用 604 将阻止 PHP 打开 sqweebs 服务器上的文件。同样,如果 Apache 用户既不是文件的用户所有权也不是文件组所有权,则 izfree 服务器上的 640 也会失败。我猜在这两种情况下 644 都可以工作,但如果不知道哪些用户/组拥有脚本,就很难判断。

答案2

网络服务器希望该文件必须具有网络服务器运行用户的权限,才能打开并运行该文件。

因此,如果 Web 服务器(比如 Apache)以 www 的身份运行,那么 www 应该具有该文件的读取权限。(有些以 www 的身份运行 apache,有些以 apache 的身份运行,或者没人运行)。

当您上传文件时,根据 umask 的设置方式,文件权限也会如此设置。(因此,当未明确设置权限时,在一个主机上,该文件可能具有权限 655,而其他文件可能具有权限 600)。

如果您对通常部署应用程序的操作系统有所了解,这总是有帮助的。大多数情况下,PHP 部署在 *nix 系统上,并且权限方案在所有 *nix 系统上几乎(几乎总是)相同。

尝试获取“Unix 系统管理手册”(由 Evi Nemeth & Co 编写)。它读起来非常有趣,而且易于理解(它是旧版本……但 unix 权限没有改变)

此外,请确保您的服务器可以处理 DOS 行尾设置(您是在 Windows 上开发代码吗?)。确保在保存时将其保存为“Unix 格式”EOL(行尾)。(大多数编辑器(如 Dreamweaver)都提供此功能)。大多数托管(PHP)提供商都运行某种形式的 *nix(freeBSD、Linux 等),这些服务器上的 Web 服务器会导致 Windows EOL 格式出现问题

相关内容