La connessione SSH a Azure macchine virtuali Linux non riesce a causa di una configurazione errata di SELinux

Si applica a: ✔️ macchine virtuali di Linux

Note

CentOS a cui si fa riferimento in questo articolo è una distribuzione Linux e raggiungerà End Of Life (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per altre informazioni, vedere Indicazioni sulla fine della vita di CentOS.

Sommario

Questo articolo fornisce una soluzione a un problema a causa del quale la connessione Secure Shell (SSH) a una macchina virtuale (VM) Azure ha esito negativo a causa di una configurazione errata di SELinux.

Background

Il modello di sicurezza Unix si basa sull'Controllo di accesso discrezionale (DAC). Security-Enhanced Linux (SELinux) implementa il Controllo degli Accessi Obbligatorio (MAC) per Linux utilizzando moduli del kernel e strumenti per lo spazio utente. MAC offre un ambiente più controllato per l'accesso alle risorse e rimuove la possibilità dell'utente radice di accedere a tutte le risorse nel sistema operativo (OS) senza restrizioni. Riduce inoltre più tipi di rischi per la sicurezza usando il modello di sicurezza Unix tradizionale.

Le diverse distribuzioni includono SELinux predefinito o offrono un modo semplice per attivare il supporto del kernel e installare gli strumenti dello spazio utente. Per altre informazioni, vedere gli articoli SELinux seguenti di alcuni dei principali provider Linux:

Le immagini basate su Red Hat su Azure vengono fornite con SELinux abilitato; altre distribuzioni non lo fanno. Quando si usa SELinux in Ubuntu, viene visualizzato un avviso relativo allo stato non mantenuto in questa distribuzione.When you use SELinux in Ubuntu, there's a warning about its unmaintained state on this distribution. Ubuntu implementa una soluzione diversa per MAC, denominata AppArmor.

Prerequisiti

Assicurarsi che la console seriale sia abilitata e funzionale nella macchina virtuale Linux.

Sintomi

Una configurazione errata di SELinux può comportare l'impossibilità del sistema operativo di caricare il criterio SELinux, che impedisce al sistema operativo di completare l'avvio.

Controllare la console seriale dal portale di Azure o tramite il interfaccia della riga di comando di Azure. Il messaggio seguente viene visualizzato vicino alla fine dell'output:

Screenshot che mostra l'errore 'Failed to load SELinux policy' (Impossibile caricare i criteri SELinux) nel log della console seriale.

La configurazione SELinux viene gestita dall'amministratore di sistema. L'amministratore di sistema può risolvere questo problema usando uno dei metodi seguenti.

Soluzione 1: Avviare la macchina virtuale con SELinux disattivata usando la console seriale

  1. Attivare Restart VM (Hard) dalla console seriale di Azure.

  2. Interrompere la macchina virtuale nel menu GRUB con il tasto ESC .

  3. Selezionare E per modificare la prima voce del kernel nel menu GRUB.

  4. Passare alla linux16 riga e aggiungere selinux=0 per disabilitare temporaneamente SELinux.

    GIF animata che mostra il processo di interruzione dell'avvio a livello di menu GRUB per disabilitare temporaneamente SELinux.

  5. Convalidare e correggere la configurazione SELinux in /etc/selinux/config.

    Ad esempio, un errore comune consiste nell'impostare la SELINUXTYPE chiave su uno dei valori usati per la SELINUX chiave. Vedere lo screenshot seguente come esempio:

    Screenshot che mostra che la chiave SELINUXTYPE è impostata in modo errato su 'disabilitata'.

    Si noti l'ultima riga, SELINUXTYPE=disabled. La SELINUXTYPE chiave deve essere impostata su targeted, minimum, o mls anziché su disabled. Lo screenshot seguente mostra la configurazione corretta:

    Screenshot che mostra la configurazione corretta di /etc/selinux/config.

Soluzione 2: Ripristinare la configurazione errata di SELinux usando una macchina virtuale di ripristino

Suggerimento

Se si dispone di un backup recente della macchina virtuale, ripristinare la macchina virtuale dal backup per risolvere il problema di configurazione.

  1. Se la console seriale Azure non funziona nella macchina virtuale specifica o non è un'opzione nella sottoscrizione, risolvere questo problema usando una macchina virtuale di ripristino/ripristino. Utilizza i comandi di riparazione vm per creare una VM di riparazione a cui è collegata una copia del disco del sistema operativo della VM interessata. Montare la copia dei file system del sistema operativo nella macchina virtuale di ripristino utilizzando chroot.

    Note

    In alternativa, è possibile creare manualmente una macchina virtuale di ripristino usando il portale di Azure. Per ulteriori informazioni, consulta Risolvi i problemi di una VM Linux attaccando il disco del sistema operativo a una VM di ripristino usando il portale di Azure.

  2. Convalidare e correggere la configurazione SELinux in /etc/selinux/config. A tale scopo, seguire il passaggio 5 della soluzione 1: Avviare la macchina virtuale con SELinux disattivata dalla console seriale.

  3. Dopo la correzione della configurazione SELinux, eseguire le azioni seguenti:

    1. Uscire da chroot.
    2. Smontare la copia dei file system dalla macchina virtuale di salvataggio/ripristino.
    3. Eseguire il comando az vm repair restore per scambiare il disco del sistema operativo ripristinato con il disco del sistema operativo originale della macchina virtuale. Per altre informazioni, vedere il passaggio 5 in Riparare una VM Linux utilizzando i comandi di riparazione della macchina virtuale Azure.
    4. Verificare se la macchina virtuale è in grado di eseguire l'avvio esaminando la console seriale Azure o provando a connettersi alla macchina virtuale.

Passaggi successivi

Nel caso in cui il problema non sia dovuto alla configurazione errata di SELinux, vedere la sezione Troubleshoot Azure Linux Macchine virtuali Boot Errors per altre opzioni di risoluzione dei problemi.