3

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

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

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

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

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

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

写入我正在使用该功能的文本文档

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

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

为什么是这样?我需要什么权限来设置文件夹的folder1folder2

我知道权限 777 通常不好,因为它会将您的服务器向公众开放。但是我发现除非我在文件夹上使用 777,否则这些功能无法工作。任何人都可以阐明我的困境吗?

4

3 回答 3

1

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

chown -R :www-data folder1
chmod -R 775 folder1
于 2010-06-10T14:44:16.333 回答
1

不要盲目地将文件夹的权限设置为 777,这会为系统上的每个用户启用读、写、执行位。

作为一般安全预防措施,您应该始终授予应用程序运行所需的最少权限。

从您上面的问题中,我对您的应用程序的要求了解不多,但似乎罪魁祸首目录只需要您和运行 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/

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

您确实应该了解权限如何作用于 unix 或类 unix 文件系统上的目录和文件的基础知识。确保你运行man chmod, man chown。您还可以在此处和此处了解更多关于UNIX 权限的信息。

于 2010-06-10T14:53:36.627 回答
0

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

于 2010-06-10T14:42:46.587 回答