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,你能想到什麼原因導致這個錯誤突然發生,應該怎麼做才能解決它?
值得一提的是,我首先在這裡發布了問題,但我沒有得到任何答案,所以我在這裡嘗試。希望是合法的。
您可以以非 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% 的應用程序,預設設置就可以了。