我对网页开发相对较新,所以请耐心等待。
我主要是一个iPhone开发人员,但最近为其他人使用共享主机做了一个网站。 我可以写在PHP的文件在这个网站很好,而不必考虑权限。
我正在为我正在创build的新应用程序部署Web服务,但这并不是很顺利。 这里最重要的区别是我使用别人的服务器,只有FTP / DB访问。
基本上,我有一些PHP文件组成我的CMS,如下所示:
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脚本使用标准的用户权限写”,他说:
把它作为公开的,它会没事的
我认为这是一个域名parsing中的IP冲突,但我并不担心。
然后我给他发电子邮件,说“肯定这是不安全的”,或者按照这个方式,他回答如下:
现实是有数以百万计的网站,包括我pipe理的几个文件夹上有777个,这只是一种生活方式。
任何人都可以给我一些我可以给他的解决scheme的想法吗? 或者我能做些什么来避免使用777? 我真的不喜欢在我的网站/服务上的任何文件夹的想法是公开可写的。
我非常感谢你的build议,因为我对networking服务器知之甚less。
让我们来分解一下 :
您需要运行脚本的用户读取,执行和写入目录,所以它应该是:
7 =(r)ead,(w)rite,e(x)ecute
属于同一组的其他用户应该能够执行目录中的php文件,但不能写入(出于显而易见的原因); 他们不一定需要阅读PHP文件。 因此,我们需要提供只是执行权限:
1 = e(x)ecute
公众也一样。 事实上,这就是为需要查看php和静态文件的外部用户所需要的一切:
1 = e(x)ecute
所以最低限度应该是:
711
我用我自己的configuration确认了上面的设置,所以它应该工作; 但是,这是在默认的Web用户下。 如果您正在使用除www之外的login名进行上传,则文件和目录可能位于不同的用户下。 在这种情况下,默认Web用户可能无法读取或写入您拥有的文件。 此时,您可能需要将默认Web用户添加到您的组(系统pipe理员必须这样做),然后为属于该组的用户授予读取,写入和执行权限:
771
这可能会奏效。 要么,要么让系统pipe理员将这些文件的用户和组所有权更改为默认的Web服务器用户(但不是权限!)。 如果仍然不起作用,那么权限的示例输出(类似于“目录中的ls -la”)将帮助我们进一步排除此问题。这就是说,只要您只需授予执行权限给公众或“其他”),从安全的angular度来看,你应该没问题。
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地址parsing或域名parsing没有任何关系,他只是放弃了文字。
鉴于这个“pipe理员”的质量,我会build议在其他地方托pipe你的网站,因为很可能这个网站的pipe理非常糟糕和不安全。 只是把777权限放在一些东西上,这样才能起作用,这是一个肯定的信号,他不明白他在做什么。
什么样的访问权限确实是必要的,取决于系统的使用和configuration方式,如果不知道这一点,很难告诉你一些事情。