Antes de importar uma imagem personalizada para o Alibaba Cloud ou publicá-la no Alibaba Cloud Marketplace, certifique-se de que ela atenda às especificações descritas neste tópico e seja aprovada nos testes de compatibilidade com os tipos de instância do ECS. O cumprimento destas diretrizes aumenta a disponibilidade e a eficiência na importação de imagens personalizadas, facilitando a criação de instâncias do ECS sob medida para o seu negócio. Este documento detalha as especificações para a criação de imagens Linux.
Partições de disco
As partições de disco devem atender aos seguintes requisitos.
-
Redimensionamento de disco
Utilize partições físicas para particionar o disco. A partição raiz deve ser a última partição para evitar falhas durante o redimensionamento do disco do sistema.
Em sistemas que suportam o redimensionamento online de discos em cloud, use o comando
growpartpara redimensionar a partição. Para isso, instale o pacotecloud-utils-growpart. Para mais informações, consulte Resize partitions and file systems (Linux).
-
Partição swap
Não crie uma partição swap.
-
Gerenciamento de LVM
Não use o Logical Volume Management (LVM) para as partições de disco.
-
Montagem de disco
Use UUIDs para configurar os arquivos
fstabegrub. Para mais informações, consulte Use a UUID to automatically mount a data disk in the /etc/fstab file e Modify the disk partition identification method to UUID in the GRUB configuration file.ImportanteUma configuração incorreta do arquivo
fstabpode fazer com que a instância do ECS falhe ao iniciar após uma reinicialização. -
Tamanho do disco
A capacidade mínima do disco do sistema é de 20 GiB.
-
Defina o modo de inicialização da imagem
Para garantir a compatibilidade com tipos de instância que utilizam diferentes modos de inicialização, configure o modo de inicialização (BIOS ou UEFI) para a sua imagem local. Ao importar a imagem, selecione o modo de inicialização que corresponda ao modo real da imagem.
Para saber como configurar o modo de inicialização ao criar uma imagem local, consulte Create a VM and install an operating system.
Para saber como definir o modo de inicialização ao importar uma imagem, consulte Import a custom image.
É possível consultar os modos de inicialização de um tipo de instância a partir do valor do parâmetro
SupportedBootModesna resposta da API DescribeInstanceTypes.
NotaSe a sua imagem local suportar tanto BIOS quanto UEFI, defina o modo de inicialização como UEFI-Preferred. Assim, a imagem se adapta automaticamente aos modos de inicialização de todos os tipos de instância, o que também ajuda a reduzir o custo de criação de imagens.
Softwares e ferramentas necessários
-
Instale o driver virtio
Antes de publicar a imagem, certifique-se de que o driver virtio esteja instalado e adicionado ao sistema de arquivos RAM inicial (initramfs). O driver virtio é obrigatório para que a imagem seja executada em instâncias do Alibaba Cloud. Para mais informações, consulte Install virtio drivers.
-
Instale o driver NVMe
As gerações mais recentes de famílias de instâncias do ECS, como ecs.g8i e ecs.g7se, montam discos em cloud usando o protocolo NVMe. A imagem deve ter o driver NVMe instalado, caso contrário, as instâncias criadas a partir dela falharão na inicialização. Para garantir que você possa usar a imagem para criar esses tipos de instâncias do ECS, recomendamos instalar o driver NVMe na sua imagem local. Para obter instruções, consulte Install the NVMe driver for a custom image. Após importar a imagem, defina a propriedade NVMe Driver da imagem como Supported. Para mais informações, consulte Modify the properties and tags of an image.
-
Instale o cloud-init
Instale o cloud-init para inicializar as instâncias do ECS criadas a partir da imagem. Para mais informações, consulte Install cloud-init. Recomendamos a instalação do cloud-init 23.2.2 ou posterior para suportar o acesso a metadados no modo de segurança reforçada. Isso garante a segurança no acesso aos metadados da instância.
NotaO uso do cloud-init para modificar uma senha exige que o kernel do sistema operacional suporte o recurso
CONFIG_FW_CFG_SYSFS. Esse recurso é suportado por padrão nas versões 4.6 e posteriores do kernel da comunidade Linux, e nas versões 3.10.0-826.el7 e posteriores do kernel do CentOS. Você pode executar o comandogrep -nr CONFIG_FW_CFG_SYSFS /boot/config-$(uname -r)no servidor que utiliza a imagem. Se a saída do comando contiverCONFIG_FW_CFG_SYSFS=y, o kernel da imagem suporta o recursoCONFIG_FW_CFG_SYSFS. -
Instale o Cloud Assistant
Instale o Cloud Assistant Agent ao criar a imagem. O Cloud Assistant é uma ferramenta de automação nativa para o ECS que permite executar comandos (como Shell, powershell e Bat) em lotes, sem a necessidade de senha, logon ou servidor de salto. Você pode usar o Cloud Assistant para executar scripts automatizados de O&M, monitorar processos, instalar ou desinstalar softwares, iniciar ou parar services e instalar patches ou atualizações de segurança. Para mais informações, consulte Install the Cloud Assistant Agent.
-
Proteja o servidor
Ao criar uma imagem, recomendamos o uso do Security Center para proteger o seu servidor. O Security Center oferece um conjunto abrangente de recursos de segurança, incluindo notificações de alerta, varredura e remoção de malware, detecção e remoção de webshells, autoproteção do cliente e varredura de vulnerabilidades de imagem, para proteger totalmente seus ativos em cloud e servidores locais.
Configuração do sistema
-
Configure o relógio
O relógio de hardware de uma imagem suporta os fusos horários UTC e LocalTime. Ao criar uma imagem, use o modo padrão de Tempo Universal Coordenado (UTC). O código de exemplo a seguir mostra como configurar o relógio:
cat > /etc/adjtime << EOF 0.0 0 0.0 0 UTC EOF timedatectl set-local-rtc 0Para mais informações, consulte Linux time and time zones.
-
Configure o service SSHD
Configure o service SSHD.
O service SSHD permite que você faça logon remoto e gerencie sistemas Linux, utilizando o protocolo SSH para comunicação criptografada. Um exemplo de modificação da configuração em
/etc/ssh/sshd_configé o seguinte:UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yes -
Configure o service Chrony ou NTP
Ao criar uma imagem, recomendamos configurar o service Chrony ou o service NTP.
O Chrony e o NTP são ferramentas usadas para sincronizar relógios de computadores e evitar desvios de tempo. Os comandos de exemplo são os seguintes:
service Chrony
chrony_file=/etc/chrony.conf cat >$chrony_file <<EOF # Use Alibaba NTP server # Alicloud NTP server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst # Ignore stratum in source selection. stratumweight 0.05 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. #allow 192.168/16 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # Disable logging of client accesses. noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. logchange 0.5 logdir /var/log/chrony #log measurements statistics tracking EOFservice NTP
ntp_conf=/etc/ntp.conf cat > $ntp_conf << EOF driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log # Access Control Support restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery restrict 172.16.0.0 mask 255.240.0.0 nomodify notrap nopeer noquery restrict 100.64.0.0 mask 255.192.0.0 nomodify notrap nopeer noquery restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap nopeer noquery # local clock server 127.127.1.0 fudge 127.127.1.0 stratum 10 restrict ntp.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp7.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp8.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp9.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp10.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp11.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp12.cloud.aliyuncs.com nomodify notrap nopeer noquery server ntp.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp7.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp8.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp9.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp10.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp11.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp12.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 EOFPara mais informações sobre os servers NTP do Alibaba Cloud, consulte Time synchronization.
-
Configure o service MOTD
Ao criar uma imagem, recomendamos configurar o service Message of the Day (MOTD).
No Linux, o service MOTD exibe uma mensagem após o logon do usuário. O comando de exemplo é o seguinte:
echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motd -
Desative o service Firewalld
Recomendamos desativar o service Firewalld. O Firewalld é um service que gerencia regras de firewall no Linux. Você pode desativar o firewall local porque os grupos de segurança fornecem proteção na cloud. Os comandos de exemplo são os seguintes:
systemctl stop firewalld systemctl disable firewalld -
Configure o pip source
Se um pip source estiver configurado no seu sistema, recomendamos usar o endereço do pip source do Alibaba Cloud para obter os pacotes de software mais recentes. O conteúdo do arquivo
~/.pip/pip.confé o seguinte:[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com -
Configure a rede
Se você usar o NetworkManager ou o service de rede, configure o arquivo
/etc/sysconfig/network-scripts/ifcfg-eth0da seguinte forma:DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yesPara informações sobre como configurar outros services de rede, consulte Configure a secondary elastic network interface.
Parâmetros do kernel
-
Configure o kernelopt
Configure os parâmetros de inicialização do kernel no GRUB para garantir que o sistema inicie corretamente. O exemplo a seguir mostra os comandos para um sistema Debian:
-
No arquivo
/etc/default/grub, adicione as seguintes informações à linhaGRUB_CMDLINE_LINUX=.-
Arquitetura x86_64
net.ifnames=0 console=tty0 console=ttyS0,115200n8 -
Arquitetura Arm64
net.ifnames=0 console=tty0 console=ttyAMA0,115200n8
-
-
Execute o comando
sudo update-grub2para aplicar a configuração do GRUB.NotaO caminho do arquivo de configuração do GRUB e o comando para aplicar a configuração variam de acordo com o sistema operacional. Para mais informações, consulte Install the NVMe driver for a custom image.
-
-
Configure o sysctl
Recomendamos configurar os parâmetros do
sysctlpara ajustar e otimizar o comportamento do kernel Linux. A configuração dosysctlpossui duas versões: uma configuração legada e uma nova configuração, dependendo da versão do sistema operacional da imagem. A tabela a seguir descreve o escopo de cada versão.Versão da configuração
Imagens aplicáveis
Arquivo de configuração
Configuração legada
CentOS, AlmaLinux 8 e anteriores, Rocky Linux 8 e anteriores, Debian 11 e anteriores, openSUSE 15 e anteriores, SLES 15 e anteriores, Ubuntu 20 e anteriores, e outras versões anteriores
/etc/sysctl.confNova configuração
AlmaLinux 9 e posteriores, CentOS Stream 9 e posteriores, Debian 12 e posteriores, Fedora 33 e posteriores, openSUSE 16 e posteriores, Rocky Linux 9 e posteriores, SLES 16 e posteriores, Ubuntu 22 e posteriores, e Alibaba Cloud Linux 4 e posteriores
/etc/sysctl.d/99-apsara-sysctl.confNotaA nova configuração não modifica o arquivo padrão do sistema
/etc/sysctl.conf(ou/etc/sysctl.d/99-sysctl.conf). Em vez disso, ela grava os parâmetros em um arquivo separado/etc/sysctl.d/99-apsara-sysctl.confpara manter a configuração padrão do sistema intacta. Além dos parâmetros da configuração legada, a nova configuração adiciona duas entradas com curingas,net.ipv4.conf.*.rp_filter = 0enet.ipv4.conf.*.arp_announce = 2, para que as configurações se apliquem a todas as interfaces de rede.As configurações de exemplo são as seguintes:
Configuração legada
-
Modifique o arquivo
/etc/sysctl.confda seguinte forma.vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0 Execute o comando
sudo sysctl -ppara que as alterações nos parâmetros do kernel tenham efeito.
Nova configuração
-
Crie o arquivo
/etc/sysctl.d/99-apsara-sysctl.confcom o seguinte conteúdo.vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.*.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.*.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0 -
Execute o comando
sudo sysctl --systempara carregar todos os arquivos de configuração e aplicar as alterações nos parâmetros do kernel.Você também pode executar o comando
sudo sysctl -p /etc/sysctl.d/99-apsara-sysctl.confpara carregar apenas este arquivo de configuração.
-
Recomendações de segurança do sistema
Para melhorar a segurança do sistema, recomendamos adotar as seguintes medidas antes de importar a imagem:
Bloqueie a conta root. Isso impede o logon direto no sistema usando a senha do root, mesmo que uma senha esteja definida.
-
Desative o logon baseado em senha alterando a configuração
PasswordAuthenticationdo SSH.NotaSe você definir uma senha de root durante a inicialização da instância, o
PasswordAuthenticationdo SSH poderá ser ativado por padrão.
O código de exemplo é o seguinte:
dst=/etc/ssh/sshd_config
sed -i 's/^SyslogFacility.*//' $dst
sed -i 's/^PermitRootLogin.*//' $dst
sed -i 's/^PasswordAuthentication.*//' $dst
echo UseDNS no >> $dst
echo SyslogFacility AUTHPRIV >> $dst
echo PasswordAuthentication no >> $dst
passwd -l root
sed -i -e 's/root:[^:]*:/root:*:/g' /etc/shadow
Limpeza de informações da imagem
Antes de publicar a imagem, limpe informações confidenciais, como o histórico de comandos e os logs.