適用対象: .NET Core 2.1、.NET Core 3.1、.NET 5
この記事では、Linux で ASP.NET Core アプリケーションを別のユーザーで自動的に起動するように構成する方法について説明します。
前提条件
このパートの演習に従うには、まず、このシリーズの前の部分で説明したセットアップに従う必要があります。 さらに、次のものが必要です。
- Linux 仮想マシン。できれば Linux の Ubuntu 18.04 LTS ディストリビューションを実行します。
- Nginx は自動的に実行され、ポート 80 で要求をリッスンしています。
- リバース プロキシとして構成され、受信要求をポート 5000 でリッスンしている ASP.NET Core アプリケーションにルーティングする Nginx。
- ASP.NET Core アプリケーションは、サーバーの再起動後、またはプロセスが停止またはクラッシュしたときに自動的に起動するように構成されています。
このパートの目標
前のパートでは、ASP.NET Core アプリケーション用のサービス ファイルを作成し、組み込みの www ユーザー コンテキストで実行するようにサービスを構成しました。
ただし、一部の環境では、異なるユーザー コンテキストでアプリケーションを実行することが必要な場合があります。 これにより、同じサーバーで実行されている可能性がある他のアプリケーションからの分離を完全に制御できます。 たとえば、複数の Web アプリケーションをホストする場合、(すべてのアプリケーションを同じ www-data ユーザー コンテキストで実行するのではなく) アプリケーションごとに個別にアクセス許可を構成する柔軟性を持つために、各アプリケーションを独自のユーザー アカウントで実行するように構成できます。
目標は、特定のユーザー アカウントで実行するように ASP.NET Core アプリケーションを構成することです。
ユーザーを作成する方法を練習し、コンピューターで使用できる他のユーザー アカウントを一覧表示する方法について説明します。
Note
この部分は省略可能です。 また、チュートリアル シリーズの残りの部分で ASP.NET Core アプリケーションを実行するユーザー コンテキストは関係ありません。
アプリケーションを実行する新しいユーザーを作成する
まず、新しいユーザーを作成し、サービス ファイルを編集して、その新しいユーザー コンテキスト内でサービスを実行します。 ユーザー アカウントを作成するには、 sudo adduser <username>
コマンドを実行します。 このデモでは、選択したユーザー名が firstappuser
。 ただし、任意の名前を自由に使用できます。
このスクリーンショットは、 firstappuser
アカウントを作成した結果を示しています。
ASP.NET Core サービスは www-data ユーザー コンテキストで実行されることを思い出してください。 これは、Apache や Nginx などのサービス アプリケーションに使用される組み込みアカウントです。 このようなワークロードには、このアカウントを使用することをお勧めします。 groups www-data
コマンドとgroups firstappuser
コマンドを実行して両方のユーザーのグループ メンバーシップを確認しても、違いは見られません。
Linux のローカル ユーザー アカウントは、 /etc/passwd ファイルに格納されます。 sudo cat /etc/passwd
を実行すると、ルート ユーザーを含むすべてのユーザーが表示されます。 次のスクリーンショットでは、各列について説明しています。
www-data
ユーザーとfirstappuser
ユーザーの違いを確認するには、sudo cat /etc/passwd | grep 'www-data\|firstappuser'
コマンドを実行します。 出力は次のようになります。
Note
www-data
ユーザーがシェル用に構成/usr/sbin/nologin
。 これは、 www-data
ユーザーが SSH を使用して対話形式でこのコンピューターにログオンできないことを意味します。 ただし、 firstappuser
これを行うことができます。 新しいアカウントはサービス アカウントであるため、セキュリティ対策として、ユーザー アカウントがログオンしないようにするのが理にかなっています。
シェル アクセスを無効にするには、 sudo usermod -s /usr/sbin/nologin firstappuser
コマンドを実行します。
ここまでは、サービス アカウントとして使用できるアカウント (firstappuser) を作成しました。 次の手順では、そのユーザー アカウント内で実行するように ASP.NET Core サービスを構成します。 vi コマンドを使用してサービス ファイルを開きます。 "www-data" を "firstappuser" (または選択した任意のユーザー名) に置き換え、ファイルを保存します。
これにより、ASP.NET Core アプリケーションは、既定の www-data
アカウントとは異なるユーザー アカウントを使用して開始できます。
サービス ファイルを変更した後、 sudo systemctl daemon-reload
を実行して構成を再読み込みします。 次に、 sudo systemctl restart myfirstwebapp.service
を実行してサービスを再起動します。
アプリケーションが新しいユーザー アカウントで実行されていることを確認する
特定のプロセスを実行するユーザーを識別するには、いくつかの方法があります。 たとえば、 ps -aux | grep <username>
を実行できます。 この方法は役に立ちますが、実際のコマンド ライン コンテンツなど、一部の情報が不足している可能性があります。 ただし、 htop
を使用して、より完全な情報を収集する簡単な方法があります。
注: Htop
はタスク マネージャーです。 これについては、このシリーズの後半で説明します。 Htop
は、使用している可能性のある Ubuntu サーバーのバージョンなど、いくつかの Linux ディストリビューションにプレインストールされています。 htop
が Linux ディストリビューションにインストールされていない場合は、パッケージ マネージャーを使用してインストールできます。
次のスクリーンショットを確認します。 systemctl status
を実行すると、PID
を取得できます。 次に、-p
スイッチを使用してhtop
コマンドにPID
を渡し、そのPID
のプロセスの詳細を取得します。
htop -p <PID>
コマンドの出力を次に示します。
スクリーンショットに示すように、サンプル ASP.NET Core アプリケーションは、このパートで説明するコマンドを使用して作成された新しいユーザーの下で実行されるようになりました。
htop
を終了するには、F10 または Q を押します。
次のステップ
パート 2.4 - ローカル ファイアウォールを使用して Linux をセキュリティで保護し、リモート コンピューターからのリモート HTTP アクセスを許可する