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:
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
Attivare Il riavvio della macchina virtuale (hard) dalla console seriale di Azure.
Interrompere la macchina virtuale nel menu GRUB con il tasto ESC .
Selezionare E per modificare la prima voce del kernel nel menu GRUB.
Passare alla
linux16
riga e aggiungereselinux=0
per disabilitare temporaneamente SELinux.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 laSELINUX
chiave. Vedere lo screenshot seguente come esempio:Si noti l'ultima riga,
SELINUXTYPE=disabled
. LaSELINUXTYPE
chiave deve essere impostata sutargeted
,minimum
omls
anzichédisabled
su . Lo screenshot seguente mostra la configurazione corretta:
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.
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.
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.Dopo la correzione della configurazione SELinux, eseguire le azioni seguenti:
- Uscire da chroot.
- Smontare la copia dei file system dalla macchina virtuale di salvataggio/ripristino.
- 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. - 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.