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

4
多年来,我一直使用chmod 777解决PHP写入权限问题,但现在我想知道正确的解决方法。
我的服务器上有一个网站,由user1拥有并属于组user1。这个网站中有一个名为uploads的文件夹。
通常情况下,要使PHP写入正常工作,我必须将此文件夹的chmod更改为777。但是,我显然意识到这很危险和不正确,并且我想正确设置权限以最小化风险。
根据我的有限知识,我看到两个选项:
1. 我chown uploads文件夹,使其归apache所有。这样,我可以使用默认权限,而apache可以愉快地写入该文件夹。 2. 我向apache添加第二个组user1。然后,在uploads上给所有者和组写入权限,这应该允许apache写入uploads我的问题是,哪种方法最好?是上面两种方法之一还是完全不同的方法?
如果最佳解决方案是#1,那么如何让user1通过SFTP写入uploads?
2个回答

1
在我的当前公司,我们将Apache组设置为拥有该文件夹的组,因此您只需要在该文件夹上执行chmod 770以授予该特定组对该文件夹执行有趣操作的权限。
但是,您仍然需要记住保护应用程序免受恶意用户的攻击,因为运行的PHP脚本如果不够安全仍然可能会对文件夹造成损害。

那么你的意思是第二个选项可能是最好的?将apache添加到user1的第二个组中,并更改文件夹的权限,以便所有者和组可以写入? - Stephen Melrose

1

如果这是你自己的服务器,最好的方法是将文件夹设置为apache使用的组,例如在debian上使用chgrp www-data(在其他系统上可能不同)。通常情况下,您需要以root用户或至少具有访问自己和www-data组的用户身份执行此操作。如果您的用户可以访问www-data组,则这可能是一个很酷的功能,因为这样很容易读取文件,甚至可能写入/移动文件。

在这种情况下,请使用770作为文件权限,并确保php创建的文件获得此权限(在创建之后明确使用chmod或在创建之前使用umask。请参阅php手册)。

如果您正在使用共享托管环境,则我知道的唯一干净的解决方案是mod_suexec,但我不知道有多少主机启用了它。如果没有可用的选项,我只知道您所知道的方式,即使用777。通常,在共享环境中,您的主目录路径名中会有更长的随机字符串,以便其他人无法找到您的目录,因此无法访问您的文件。但这并不是真正的安全措施.. ;-)

祝你好运 米歇尔


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接