我对 Web 开发还比较陌生,所以请耐心等待。
我主要是一名 iPhone 开发人员,但最近使用共享主机为其他人创建了一个网站。我可以在该网站上顺利使用 PHP 写入文件,而不必考虑权限问题。
我正在为正在开发的新应用部署 Web 服务,但进展并不顺利。这里最重要的区别是我使用的是其他人的服务器,并且只有 FTP/DB 访问权限。
基本上,我有一堆构成我 CMS 的 PHP 文件,如下所示:
mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php
然后,这些脚本会编辑数据库或文件。它们可以很好地与数据库交互,但是我的脚本无法写入文件系统。例如,它们可能会尝试写入以下文件:
mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt
这在我的 MAMP 安装(本地)上运行良好,但一旦部署到服务器,每次尝试写入时 PHP 都会抛出错误......如下所示:
无法打开文件“../data/img/someimage.png”进行写入。
所以我给运行服务器的人发了一封电子邮件,他回复说:
它是否得到了公众许可?(777)
确实如此 - 但我在使用公共权限时非常谨慎,所以立即再次禁用它。我给他发了一封电子邮件,问他“我怎样才能让我的 PHP 脚本使用标准用户权限写入”,他说:
保持公开即可
我认为这是域名解析中某个地方的 IP 冲突,但我并不担心。
然后我给他发了一封电子邮件,说“这肯定不安全”或类似的话,他回复如下:
现实情况是,有数以百万计的网站,包括我管理的几个网站,在各个文件夹中都有 777,这只是一种生活方式。
有人能告诉我一个我可以给他的解决方案吗?或者我可以做些什么来避免使用 777?我真的不喜欢我的网站/服务上的任何文件夹都是可公开写入的。
由于我对网络服务器了解甚少,我将非常感谢您的建议。
答案1
您需要运行脚本的用户对目录进行读取、执行和写入,因此应该是:
7 = (r)阅读,(w)写作,e(x)执行
属于同一组的其他用户应该能够执行目录中的 php 文件,但不能写入(原因很明显);他们不一定需要读取 PHP 文件。因此,我们只需提供执行权限:
1 = e(x)ecute
对于公众来说也一样。事实上,对于需要查看 php 和静态文件的外部用户来说,这就是你所需要的全部内容:
1 = e(x)ecute
因此最低限度应该是:
711
我使用自己的配置确认了上述设置,因此它应该可以工作;但是,这是在默认 Web 用户下进行的。如果您使用 www 以外的登录名上传,则文件和目录可能在其他用户下。在这种情况下,默认 Web 用户可能无法读取或写入您拥有的文件。此时,您可能需要将默认 Web 用户添加到您的组(系统管理员必须这样做),然后向属于该组的用户授予读取、写入和执行权限:
771
这可能有效。要么这样做,要么让系统管理员将这些文件的用户和组所有权更改为默认 Web 服务器用户(但不要更改权限!)。如果这仍然不起作用,权限的示例输出(例如“目录中的 ls -la”)将帮助我们进一步排除故障。也就是说,只要您只需要向公众(或“其他”)授予执行权限,从安全角度来看应该没问题。
答案2
Leave it as public, it'll be fine
I reckon it's an ip conflict somewhere in the domain resolution,
but I'm not worried about it.
这家伙是个白痴,这完全是胡说八道。访问权限与 IP 地址或域解析无关,他只是在胡说八道。
鉴于这位“管理员”的素质,我建议将您的网站托管在其他地方,因为该网站很可能管理不善且不安全。仅仅777
为了使其正常运行而对某些内容进行权限设置肯定表明他根本不了解自己在做什么。
真正需要的访问权限取决于系统的使用和配置方式,如果您不知道这一点,就很难告诉您一些事情。