我开发了一个小型网络应用程序。
此应用允许用户上传图片。 它还生成带有这些图像名称的文本文件(名称存储在MySQL数据库中或从中检索。)
我使用MAMP开发了这个应用程序。要创建上传的图像文件,我使用PHP函数
imagejpeg('my/path/name.jpg')
并删除我使用PHP函数的文件
unlink('folder1/folder2/name.jpg')
写入文本文档我正在使用函数
fopen('folder1/folder2/name.txt', 'w')
所有这三个功能都会产生与权限相关的错误 - 现在该网站已被移至实际托管环境。
这是为什么?以及将文件夹folder1
和folder2
设置为?
我知道权限777通常很糟糕,因为它会向公众开放您的服务器。然而,我发现功能无法正常工作,除非我在文件夹上使用777。任何人都可以解释我的困境吗?
答案 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 chmod
,man chown
。您还可以在UNIX permissions和here上了解详情。
答案 2 :(得分:0)
您是否看过文件夹的所有权,而不仅仅是更改权限? Web服务器以用户开发和部署脚本和文件夹的不同用户身份运行。一个简单的修复可能是将文件夹所有者更改为Web服务器用户。