对于PHP可以写入的文件夹,Linux上最好的用户/权限设置是什么?

时间:2010-12-07 15:50:59

标签: php linux apache permissions

使用chmod 777多年来解决PHP写入权限问题,我想知道解决问题的正确方法。

我的服务器上有一个由user1小组user1拥有的网站。此网站上有一个名为uploads的文件夹。

通常要使用PHP编写代码,我必须chmod将此文件夹777添加到chown。但我明显意识到这是危险和不正确的,我想正确设置权限以最大限度地降低风险。

从我有限的知识,我看到两个选项,

  1. uploads apache个文件夹,因此它归apache所有。这样,我可以使用默认权限,apache可以愉快地写入文件夹。
  2. 我将第二个小组添加到user1的{​​{1}}。然后,我向uploads上的所有者和群组授予了写入权限,这应允许apache写入uploads
  3. 我的问题是,最好的方法是什么?它是上述之一还是完全不同的东西?

    如果最佳解决方案是#1,那么user1如何通过SFTP写入上传内容,因为该解决方案不会让它们出现?

2 个答案:

答案 0 :(得分:1)

在我当前的公司中,我们将apache组设置为拥有该文件夹的组,因此您只需对该文件夹执行chmod 770即可授予该特定组在该文件夹上执行有趣内容的权限。

但是,您仍然需要记住保护您的应用程序免受恶意用户的攻击,因为正在运行的PHP脚本如果充分不安全,仍会对文件夹造成损害。

答案 1 :(得分:1)

如果它是您自己的服务器,最好的方法是将文件夹设置为apache使用的组,例如在debian上使用chgrp www-data(在其他系统上可能会有所不同)。您通常必须以root身份执行此操作,或者至少以访问自己和www-data组的用户身份执行此操作。如果您的用户可以访问www-data组,这可能是一个很酷的功能,因为它很容易阅读,也可能写/移动文件。 在这种情况下,使用770作为文件权限,并确保由php创建的文件获得此权限(在创建之前使用chmod或使用umask显式创建。请参阅php手册。)

如果您正在使用共享托管环境,我所知道的唯一干净解决方案是mod_suexec,但我不知道有很多支持它的托管服务商。如果这不可用,我只知道你知道的方式,使用777.通常,共享环境中的主目录在路径名中有一个较长的随机字符串,以便其他人找不到你的目录,因此无法访问你的文件。但这不是真正的安全..; - )

祝你好运 米歇尔