Condividi tramite


La connessione SSH a macchine virtuali Linux di Azure non riesce a causa di errori di configurazione 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.

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

Background

Il modello di sicurezza Unix si basa sul livello discrezionale Controllo di accesso (DAC). Security-Enhanced Linux (SELinux) implementa l'Controllo di accesso obbligatorio (MAC) per Linux usando moduli 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 in Azure sono dotate di 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 l'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 Il riavvio della macchina virtuale (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 non è impostata correttamente su disabilitata.

    Si noti l'ultima riga, SELINUXTYPE=disabled. La SELINUXTYPE chiave deve essere impostata su targeted, minimumo mls anziché disabledsu . 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. Nel caso in cui la console seriale di Azure non funzioni nella macchina virtuale specifica o non sia 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 salvataggio usando il portale di Azure. Per altre informazioni, vedere Risolvere i problemi di una macchina virtuale Linux collegando il disco del sistema operativo a una macchina virtuale di ripristino tramite 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 Ripristinare una macchina virtuale Linux usando i comandi di ripristino della macchina virtuale di Azure.
    4. Verificare se la macchina virtuale è in grado di avviarsi dando un'occhiata alla console seriale di 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 Risolvere gli errori di avvio di Macchine virtuali Linux di Azure per altre opzioni di risoluzione dei problemi.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.