【问题标题】:Web App fails when moved to production environment. Which server permissions do I need?移动到生产环境时,Web 应用程序失败。我需要哪些服务器权限?
【发布时间】:2010-06-10 14:38:33
【问题描述】:

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

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

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

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

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

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

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

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

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

这是为什么呢?我需要什么权限才能将文件夹的folder1folder2 设置为?

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

【问题讨论】:

    标签: php permissions mamp


    【解决方案1】:

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

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

    从您的上述问题中,我不太了解您的应用程序的要求,但似乎罪魁祸首目录只需要您和运行 Web 服务器的用户的读/写/执行权限。您可以简单地将它们授予网络用户,然后使用 sudo 自己访问它们。

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

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

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

    这是假设您的网络服务器以用户 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 chmodman chown。您还可以在 UNIX permissionshere 上了解更多信息。

    【讨论】:

    • 谢谢史蒂夫。我会用你给我的东西做一些研究。
    • 如何找出您的网络服务器运行的用户名?
    • 您需要使用 ps 命令来获取有关进程的信息。试试 ps aux |grep -i apache|awk '{print $1}'。键入“man ps”以了解有关 ps 命令的更多信息以及如何获取有关系统上正在运行的进程的所有类型的不同信息。
    【解决方案2】:

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

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

    【讨论】:

    • 您可以进一步限制这些权限。除了网络用户之外,其他任何人都没有理由为不是文件所有者或文件组成员的用户启用读取和执行位。
    • 这个所有者是谁?如何访问此信息?我的问题是我对终端相当陌生,更愿意通过 GUI 来完成。
    【解决方案3】:

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

    【讨论】:

    • 你能扩展你的答案吗?
    • 如何更改文件夹所有者?我会把它改成什么?
    • 假设您使用的是 Linux/Unix 操作系统,请查看 chown。 computerhope.com/unix/uchown.htm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多