Nginx

普通使用者會傷害我的伺服器嗎?

  • December 3, 2020

我有一個由我完美配置和優化的**LEMP 堆棧(Ubuntu 20.04) 。**它沒有任何網路面板。我最初只將它用於我自己的網站。後來我開始將一些客戶端網站添加到伺服器中。

由於他們已請求 SFTP 訪問權限來管理網站文件,因此我決定確保他們無法訪問/編輯伺服器上的敏感文件。

我為盡可能多地隔離使用所做的更改列表:

  1. 為自己創建了一個 sudo 使用者(讓我們呼叫serveradmin)並且 root 訪問已被禁用
  2. chmod 700 /home/serveradmin(沒有-R
  3. 為我的客戶(例如 client1、client2…)創建普通使用者帳戶,然後將它們全部添加到serveradmin
  4. 將 nginx 使用者設置為serveradmin
  5. 為每個客戶端創建不同的 php-fpm 池。(例如所有者:client1 組:serveradmin,對於偵聽器也是如此)
  6. 使其他人無法訪問敏感的網站文件(例如 wp-config.php 文件包含數據庫憑據)
  7. chmod -R 700用於網站 SSL 文件夾。
  8. 當然,為每個客戶端創建不同的 mysql 使用者和數據庫。

現在,我 100% 確定沒有人可以訪問其他人的 /home/clientX 文件夾。他們至少不能編輯或刪除任何文件。但是,我不是經驗豐富的 linux 使用者,也不是託管服務提供商。**問題是,**這些客戶端會通過訪問和編輯 /home 文件夾之外的任何系統文件來損壞/傷害我的伺服器嗎?(例如 /etc,我猜 /var/run 路徑可能很危險)。

我沒有更改預設系統文件的文件夾/文件權限。

那麼,我的伺服器不安全嗎?它是否仍然需要更改以提高安全性,或者我應該完全避免給他們 SFTP 訪問權限?

親切的問候。

至少第 3 點和第 4 點是無效/不安全的。

  1. 為我的客戶(例如 client1、client2…)創建普通使用者帳戶,然後將它們全部添加到 serveradmin 組

普通使用者帳戶與伺服器管理員有什麼關係?絕對沒有,即使命名明智。讓每個站點使用者都屬於該serveradmin組有什麼意義?

  1. 將 nginx 使用者設置為 serveradmin

同樣地。NGINX 應該在自己的使用者下執行,通常是nginx(CentOS/RHEL 發行版)或www-data(基於 Debian 的系統)。它與伺服器管理無關。

我無法詳細說明目前設置如何不安全,因為這需要更多詳細資訊,例如 PHP 的套接字所有權、文件位置等。

真正安全的設置假定盡可能多的使用者分離,這與服務有關。因此,首先為 NGINX 分配(或使用軟體包提供的使用者)單獨的使用者,並遵循PHP-FPM 的安全權限。NGINX 的使用者應該在每個站點使用者的組中,而不是相反:

usermod -a -G client1 nginx
usermod -a -G client2 nginx
...

現在nginx使用者屬於client1client2組。為什麼,是因為nginx使用者確實必須能夠閱讀每個網站文件。

另一方面,PHP-FPM 池可以很好地綁定到client1:client1執行時和套接字偵聽選項。

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