为什么我必须将权限设置为 777 才能写入

为什么我必须将权限设置为 777 才能写入

在我最新的 ubuntu 版本中,在 public_html 文件夹中安装时,我必须将文件夹权限设置为 777,以便脚本可以保存到公共 html 文档中的特定位置。这是为什么?

我印象中 755 应该可以读取,在共享主机账户上通常也是如此,但在我的 vps 系统上,我需要将文件夹设置为 777 才能使脚本正常工作。

该脚本是 phpmydirectory,但我可能在 vps 上安装的所有脚本都存在这个问题。

有没有办法使文件夹 755 可写,因为我认为 777 是一个安全问题?

如果有任何建议,请告诉我们,谢谢。

答案1

我试着猜测:执行你的脚本的用户似乎没有所需的权限。

例如,如果使用 apache web 服务器运行的 php 脚本将文件上传到某个子目录,那么该子目录应该可供 apache 用户(通常是“apache”或“www-data”)进行读/写访问。

[编辑]:当您运行 Web 服务器(例如 apache)时,只有父进程以“root”身份运行,子进程(实际上是您关心的运行 php 脚本的进程)通常在 ubuntu/debian 平台上使用“www-data”uid 运行。

ps auwx | grep apache | grep -v grep
root      1606  0.0  0.0  63520  3020 ?        Ss   déc.01   0:16 /usr/sbin/apache2 -k start
www-data 22325  0.0  0.0 352676  4232 ?        Sl   06:25   0:02 /usr/sbin/apache2 -k start
www-data 22326  0.0  0.0 352676  4228 ?        Sl   06:25   0:02 /usr/sbin/apache2 -k start

这就解释了为什么如果特定子目录不属于“www-data”用户或组,它就无法写入 public_html 中的特定子目录。

为了解决这个问题,例如,您可以将子目录的“group”属性设置为“www-data”,并为该组设置写权限:

sudo chgrp -R www-data ./public_html/my_files
sudo chmod -R g+w  ./public_html/my_files

警告:通过执行此操作,您将以递归方式将 ./public_html/my_files 的组属性更改为 www-data,并允许属于 www-data 组的用户具有写访问权限,从而允许 apache 写入(覆盖)该文件夹中的文件。

相关内容