共用方式為


第 2.3.1 部分 - [選擇性] 在 Linux 中設定 ASP.NET Core 應用程式,以在不同的使用者下自動啟動

適用於: .NET Core 2.1、.NET Core 3.1、.NET 5

本文介紹如何在Linux中設定 ASP.NET Core應用程式,以在不同的使用者下自動啟動。

必要條件

若要遵循此部分中的練習,您必須先遵循本系列先前部分所述的設定。 此外,您必須具備下列專案:

  • Linux 虛擬機,最好是執行 Linux 的 Ubuntu 18.04 LTS 散發套件。
  • Nginx 會自動執行,並在埠 80 上接聽要求。
  • Nginx 設定為反向 Proxy,並將連入要求路由傳送至在埠 5000 上接聽的 ASP.NET Core 應用程式。
  • ASP.NET Core 應用程式設定為在伺服器重新啟動或進程停止或當機時自動啟動。

此部分的目標

在上一個部分中,您已為 ASP.NET Core 應用程式建立服務檔案,並將服務設定為在內建 www-user 內容中執行。

不過,在某些環境中,您可能想要在不同的用戶內容下執行應用程式。 這可讓您完全控制與其他可能在同一部伺服器上執行的應用程式隔離。 例如,如果您裝載多個 Web 應用程式,您可能會想要將每個應用程式設定為在其自己的使用者帳戶下執行,以便有彈性地為每個應用程式設定許可權(而不是在相同的 www-data 使用者內容下執行所有應用程式)。

目標是將 ASP.NET Core 應用程式設定為在特定用戶帳戶下執行。

您將練習如何建立使用者,並瞭解如何列出計算機上可用的其他用戶帳戶。

注意

這個部分是選擇性的。 您對於本教學課程系列其餘部分執行 ASP.NET Core 應用程式的用戶內容也不重要。

建立新使用者以執行您的應用程式

您一開始會建立新的使用者,並編輯您的服務檔案,以在該新的使用者內容中執行您的服務。 若要建立使用者帳戶,請執行 sudo adduser <username> 命令。 在這裡示範中,所選取的使用者名稱稱為 firstappuser。 不過,您可以隨意使用您想要的任何名稱。

sudo adduser 命令的螢幕快照。

此螢幕快照顯示建立 firstappuser 帳戶的結果。

回想一下,ASP.NET Core 服務會在 www-data 使用者內容中執行。 這是用於服務應用程式的內建帳戶,包括 Apache 和 Nginx。 建議您將此帳戶用於這類工作負載。 如果我們執行 groups www-datagroups firstappuser 命令來檢查這兩個使用者的群組成員資格,您就不會注意到任何差異。

Linux 中的本機用戶帳戶會儲存在 /etc/passwd 檔案中。 如果您執行 sudo cat /etc/passwd,您會看到所有使用者,包括根使用者。 下列螢幕快照說明每個數據行。

sudo cat 命令的螢幕快照。

若要查看和 firstappuser 使用者之間的差異www-data,請執行 sudo cat /etc/passwd | grep 'www-data\|firstappuser' 命令。 輸出會類似下列內容。

sudo cat grep 命令的螢幕快照。

注意

用戶 www-data/usr/sbin/nologin 針對殼層進行設定。 這表示 www-data 用戶無法使用SSH以互動方式登入這部電腦。 不過, firstappuser 能夠執行這項操作。 因為新帳戶會是服務帳戶,所以作為安全性措施是合理的,以防止用戶帳戶登入。

若要停用殼層存取,請執行 sudo usermod -s /usr/sbin/nologin firstappuser 命令。

sudo usermod 命令的螢幕快照。

到目前為止,您已建立一個帳戶(firstappuser),可用來作為我們的服務帳戶。 下一個步驟是將 ASP.NET Core 服務設定為在該用戶帳戶內執行。 使用 vi 命令開啟服務檔案。 將 「www-data」 取代為 「firstappuser」 (或您選擇的任何用戶名稱),然後儲存盤案。

命令中 firstappuser 的螢幕快照。

這可讓 ASP.NET Core 應用程式使用與預設 www-data 帳戶不同的用戶帳戶來啟動。

變更服務檔案之後,請執行 sudo systemctl daemon-reload來重載組態。 然後,執行 sudo systemctl restart myfirstwebapp.service來重新啟動您的服務。

確認應用程式是在新的使用者帳戶下執行

有數種方法可識別執行特定進程的使用者。 例如,您可以執行 ps -aux | grep <username>。 雖然這種方法可能很有用,但您仍然會遺失一些資訊,例如實際的命令行內容。 不過,使用 收集更完整的資訊 htop有一種簡單方式。

注意: Htop 是任務管理員。 本系列稍後將說明。 Htop 已在數個 Linux 發行版中預安裝,包括您可能使用的 Ubuntu 伺服器版本。 如果 htop Linux 發行版中未安裝,您可以使用套件管理員加以安裝。

檢查下列螢幕快照。 您可以執行 systemctl status取得 。 PID 然後,使用 -p 參數將 傳遞PIDhtop 命令,以取得該程式PID的詳細數據。

htop 命令的螢幕快照。

以下是命令的 htop -p <PID> 輸出。

htop -p 命令的螢幕快照。

如螢幕快照所示,範例 ASP.NET Core 應用程式現在會在使用此部分討論的命令所建立的新使用者下執行。

若要結束 htop,請按 F10Q

下一步

第 2.4 部分 - 使用本機防火牆保護 Linux,並允許從遠端電腦進行遠端 HTTP 存取