SELinux の構成ミスが原因で Azure Linux 仮想マシンへの SSH 接続が失敗する

適用対象: ✔️ Linux VM

Note

この記事で参照されている CentOS は Linux ディストリビューションであり、EOL (End Of Life) に到達します。 適宜、使用と計画を検討してください。 詳細については、「 CentOS End Of Life ガイダンスを参照してください。

この記事では、SELinux の構成ミスが原因で Azure 仮想マシン (VM) への Secure Shell (SSH) 接続が失敗する問題の解決策を示します。

背景

Unix セキュリティ モデルは、随意アクセス制御 (DAC) に基づいています。 Security-Enhanced Linux (SELinux) は、カーネル モジュールとユーザースペース ツールを使用して Linux 用の必須アクセス制御 (MAC) を実装します。 MAC は、リソース アクセスに対してより制御された環境を提供し、ルート ユーザーがオペレーティング システム (OS) 上のすべてのリソースに制限なしでアクセスする機能を削除します。 また、従来の Unix セキュリティ モデルを利用することで、複数の種類のセキュリティ リスクを軽減します。

さまざまなディストリビューションには、すぐに使用できる SELinux が含まれるか、カーネルサポートをアクティブ化してユーザースペースツールをインストールする簡単な方法が用意されています。 詳細については、主要な Linux プロバイダーの一部の SELinux に関する次の記事を参照してください。

Azure 上の Red Hat ベースのイメージには、SELinux が有効になっています。他のディストリビューションでは行われません。 UbuntuSELinux を使用すると、このディストリビューションで保持されていない状態に関する警告が表示されます。 Ubuntu では、 AppArmor と呼ばれる MAC 用の別のソリューションが実装されています。

前提条件

コンソールが有効になっており、Linux VM で機能していることを確認します。

現象

SELinux が正しく構成されていないと、OS が SELinux ポリシーを読み込めなくなり、OS がブートを完了できなくなる可能性があります。

Azure portal または Azure CLI からシリアル コンソールを確認します。 出力の末尾近くに次のメッセージが表示されます。

シリアル コンソール ログの

SELinux 構成は、システム管理者によって管理されます。 システム管理者は、次のいずれかの方法を使用して、この問題を解決できます。

解決策 1: シリアル コンソールを使用して SELinux がオフになっている VM を起動する

  1. Azure シリアル コンソールから Restart VM (Hard) をトリガー

  2. ESC キーを使用して GRUB メニューで VM を中断します。

  3. [ E を選択して、GRUB メニューの最初のカーネル エントリを変更します。

  4. linux16行に移動し、を追加して SELinux を一時的に無効にします。

    GRUB メニュー レベルで起動を中断して SELinux を一時的に無効にするプロセスを示すアニメーション GIF。

  5. /etc/selinux/configで SELinux 構成を検証して修正します。

    たとえば、一般的な間違いの 1 つは、 SELINUXTYPE キーを、 SELINUX キーに使用される値のいずれかに設定することです。 例として、次のスクリーンショットを参照してください。

    SELINUXTYPE キーが正しく無効に設定されていることを示すスクリーンショット。

    最後の行 ( SELINUXTYPE=disabled) に注目してください。 SELINUXTYPE キーは、disabledではなく、targetedminimum、またはmlsに設定する必要があります。 次のスクリーンショットは、正しい構成を示しています。

    /etc/selinux/config の正しい構成を示すスクリーンショット。

解決策 2: 復旧 VM を使用して SELinux の構成ミスを修復する

ヒント

VM の最近のバックアップがある場合は、 バックアップから VM を復元し 構成の問題を解決します。

  1. Azure シリアル コンソールが特定の VM で動作しない場合、またはサブスクリプションのオプションでない場合は、復旧/修復 VM を使用してこの問題のトラブルシューティングを行います。 vm 修復コマンドを使用して影響を受ける VM の OS ディスクのコピーがアタッチされた修復 VM を作成します。 chrootを使用して、修復 VM に OS ファイル システムのコピーをマウントします。

    Note

    または、Azure portalを使用して手動で復旧 VM を作成することもできます。 詳細については、「Azure portal で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う」を参照してください。

  2. /etc/selinux/configで SELinux 構成を検証して修正します。 これを行うには、「 ソリューション 1: シリアル コンソールから SELinux をオフにして VM を起動するの手順 5 に従います。

  3. SELinux 構成が修正されたら、次のアクションを実行します。

    1. chroot を終了します。
    2. 復旧/修復 VM からファイル システムのコピーのマウントを解除します。
    3. az vm repair restore コマンドを実行して、修復された OS ディスクを VM の元の OS ディスクにスワップします。 詳細については、「 Azure 仮想マシンの修復コマンドを使用して Linux VM を修復するの手順 5 を参照してください。
    4. Azure シリアル コンソールを確認するか、VM に接続して、VM を起動できるかどうかを検証します。

次のステップ

SELinux の構成ミスが原因で問題が発生しない場合は、「 Azure Linux 仮想マシンのブート エラーをトラブルシューティングする 」を参照してください。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。