public_html 应该属于哪个组?

public_html 应该属于哪个组?

我有一个在 Linux - CentOS 上运行的 appache 服务器。

为了能够在 Windows 上编辑我的 php 文件,我将服务器链接到我的 Dropbox 帐户,并从位于 /root/Dropbox 下的 Dropbox 文件夹创建了一个符号链接到我的 public_html 文件夹。然后,当我尝试通过 Windows 编辑 public_html 中的文件时,其权限变为 root,因此我得到了著名的 500 错误。我猜想这与提到的符号链接的权限有关,所以我将符号链接的权限更改为我的用户帐户,但它没有改变。但接下来发生的事情让我不知所措:突然,当我尝试访问我网站上的任何页面时,我得到:

禁止您无权访问此服务器上的 /My/site/name/page.php。

经过一番挖掘,我发现 public_html 的所有者和组是 root, ps aux | grep apache显示

root      4533  0.0  0.0  10892  1604 ?        S    Jul31   0:00     /usr/local/apache/bin/httpd -k start -DSSL
nobody    4534  0.0  0.1  10892  2956 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4535  0.0  0.1  10892  2952 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4536  0.0  0.1  10892  2956 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4537  0.0  0.1  10892  2956 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4538  0.0  0.1  10892  2956 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4551  0.0  0.1  10892  2208 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4556  0.0  0.1  10892  2200 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4565  0.0  0.1  10892  2200 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody    4572  0.0  0.1  10892  2200 ?        S    Jul31   0:00 /usr/local/apache/bin/httpd -k start -DSSL

将 public_html 的组更改为 nobody 成功了,并消除了此错误。但我不知道它是否应该这样,我的意思是,我不知道它之前属于哪个组。

所以我有两个问题:

1. 给定上述 apache 的用户,public_html 应该属于哪个用户?

2. 如果1的答案是root,你能想到导致这个错误突然发生的任何原因吗,以及应该怎么做才能解决它?

值得一提的是,我首先发布了这个问题这里但我没有得到任何答复,所以我在这里尝试。希望这是合法的。

答案1

您可以以非 root 用户身份运行 Dropbox,让该用户和 apache 组拥有 public_html,并授予 rwxrwx--- 权限(即 770),以便您的用户和 Apache 都可以读写。

此外,作为 Linux/Unix 管理的一般原则,除非绝对必要,否则您绝不应该以 root 身份运行应用程序。

为了解释为什么 Apache 似乎使用 root,应用程序只有在以 root 权限启动时才允许监听特权端口(低于 1024 的端口)。由于 HTTP/HTTPS 分别在端口 80/443 上提供服务,因此 Apache 以 root 身份启动,然后在其自己的用户下分叉进程(默认情况下,在基于 Red Hat 的发行版(其中 CentOS 是其中之一)上称为“apache”,在基于 Debian 的发行版(例如 Ubuntu)上称为“www-data”)。非特权用户可以在您的 Apache 配置中配置,但对于 95% 的应用程序来说,默认设置就足够了。

相关内容