【问题标题】:Alternative to CHMOD 777CHMOD 777 的替代品
【发布时间】:2026-01-31 21:15:02
【问题描述】:

我正在为不懂 HTML/CSS 的人开发一个用 JS 编写的 WYSIWYG 类型的网站构建器。一切都完成了,但我想让它尽可能简单。在一个完美的世界中,他们只需将所有文件上传到他们的主机并完成它。我遇到的问题是,我有一些需要写入的文件和文件夹,但 PHP 没有权限,除非我将这些特定文件和文件夹 CHMOD 到 777。

我真的不想这样做,并希望我有其他选择,我也不想因为将 CHMOD 777 强加于每个人而受到批评。我能做些什么(这对我的用户来说很简单)来允许 PHP 写入文件/文件夹而无需授予每个人的权限?

我不能让 PHP 自己创建文件/文件夹,因为它也无权写入根目录。

【问题讨论】:

    标签: php file-permissions chmod


    【解决方案1】:

    您可以将文件chgrp 发送到 Web 服务器组(或 PHP,如果它设置为作为自己的用户运行)和chmod 770 它们。但这不会给您带来太多的安全性。

    或者,您可以做一些其他 PHP CMS(如 Joomla)所做的事情——当需要修改文件时,让服务器通过 FTP(使用站点所有者的凭据)连接回自身并上传替换文件。

    说实话,您选择允许人们修改服务器上的文件的任何方式都会有其缺陷,而且安全性通常几乎与使整个站点可写一样糟糕。不管你怎么做,我建议你确保你的身份验证和访问控制机制符合要求,因为你自己承担了这些责任,尤其是当你允许网络用户编辑文件时。

    【讨论】:

    • 请注意,如果 FTP 密码存储在服务器上的文件中,则 FTP 方法不会为您带来任何安全性。
    • 不多,不。但这让我比整个站点 777 更不舒服。密码可以在 .php 文件中,因此随机陌生人无法使用,除非 CMS 特别愚蠢并允许访问不应修改的文件(即:本身及其配置文件)。
    • 我认为 chmodding 文件到 660 就足够了,所有那些认为他们的配置文件是可执行的人 [/end pet peeve]
    • 如果您对整个站点进行 chmod,660 将使目录无法使用。是的,您可以采取向目录添加执行权限的第二步,但实际上 +x 一个不会有 shebang 行的 PHP 文件更简单(并且不会造成任何真正的伤害)。
    【解决方案2】:

    让用户 CHMOD 777 进入根目录,让你的脚本创建新文件夹,然后让他们恢复根目录的权限。

    【讨论】:

    • 这个答案似乎是最简单和最直接的。这样做有什么影响吗?
    • 我能想到的主要一点是,如果用户没有 root/sudo 访问权限,如果他们决定卸载您的应用,该文件夹将无法删除。
    • 授予随机用户对关键系统资源的写入权限总是有问题。在最坏的情况下,入侵者植入了一个脚本,该脚本正坐在那里等待安装根后门的机会。只要在能够修改系统根目录的时刻运行,这就是即时的权限提升。