我的服务器管理员希望我设置目录的公共写权限


9

我是Web开发的新手,所以请耐心等待。

我主要是iPhone开发人员,但最近使用共享托管为其他人创建了一个网站。我可以在该站点上用PHP很好地写文件,而不必考虑权限。

我正在为正在制作的新应用程序部署Web服务,但进展并不顺利。这里最重要的区别是我正在使用其他人的服务器,并且仅具有FTP / DB访问权限。

基本上,我拥有构成我的CMS的PHP文件,如下所示:

mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php

这些脚本然后可以编辑数据库或文件。它们可以与DB很好地交互,但是我的脚本无法写入文件系统。例如,他们可能尝试写入以下文件:

mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt

这在我的MAMP安装(本地)上运行良好,但是一旦部署到服务器,PHP每次尝试写入时都会喷出错误……类似这样:

无法打开文件“ ../data/img/someimage.png”进行写入。

所以我给运行服务器的那个人发了电子邮件,他回来说:

经公众许可可以使用吗?(777)

而且,确实如此-但我对使用公共权限非常谨慎,因此请立即将其禁用。我给他发电子邮件说:“如何使我的PHP脚本使用标准用户权限编写”,他说:

将其保留为公共,会没事的

我认为这是域解析中某处的ip冲突,但我对此并不担心。

然后,我给他发送电子邮件说“肯定是不安全的”或类似的话,他回答了以下内容:

现实是,有数百万个网站,其中包括我管理的多个网站,这些网站的各个文件夹上都有777,这只是一种生活方式。

谁能给我一些我可以给他的解决方案的想法?还是我可以做些避免避免使用777的事情?我真的不喜欢我的网站/服务上的任何文件夹都是可公开写的。

我非常感谢您的建议,因为我对Web服务器了解甚少。


12
逃离这个家伙,不要回头。
user9517 2011年

不是一个真正的选择...请参阅SvenW答案的评论...
Alex Coplan

Answers:


13

让我们分解一下

您需要运行脚本的用户来读取,执行和写入目录,因此它应该是:

7 =(r)ead,(w)rite,e(x)ecute

属于同一组的其他用户应该能够执行目录中的php文件,但不能对其进行写入(出于明显的原因);他们不一定需要读取PHP文件。因此,我们只需要提供执行权限即可:

1 = e(x)可爱

公众也一样。实际上,这就是需要查看php和静态文件的外部用户所需要的:

1 = e(x)可爱

因此,最低要求应该是:

711

我通过自己的配置确认了上述设置,因此应该可以使用;但是,这是默认的Web用户。如果您使用www以外的登录名进行上传,则文件和目录可能位于其他用户下。在这种情况下,默认的Web用户可能无法读取或写入您拥有的文件。那时,您可能需要将默认的Web用户添加到您的组中(系统管理员必须执行此操作),然后向属于该组的用户授予读取,写入和执行权限:

771

那可能会起作用。或者,或者让sysadmin将这些文件的用户和组所有权更改为默认的Web服务器用户(但不要更改权限!)。如果仍然无法解决问题,那么权限的示例输出(例如“目录中的ls -la”)将帮助我们进一步解决此问题。也就是说,只要您只需要向公众授予执行权限(或“其他”),从安全角度来看应该没问题。


2
希望我能投票两次。
韦斯利

问题实际上是该网站不应写入其自身结构内的文件,而不能写入权限本身。
JamesRyan 2011年

你是对的。根据数据,您可能希望写入公共Webroot之外的文件。
Rilindo 2011年

在这里,我正在写一个/data文件夹-该文件夹包含构成我的JSON Web服务的PHP脚本,以及一堆用于Web服务中传递的内容的图像(在一个/data/img文件夹中)
Alex Coplan

那么图像需要公开吗?那澄清了事情。
Rilindo 2011年

18
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对某项设置权限以使其起作用就可以肯定,这表明他根本不了解自己在做什么。

真正需要什么访问权限取决于系统的使用和配置方式,并且在不知情的情况下很难告诉您一些信息。


谢谢-我的想法完全是关于权限的-我真的没有选择将其托管在其他地方,因为我正在开发的公司不会为此付费,并向我推荐了这个人,并说他们会让他免费做的-据我所知,我只是在运行他的一台虚拟服务器。那么,它通常如何工作,PHP脚本如何以“用户”身份运行,从而能够写入网站上的任何内容?
Alex Coplan

好吧,我会告诉他们他们“免费”获得了什么。我没有任何共享托管的经验,所以我无法对此发表评论。我的站点都运行Debian Web服务器,需要写的文件夹将归www-data拥有700权限,但是在您的情况下这可能行不通。
斯文

我认为他们也在向他支付主要网站的费用,这就是为什么-如果在任何服务器错误页面的底部都提供了帮助,它会这样说Apache/2.2.9 (Debian) PHP/5.2.6-1
Alex Coplan

这也是不共享的vps
Alex Coplan

2
好吧,我尝试找出您的文件可以将哪些权限和所有权转移到服务器。如果该用户至少不是该www-data组的成员,则您需要在转移后更改用户/组,或者确实要使用777权限。但这是没有意义的,我们无法通过这种方式为您提供帮助。
斯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.