Em algumas situações, as suas aplicações podem exigir que crie o seu próprio sistema operativo ou compile um kernel personalizado. Se compilar kernels personalizados ou criar sistemas operativos personalizados para as suas VMs, certifique-se de que cumprem os requisitos neste documento.
Criar um sistema operativo personalizado é uma tarefa avançada para utilizadores com aplicações que requerem especificamente um kernel personalizado. A maioria dos utilizadores pode criar VMs a partir de uma das imagens públicas disponíveis, usar a ferramenta de importação de discos virtuais automatizada para importar discos para o Compute Engine a partir de outros ambientes ou importar manualmente uma imagem personalizada a partir de um sistema com uma distribuição Linux comum.
Requisitos de apoio técnico de hardware
O seu kernel tem de suportar os seguintes dispositivos:
- PCI Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
- Ponte ISA: Intel 82371AB/EB/MB PIIX4 ISA (rev 03)
Controlador de Ethernet:
- Adaptador Ethernet Virtio-Net.
O gVNIC é necessário para a série de máquinas de segunda geração que usam o desempenho de rede de nível 1 por VM, o Tau T2A e todas as séries de máquinas de terceira geração e posteriores, excluindo instâncias bare metal.
Além disso, a gVNIC é obrigatória ou recomendada se usar GPUs em qualquer um dos seguintes casos:
A interface de LAN IDPF (Intel Data Plane Function) é necessária para instâncias bare metal e instâncias que usam o RDMA na nuvem.
O adaptador de Ethernet Virtio-Net só é suportado com a primeira e a segunda geração de séries de máquinas.
vendor = 0x1AF4 (Qumranet/Red Hat)
device id = 0x1000. Subsystem ID 0x1
A descarga de checksum é suportada
O TSO v4 é suportado
O GRO v4 é suportado
Se usar interfaces de rede dinâmicas, tem de carregar o módulo 802.1Q no kernel
Controlador de armazenamento SCSI:
- Controlador de armazenamento Virtio-SCSI
- vendor = 0x1AF4 (Qumranet/Red Hat)
- device id = 0x1004. Subsystem ID 0x8.
- Os comandos primários SCSI 4 e os comandos de blocos SCSI 3 são suportados
- Só é suportada uma fila de pedidos
- Os discos persistentes comunicam 4 KiB de setores físicos / 512 bytes de setores lógicos
- Apenas são suportados dispositivos de bloqueio (discos)
- O bit de funcionalidade Hotplug / Events é suportado
- Portas de série:
- Quatro portas 16550A
- ttyS0 no IRQ 4
- ttyS1 on IRQ 3
- ttyS2 on IRQ 6
- ttyS3 no IRQ 7
Opções de compilação do kernel do Linux necessárias
Tem de criar o kernel do sistema operativo com as seguintes opções:
CONFIG_KVM_GUEST=y- Ative a funcionalidade de paravirtualização.
CONFIG_KVM_CLOCK=y- Ative o relógio paravirtualizado (se aplicável à versão do seu kernel).
CONFIG_VIRTIO_PCI=y- Ative os dispositivos PCI paravirtualizados.
CONFIG_SCSI_VIRTIO=y- Ative o acesso a discos paravirtualizados.
CONFIG_VIRTIO_NET=y- Ative o acesso à rede.
CONFIG_PCI_MSI=y- Ative a entrega de interrupções de elevado desempenho, que é necessária para dispositivos SSD locais.
Opções de compilação do kernel para segurança
Use as definições de segurança recomendadas nas opções de compilação do kernel:
CONFIG_STRICT_DEVMEM=y- Restrinja
/dev/mempara permitir o acesso apenas ao espaço PCI, ao código BIOS e às regiões de dados.
- Restrinja
CONFIG_DEVKMEM=n- Desativar o suporte para
/dev/kmem. - Bloquear o acesso à memória do kernel.
- Desativar o suporte para
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536- Definir memória virtual baixa protegida da atribuição do espaço do utilizador.
CONFIG_DEBUG_RODATA=y- Marcar os dados de leitura apenas do kernel como protegidos contra escrita nas tabelas de páginas para detetar escritas acidentais (e incorretas) nesses dados
const. Esta opção pode ter um ligeiro impacto no desempenho, uma vez que uma parte do código do kernel deixa de ser coberta por um TLB de 2 MB.
- Marcar os dados de leitura apenas do kernel como protegidos contra escrita nas tabelas de páginas para detetar escritas acidentais (e incorretas) nesses dados
CONFIG_DEBUG_SET_MODULE_RONX=y- Deteta modificações não intencionais no texto do módulo do kernel carregável e nos dados só de leitura. Esta opção também impede a execução de dados de módulos.
CONFIG_CC_STACKPROTECTOR=y- Ativa a funcionalidade
-fstack-protectordo GCC. Esta funcionalidade coloca um valor de canário no início das funções críticas, na pilha antes do endereço de retorno e valida o valor antes de devolver efetivamente. Isto também faz com que os overflows de buffer baseados na pilha (que precisam de substituir este endereço de retorno) substituam o canary, que é detetado e o ataque é, em seguida, neutralizado através de um pânico do kernel.
- Ativa a funcionalidade
CONFIG_COMPAT_VDSO=n- Garante que o VDSO não está num endereço previsível para reforçar o ASLR. Se estiver ativada, esta funcionalidade mapeia o VDSO para o endereço previsível do estilo antigo, fornecendo uma localização previsível para o código de exploração saltar para.
Diga
Naqui se estiver a executar uma versãoglibcsuficientemente recente (2.3.3 ou posterior) para remover o mapeamento VDSO com mapeamento elevado e usar exclusivamente o VDSO aleatório.
- Garante que o VDSO não está num endereço previsível para reforçar o ASLR. Se estiver ativada, esta funcionalidade mapeia o VDSO para o endereço previsível do estilo antigo, fornecendo uma localização previsível para o código de exploração saltar para.
Diga
CONFIG_COMPAT_BRK=n- Não desative o modo aleatório da memória.
CONFIG_X86_PAE=y- Defina esta opção para um kernel de 32 bits, uma vez que o PAE é necessário para o suporte de NX. Isto também permite uma maior compatibilidade com o espaço de troca para fins que não sejam de sobrecompromisso.
CONFIG_SYN_COOKIES=y- Oferece alguma proteção contra ataques SYN "flood".
CONFIG_SECURITY_YAMA=y- Isto seleciona o Yama, que expande o suporte de DAC com definições de segurança adicionais ao nível do sistema além dos controlos de acesso discricionários regulares do Linux. A predefinição é a restrição do âmbito de ptrace.
CONFIG_SECURITY_YAMA_STACKED=y- Esta opção força o Yama a ser apresentado em conjunto com o LSM principal selecionado quando o Yama está disponível.
Definições de segurança do kernel
Também pode reforçar a segurança do kernel através do ficheiro de definições do kernel. Edite o ficheiro /etc/sysctl.conf para incluir as seguintes definições de segurança recomendadas:
# 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
RPMs de RDMA do Cloud
Se planeia usar a imagem do SO com instâncias de computação que usam o Cloud RDMA, tem de instalar os seguintes RPMs adicionais:
infiniband-diagskmod-idpf-irdma(apenas para imagens do SO Rocky Linux otimizadas para Google Cloud )librdmacm-utilslibibverbs-utilsperftestrdma-core
O que se segue?
- Instale o sistema operativo num disco de arranque e importe manualmente a imagem para o Compute Engine como uma imagem personalizada.
- Se já importou o seu sistema operativo como uma imagem personalizada, configure as definições que não são do kernel na imagem para que possa funcionar de forma ideal no ambiente do Compute Engine.