移动到生产环境时Web App失败。我需要哪些服务器权限?

时间:2010-06-10 14:38:33

标签: php permissions mamp

我开发了一个小型网络应用程序。

此应用允许用户上传图片。 它还生成带有这些图像名称的文本文件(名称存储在MySQL数据库中或从中检索。)

我使用MAMP开发了这个应用程序。要创建上传的图像文件,我使用PHP函数

imagejpeg('my/path/name.jpg')

并删除我使用PHP函数的文件

unlink('folder1/folder2/name.jpg')

写入文本文档我正在使用函数

fopen('folder1/folder2/name.txt', 'w')

所有这三个功能都会产生与权限相关的错误 - 现在该网站已被移至实际托管环境。

这是为什么?以及将文件夹folder1folder2设置为?

所需的权限

我知道权限777通常很糟糕,因为它会向公众开放您的服务器。然而,我发现功能无法正常工作,除非我在文件夹上使用777。任何人都可以解释我的困境吗?

3 个答案:

答案 0 :(得分:1)

有一个我觉得优雅的解决方案,但也许我是唯一一个:) 将目录的组所有者更改为www-data,并将权限设置为775。

chown -R :www-data folder1
chmod -R 775 folder1

答案 1 :(得分:1)

不要盲目地将文件夹的权限设置为777,这样就可以为系统中的每个用户启用读,写,执行位。

您应始终将应用程序所需的least amount of privileges作为一般安全预防措施运行。

我对您上面的问题的应用程序的要求了解不多,但似乎罪魁祸首目录只需要您和Web服务器运行的用户的读/写/执行权限。您只需将它们授予Web用户,然后使用sudo自行访问它们。

阅读 - 这样您就可以获得目录列表 write - 在目录中创建新文件或删除现有文件或重命名文件。 (例如:使用unlink()函数)
执行 - 这样您就可以更改并访问目录。

在您的情况下,以下应该可以正常工作:

chown -R www-data: folder1/
chmod 700 folder1/ folder1/folder2/

这假设您的Web服务器以用户www-data运行。如果您想在不使用sudo的情况下通过FTP或bash shell访问目录及其各自的文件,则需要创建一个组,例如wwwusers,并添加需要访问该组目录的所有人。然后做一些事情:

chown -R www-data:wwwusers folder1/
chmod 770 folder1/ folder1/folder2/

顺便说一下,我的回答是天真的,因为我假设你在服务器上有root,并且没有启用POSIX ACL或grsecurity之类的东西。使用ACL,您需要执行setfacl -mu:www-data:rwx /path/to/dir之类的操作。在这种情况下,您很可能需要向您的托管服务提供商寻求帮助。

您真的应该了解权限如何在unix或类Unix文件系统上的目录和文件上运行的基础知识。确保您运行man chmodman chown。您还可以在UNIX permissionshere上了解详情。

答案 2 :(得分:0)

您是否看过文件夹的所有权,而不仅仅是更改权限? Web服务器以用户开发和部署脚本和文件夹的不同用户身份运行。一个简单的修复可能是将文件夹所有者更改为Web服务器用户。