Linux

public_html 應該屬於哪個組?

  • May 11, 2013

我有一個在 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,你能想到什麼原因導致這個錯誤突然發生,應該怎麼做才能解決它?

值得一提的是,我首先在這裡發布了問題,但我沒有得到任何答案,所以我在這裡嘗試。希望是合法的。

您可以以非 root 使用者身份執行 Dropbox,擁有該使用者和 apache 組擁有的 public_html,並獲得 rwxrwx—(即 770)權限,以便您的使用者和 Apache 都可以讀寫。

此外,作為 Linux/Unix 管理的一般原則,您不應該以 root 身份執行應用程序,除非您絕對必須這樣做。

為了解釋為什麼 Apache 似乎使用 root,如果應用程序以 root 權限啟動,則僅允許它們偵聽特權埠(低於 1024 的埠)。由於 HTTP/HTTPS 分別在埠 80/443 上提供服務,Apache 以 root 身份啟動,然後在其自己的使用者下分叉程序(預設情況下,在基於 Red Hat 的發行版上稱為“apache” - 其中 CentOS 是其中之一 - 或基於 Debian 的發行版上的“www-data” - 例如 Ubuntu)。非特權使用者可以在您的 Apache 配置中進行配置,但對於 95% 的應用程序,預設設置就可以了。

引用自:https://serverfault.com/questions/506907