我正在尝试正确设置服务器上的权限。目前,我有许多目录和文件在 0777 处被 chmod ——但我对这种方式不太满意。
因此,根据 serverfault 专家的建议,我让我的托管服务提供商在我的共享虚拟服务器上安装了 ACL。
当我以 FTP 用户帐户“abc”的身份通过 FTP 连接到服务器时,我可以做所有我需要做的事情(这是理所当然的),因为我的所有目录和文件都归“abc”所有,组为“abc”,并且第一个八位字节设置为 7 (rwx)。我明白了。
但这里对我来说是深灰色。PHP 设置为用户“nobody”。
- 因此,当有人浏览我的网页时,如果网页以 .php 结尾或嵌入了 PHP,我假设最后一个八位字节控制访问权限。由于我的所有目录和文件都归“abc”所有并分配给组“abc”,因此如果最后一个八位字节是 4 (r--),则服务器将允许浏览器读取文件。如果是 6 (rw-),则服务器将允许浏览器写入文件或目录,对吗?
- 如果 Web 文档不是以 .php 结尾或没有嵌入任何 PHP,该怎么办?那么用户是什么?
- 我如何使用 ACL 不将权限设置为 6 (rw-) 甚至 7 (rwx)?[不确定执行的作用或含义]
只是寻找某种策略设置来最好地锁定我的目录和文件,同时允许我的 PHP 脚本上传和写入文件(这样我的用户就不会打电话告诉我“权限被拒绝”。
好的,感谢所有愿意帮助我的人。我非常感激。
答案1
程序以特定的用户身份运行。PHP 通常作为 Web 服务器模块运行,因此以与 Web 服务器相同的用户身份运行,即您所说的“nobody”。
浏览器在远程系统上运行,因此无法写入您的服务器。只有服务器上运行的进程才可以写入。当您通过浏览器访问服务器时,浏览器实际上会要求服务器上运行的 Web 服务器获取一些文件。因此,无论文件是 php、html 还是其他文件,文件权限都相同。
执行位可能很重要。它定义文件是否可以作为新进程执行(是否是程序)。作为 CGI 运行的 PHP 文件(或就此而言,任何其他类型的程序)必须是可执行文件才能运行。
执行位也是列出目录所必需的。这有点奇怪,但这就是目录可执行的原因。
最后,如何让您的 php 写入磁盘?好吧,您必须写入某个“无人”可写入的目录。您可以使用 ACL 来实现这一点,而不是让无人成为目录的所有者。只需授予无人对您感兴趣的文件夹的额外写入权限即可。
但是要小心:可写目录不能位于 Web 层次结构下,这一点非常重要。这将是一个巨大的安全漏洞:攻击者可以在那里写入可执行文件,然后让 Web 服务器执行它们,从而导致各种强大的攻击。不要这样做。因此,如果您的 Web 根目录是 /var/www ,请将您的可写目录放在 /var/mywrite 或其他地方,但无论如何不要放在 /var/www 下。