In alcuni casi, le applicazioni potrebbero richiedere di creare il proprio sistema operativo o compilare un kernel personalizzato. Se compili kernel personalizzati o crei sistemi operativi personalizzati per le tue VM, assicurati che soddisfino i requisiti riportati in questo documento.
La creazione di un sistema operativo personalizzato è un'attività avanzata per gli utenti con applicazioni che richiedono specificamente un kernel personalizzato. La maggior parte degli utenti può creare VM da una delle immagini pubbliche disponibili, utilizzare lo strumento di importazione dei dischi virtuali automatico per importare i dischi in Compute Engine da altri ambienti o importare manualmente un'immagine personalizzata da un sistema con una distribuzione Linux di uso comune.
Requisiti di supporto hardware
Il kernel deve supportare i seguenti dispositivi:
- PCI Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
- Ponte ISA: Intel 82371AB/EB/MB PIIX4 ISA (rev 03)
Controller Ethernet:
- Adattatore Ethernet Virtio-Net.
gVNIC è obbligatoria per le macchine Tau T2A di seconda generazione e per tutte le serie di macchine di terza generazione e successive.
Inoltre, gVNIC è obbligatorio o consigliato se utilizzi GPU su uno dei seguenti elementi:
vendor = 0x1AF4 (Qumranet/Red Hat)
device id = 0x1000. ID sottosistema 0x1
Il trasferimento del checksum è supportato
TSO v4 è supportato
GRO v4 è supportato
Controller di archiviazione SCSI:
- Controller dello spazio di archiviazione Virtio-SCSI
- vendor = 0x1AF4 (Qumranet/Red Hat)
- ID dispositivo = 0x1004. ID sottosistema 0x8.
- Sono supportati i comandi principali SCSI 4 e i comandi di blocco SCSI 3
- È supportata una sola coda di richieste
- I dischi permanenti registrano settori fisici di 4 KiB / settori logici di 512 byte
- Sono supportati solo i dispositivi di blocco (dischi)
- Il bit della funzionalità Hotplug / Eventi è supportato
- Porte seriali:
- Quattro porte 16550A
- ttyS0 su IRQ 4
- ttyS1 su IRQ 3
- ttyS2 su IRQ 6
- ttyS3 su IRQ 7
Opzioni di compilazione del kernel Linux richieste
Devi compilare il kernel del sistema operativo con le seguenti opzioni:
CONFIG_KVM_GUEST=y
- Attiva la funzionalità di paravirtualizzazione.
CONFIG_KVM_CLOCK=y
- Attiva l'orologio paravirtualizzato (se applicabile alla tua versione del kernel).
CONFIG_VIRTIO_PCI=y
- Attiva i dispositivi PCI paravirtualizzati.
CONFIG_SCSI_VIRTIO=y
- Abilita l'accesso ai dischi paravirtualizzati.
CONFIG_VIRTIO_NET=y
- Abilita l'accesso alla rete.
CONFIG_PCI_MSI=y
- Attiva l'invio di interruzioni ad alte prestazioni, che è obbligatorio per i dispositivi SSD locali.
Opzioni di compilazione del kernel per la sicurezza
Utilizza le impostazioni di sicurezza consigliate nelle opzioni di compilazione del kernel:
CONFIG_STRICT_DEVMEM=y
- Limita
/dev/mem
in modo da consentire l'accesso solo allo spazio PCI, al codice BIOS e alle regioni di dati.
- Limita
CONFIG_DEVKMEM=n
- Disattiva il supporto di
/dev/kmem
. - Blocca l'accesso alla memoria del kernel.
- Disattiva il supporto di
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
- Imposta una memoria virtuale ridotta protetta dall'allocazione nello spazio utente.
CONFIG_DEBUG_RODATA=y
- Contrassegna i dati di sola lettura del kernel come protetti dalla scrittura nelle tabelle di pagine per rilevare le scritture accidentali (e errate) a questi dati
const
. Questa opzione può avere un lieve impatto sulle prestazioni perché una parte del codice del kernel non sarà più coperta da una TLB di 2 MB.
- Contrassegna i dati di sola lettura del kernel come protetti dalla scrittura nelle tabelle di pagine per rilevare le scritture accidentali (e errate) a questi dati
CONFIG_DEBUG_SET_MODULE_RONX=y
- Rileva le modifiche indesiderate al testo e ai dati di sola lettura del modulo del kernel caricabile. Questa opzione impedisce anche l'esecuzione dei dati del modulo.
CONFIG_CC_STACKPROTECTOR=y
- Attiva la funzionalità GCC di
-fstack-protector
. Questa funzionalità inserisce un valore canary all'inizio delle funzioni critiche, nello stack prima dell'indirizzo di ritorno, e convalida il valore prima di restituirlo effettivamente. Ciò causa anche gli overflow del buffer basati su stack (che devono sovrascrivere questo indirizzo di ritorno) a sovrascrivere il canary, che viene rilevato e l'attacco viene quindi neutralizzato utilizzando un panico del kernel.
- Attiva la funzionalità GCC di
CONFIG_COMPAT_VDSO=n
- Garantisce che la VDSO non si trovi in un indirizzo prevedibile per rafforzare l'ASLR. Se attivata, questa funzionalità mappa il VDSO all'indirizzo di stile precedente prevedibile, fornendo una posizione prevedibile a cui deve saltare il codice di exploit.
Inserisci
N
qui se stai utilizzando una versioneglibc
sufficientemente recente (2.3.3 o successiva) per rimuovere la mappatura VDSO con mappatura elevata e utilizzare esclusivamente la VDSO randomizzata.
- Garantisce che la VDSO non si trovi in un indirizzo prevedibile per rafforzare l'ASLR. Se attivata, questa funzionalità mappa il VDSO all'indirizzo di stile precedente prevedibile, fornendo una posizione prevedibile a cui deve saltare il codice di exploit.
Inserisci
CONFIG_COMPAT_BRK=n
- Non disattivare la randomizzazione dell'heap.
CONFIG_X86_PAE=y
- Imposta questa opzione per un kernel a 32 bit perché PAE è necessario per il supporto di NX. Ciò consente anche di supportare uno spazio di scambio più grande per scopi non di overcommit.
CONFIG_SYN_COOKIES=y
- Fornisce una certa protezione contro gli attacchi SYN flood.
CONFIG_SECURITY_YAMA=y
- Viene selezionato Yama, che estende il supporto del DAC con impostazioni di sicurezza aggiuntive per l'intero sistema oltre ai normali controlli di accesso discrezionale di Linux. Al momento, l'impostazione è la limitazione dell'ambito di ptrace.
CONFIG_SECURITY_YAMA_STACKED=y
- Questa opzione forza l'accodamento di Yama con l'LSM principale selezionato quando Yama è disponibile.
Impostazioni di sicurezza del kernel
Puoi anche rafforzare la sicurezza del kernel tramite il file delle impostazioni del kernel. Modifica il file /etc/sysctl.conf
per includere le seguenti impostazioni di sicurezza consigliate:
# Enable syn flood protection
net.ipv4.tcp_syncookies = 1
# Ignore source-routed packets
net.ipv4.conf.all.accept_source_route = 0
# Ignore source-routed packets
net.ipv4.conf.default.accept_source_route = 0
# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
# Ignore ICMP redirects
net.ipv4.conf.default.accept_redirects = 0
# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.all.secure_redirects = 1
# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.default.secure_redirects = 1
# Don't allow traffic between networks or act as a router
net.ipv4.ip_forward = 0
# Don't allow traffic between networks or act as a router
net.ipv4.conf.all.send_redirects = 0
# Don't allow traffic between networks or act as a router
net.ipv4.conf.default.send_redirects = 0
# Reverse path filtering—IP spoofing protection
net.ipv4.conf.all.rp_filter = 1
# Reverse path filtering—IP spoofing protection
net.ipv4.conf.default.rp_filter = 1
# Ignore ICMP broadcasts to avoid participating in Smurf attacks
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Ignore bad ICMP errors
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.all.log_martians = 1
# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.default.log_martians = 1
# Randomize addresses of mmap base, heap, stack and VDSO page
kernel.randomize_va_space = 2
# Provide protection from ToCToU races
fs.protected_hardlinks=1
# Provide protection from ToCToU races
fs.protected_symlinks=1
# Make locating kernel addresses more difficult
kernel.kptr_restrict=1
# Set ptrace protections
kernel.yama.ptrace_scope=1
# Set perf only available to root
kernel.perf_event_paranoid=2
Passaggi successivi
- Installa il sistema operativo su un disco di avvio e importa manualmente l'immagine in Compute Engine come immagine personalizzata.
- Se hai già importato il sistema operativo come immagine personalizzata, configura le impostazioni non del kernel sull'immagine in modo che possa funzionare in modo ottimale nell'ambiente Compute Engine.