Post-install CentOS Linux 8
Buenas TechRebels, me chamo Marcelo Veriato Lima.
Fique à vontade para comentar e entrar em contato comigo pelo LinkedIn, estamos todos aqui para aprendermos juntos. Se gostou do artigo, incentive dando “claps” aí do lado e compartilhe nos seus grupos. Não se esqueça de me seguir e à TechRebels clicando follow lá em cima. Entre também no nosso canal no Telegram :)
Se você não leu o primeiro artigo da série, confira aqui “Instalando o CentOS Linux 8”.
Vamos para a segunda parte do nosso processo de instalação de um servidor CentOS 8 Minimal. Neste artigo serão apresentados procedimentos de “post-install” que deixarão o sistema operacional pronto para receber os mais diversos serviços e aplicações. Podemos automatizar tudo isso com ansible ou qualquer outra ferramenta de automação, porém não será o foco desse artigo. Mais para frente falaremos de ansible.
Como vamos editar diversos arquivos de configuração, fique a vontade de utilizar o editor de texto que melhor lhe agradar, eu particularmente utilizo o “vi” ou o “vim”, caso você não esteja familiarizado com eles, recomendo que aprenda logo ou então utilize o editor “nano”.
Logando no servidor
Após o nosso servidor inicializar, logue com o usuário “root”. Caso não saiba, o usuário root é o super-usuário de qualquer distribução Linux.
Configurando o hostname do servidor
A primeira coisa a se fazer é configurar o hostname do nosso servidor. Para isso iremos utilizar o comando “hostnamectl”. Existem mais três formas de configurar o hostname no CentOS 8, vamos dar uma passada rápida por cada uma delas.
O hostname do servidor possui três classes: static
, pretty
, and transient
- Static: É o hostname tradicional localizado em /etc/hostname;
- Pretty: Forma livre em UTF8, permite caracteres especiais onde é utilizado para apresentação para o usuário. Por exemplo “TechRebel’s Server”.
- Transient: É o que o kernel do Linux mantem. Por padrão é o mesmo que o static hostname, porém o DHCP ou o mDNS podem alterá-lo ou você mesmo pode fazer isso manualmente.
Para mostrar a atual configuração do hostname do servidor utilize o comando abaixo:
[root@localhost ~]# hostname
Se você não configurou o hostname no momento da instalação conforme orientado, o padrão é localhost.localdomain.
Outra forma de verificar o hostname e obter mais informações do servidor é utilizando o comando “hostnamectl”:
[root@localhost ~]# hostnamectl
Em determinados momentos não é possível possível reiniciar o servidor para alterar o hostname, para isso existem diferentes modos de realizar a mudança sem a reinicialização da máquina. Escolha a opção que lhe convém, deslogue e logue novamente para que a mudança reflita no seu shell.
Vamos utilizado hostname “server01.techrebels.local”.
A primeira forma é com o comando “hostnamectl”:
[root@localhost ~]# hostnamectl set-hostname server01.techrebels.local
Outras informações como location, chassis, deployment, etc podem ser configuradas, leia o manual do comando hostnamectl para maiores informações.
Outra forma de configuração do hostname é através da ferramenta (Text User Interface) “nmtui”, basta executá-lo:
[root@localhost ~]# nmtui
Através do “nmtui” você também pode configurar as placas de rede do nosso servidor, porém não iremos utilizá-lo nesse artigo.
Por fim a terceira forma de alterar o hostname sem a necessidade de reinicialização do servidor é utilizando o comando “nmcli”.
[root@localhost ~]# nmcli general hostname server01.techrebels.local
Ajustando as configurações de rede
Para quem trabalha com Linux a mais tempo, deve recordar que as interfaces eram simplesmente nomeadas como eth0, eth1, eth2 e assim por diante.
Lá em 2015 o Kernel Linux mudou a forma com que as interfaces de rede eram nomeadas. Com essa mudança o nome das interfaces passou a ser concatenado com um prefixo e um número identificador.
Por padrão esse método vem sendo adotado desde o CentOS 7, vamos entender um pouco como ele funciona.
O gerenciador de dispositivo udev gera nomes de dispositivo com base nos seguintes esquemas:
Por padrão, as distros RHEL like selecionam o nome do dispositivo de rede com base na configuração localizada no arquivo “/usr/lib/systemd/network/99-default.link”. A ordem dos valores na configuração NamePolicy é importante.
Confesso que por muito tempo eu fui resistente e estes nomes estranhos pois estava acostumado com a simples forma eth0, eth1, eth2 até que resolvi aceitar pois em ambientes virtualizados como VMware, as placas se embaralhavam todas com o método de nomenclatura tradicional.
Caso você queira continuar utilizando o método tradicional, execute o próximo passo. Recomendo que você vá se adaptando ao formato padrão, pulando essa etapa.
Retornando a nomenclatura para o formato tradicional (eth0, eth1, etc) — Passo opcional
Edite o arquivo de configuração “/etc/sysconfig/grub” com o seu editor de texto preferido e acrescente os parâmetros “net.ifnames=0 biosdevname=0” a variável GRUB_CMDLINE_LINUX como mostrado abaixo:
Salve o arquivo e execute o comando abaixo para gerar o novo arquivo de configuração do grub. Se você utiliza a BIOS do servidor em modo legacy ou se a sua VM não suporta UEFI utilize o comando abaixo:
[root@server01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Para servidores com físicos ou virtuais com UEFI habilitado utilize o comando abaixo:
[root@server01 ~]# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
Reinicie o servidor e pronto, as interfaces de rede estarão como eth0, eth1, etc.
Se você manteve o formato padrão conforme, siga deste ponto.
O próximo passo será configurar o endereço IP na interface de rede de nosso servidor. Se você retornou a nomenclatura para o formato tradicional, de uma pesquisada pois terá que renomear o nome da conexão no NetworkManager.
Primeiro verifique o nome da conexão nlo NetworkManager:
[root@server01 ~]# nmcli connection show
Agora você pode executar os comandos abaixo para configurar os parâmetros de rede na interface conforme a sua estrutura.
- Auto connect: yes
- Método: manual
- Endereço IP: 192.168.56.10
- Máscara de rede: 255.255.255.0
- Gateway padrão: 192.168.56.1
- DNS primário e secundário: 8.8.8.8, 8.8.4.4
[root@server01 ~]# nmcli connection modify enp0s3 autoconnect yes ipv4.method manual ipv4.addresses 192.168.56.10/24 ipv4.gateway 192.168.56.1 ipv4.dns “8.8.8.8 8.8.4.4”
Observação: Você deve se recordar que no artigo anterior do processo de instalação marcamos a opção de instalação mínima juntamente com a opção Standard. Pois bem, essa opção que escolhemos já instala o pacote “net-tools”. A partir do CentOS 7 os comandos ifconfig, route, arp, ether-wake, ipmaddr, iptunnel, entre outros foram removidos da instalação base, sendo necessário a utilização do comando “ip”. Particularmente ainda continuo utilizando os velhos comandos, ainda tenho uma certa resistência a essa mudança (desnecessária na minha opinião). Bom, você poderá verificar o endereço IP comandos abaixo:
[root@server01 ~]# ip addr
Ou com o clássico ifconfig:
[root@server01 ~]# ifconfig
Verifique a tabela de roteamento se a rota default está adicionada conforme o configurado. Você pode utilizar o comando “ip” ou o comando “route”:
Os servidores DNS você pode verificar diretamente o conteúdo do arquivo “/etc/resolv.conf”:
Pronto, nossa rede está configurada.
Você ainda pode manipular o arquivo de configuração manualmente em “/etc/sysconfig/network-scripts/ifcfg-enp0s3. O nome do arquivo pode variar conforme o nome da sua conexão no NetworkManager. Caso você altere o arquivo manualmente, você deverá derrubar e subir a conexão para que as novas configurações sejam aplicadas.
Caso você ainda resista ao uso do NetworkManager e queira configurar manualmente o arquivo, fique a vontade, mas atenção, o NetworkManager é integrado com o sistema que gerencia o boot do servidor, sendo o NetworkManager dependência de outros processos na inicialização do sistema operacional, recomendo que você utilize o NetworkManager.
Você ainda pode utilizar o NetworkManager TUI através do comando “nmtui”.
Prometo que irei escrever um artigo somente sobre o NetworkManager e como utilizá-lo em outros tipos de conexão com VLAN, bonding, teaming, bridge, tunnel, etc.
Ajustando o arquivo /etc/hosts
Vamos então ajustar o arquivo “/etc/hosts” com o nosso hostname e endereço IP, edite o arquivo com o seu editor de texto preferido e adicione a entrada correspondente ao seu endereço IP e hostname.
Verifique se o FQDN do servidor está retornando corretamente através do comando abaixo:
[root@server01 ~]# hostname –fqdn
Maiores informações você encontra no manual do comando hostname.
Desabilitando o firewall local do servidor
Como este artigo não trata de configuração de firewall local, iremos desabilitar o sistema de firewall do nosso servidor. Mais adiante vou fazer um artigo somente sobre hardening dentro do CentOS 8 onde abordaremos o “firewalld” e o “nftables”.
[root@server01 ~]# systemctl stop firewalld[root@server01 ~]# systemctl disable firewalld
Desabilitando o SELinux
Para quem não conhece o SELinux (Security-Enhanced Linux), trata-se de uma arquitetura de segurança utilizada pelas distribuições RHEL like e compatível com outras também. Com ele é possível blindar o sistema operacional através de controles de acesso mandatórios do tipo Type Enforcement, RBAC, e Multi-Level security.
Apesar de uma série de políticas virem implementadas por padrão, sua complexidade é elevada, portanto iremos desabilitá-lo em nosso servidor, pelo menos por enquanto. Para maiores informações consulte os artigos What is SELinux [1] e também na Wikipedia [2].
Configurações e customizações do SELinux farão parte do artigo sobre “hardening”.
Por padrão o SELinux vem habilitado em modo “enforcing”, ou seja, as políticas estão forçadas no sistema operacional.
Edite o arquivo de configuração “/etc/selinux/config” e altere o parâmetro SELINUX para “permissive” onde as mensagens serão apenas logadas no audit.log, ou então para “disabled” onde o SELinux será totalmente desabilitado.
Por hora iremos desabilitar totalmente o SELinux:
Para que essa configuração seja permanente, você deverá reiniciar o servidor, por hora vamos desabilitá-lo manualmente pois iremos reiniciá-lo alguns passos a seguir.
[root@server01 ~]# setenforce 0
Restringindo o acesso por SSH para o usuário root
Se você não sabe o que é SSH, por favor leia estas referências Ssh (Secure Shell) [3] e OpenSSH [4]. A partir da versão 7.4 do CentOS, a versão 1 do protocolo foi removida, permanecendo somente a versão 2 por questões de segurança.
Por padrão o CentOS permite que o usuário root tenha acesso ao sistema operacional através do protocolo SSH. Por questões de segurança removemos essa permissão, permitindo que apenas usuários comuns (sem privilégios elevados) acessem o sistema operacional remotamente por SSH. Dessa forma você poderá manter a senha de root em um local seguro.
Claro, iremos utilizar meios de que esse usuário comum tenha permissões de root ou até mesmo vire o próprio root para fins de administração do sistema operacional como veremos mais abaixo.
Para desabilitar o login de root por SSH edite o arquivo “/etc/ssh/sshd_config” e encontre o parâmetro “PermitRootLogin”. Altere para “no” e reinicialize o serviço sshd.
[root@server01 ~]# systemctl restart sshd
Ajustes mais restritivos no SSH ficarão para o artigo sobre “hardening”.
Criando um usuário local com permissões de sudo
Para que possamos acessar o nosso servidor de forma remota por SSH iremos utilizar um usuário desprivilegiado. Lembre que através da console do servidor ainda é possível logar como root, porém por SSH não.
Irei criar dois usuários locais no sistema operacional, um chamado “lotic” e outro “techrebels”, em seguida iremos trocar as respectivas senhas.
[root@server01 ~]# adduser lotic[root@server01 ~]# passwd lotic[root@server01 ~]# adduser techrebels[root@server01 ~]# passwd techrebels
Vamos agora dar permissão no “sudo”. Para quem não conhece o sudo, ele permite que se execute comandos como se fosse outro usuário. O arquivo de configuração do sudo fica em “/etc/sudoers” e pode ser editado diretamente com o seu editor de texto preferido ou então através do comando “visudo”.
Na nossa instalação iremos criar um arquivo para cada usuário dentro do diretório “/etc/sudoers.d/”. O arquivo terá o próprio nome do usuário para facilitar a identificação, com o conteúdo abaixo informado no retorno do comando cat:
Com isso ambos os usuários “lotic” e “techrebels” poderão executar qualquer comando com qualquer usuário desce que informem a sua própria senha, por exemplo, podem virar root.
Logado com um dos usuários criados, execute o comando abaixo e em seguida insira a própria senha do usuário:
[lotic@server01 ~]$ sudo su -
Habilitando os repositórios de pacotes extras
No CentOS 8 normalmente habilito dois repositórios extras, o PowerTools e o EPEL. O primeiro traz uma série de bibliotecas que iremos utilizar outros serviços nos próximos artigos, já o EPEL [5] é um repositório com pacotes extras oriundos da comunidade Fedora, testados e validados.
Para maiores informações sobre os repositórios extras do CentOS consulte o link Available Repositories for CentOS [6].
Habilitando os repositórios PowerTools e EPEL:
[root@server01 ~]# dnf config-manager --set-enabled PowerTools
[root@server01 ~]# dnf -y install epel-release
Atualizando os pacotes do sistema operacional
Depois de instalarmos os dois repositórios acima, vamos atualizar toda a base instalada de pacotes, incluindo o Kernel Linux. Este processo pode demorar um pouco dependendo da velocidade do seu link de internet.
[root@server01 ~]# dnf -y update
Instalando pacotes adicionais para administração, operação e troubleshooting
Uma série de pacotes podem auxiliar os administradores a operar suas instalações, dar agilidade em um troubleshooting e coisas do tipo, segue a lista de pacotes que eu normalmente instalo em um servidor com CentOS Minimal.
- bind-utils: clientes para resolução de nomes, nslookup, host, dig;
- htop: visualizador de processos de forma interativa;
- iftop: monitoramento em tempo real das interfaces de rede;
- iptables-services: para quem ainda utiliza iptables, este pacote trás os scripts de inicialização do iptables;
- nc: netcat, ferramenta para executar operações de TCP e UDP;
- nfs-utils: ferramentas userland client e server para NFS;
- mailx: ferramenta de envio e recebimento de e-mails por linha de comando;
- net-snmp-utils: clientes para monitoramento por SNMP (snmpwalk, snmpget, snmpset, etc);
- psmisc: ferramentas para gerenciamento de processos (killall, ptree, etc);
- sysfsutils: ferramentas para manipulação do /sys (muito útil para quem trabalha com FC);
- tcpdump: sniffer de rede, estremamente útil para tshoot de rede;
- telnet: cliente para conexão telnet;
- traceroute: utilitário para traçar rota;
- vim: editor de texto vim enhanced;
- wget: ferramenta para download de arquivos por linha de comando;
- whois: cliente para visualização de servidores whois.
[root@server01 ~]# dnf -y install bind-utils htop iftop iptables-services nc nfs-utils mailx net-snmp-utils sysfsutils tcpdump telnet traceroute vim wget whois
Configurando o NTP
A partir do CentOS 7 o serviço de sincronização de tempo (NTP) é através do software “chrony”. Edite o arquivo “/etc/chrony.conf” onde você pode utilizar uma configuração de pool ou então apontar para um server NTP específico.
Adicione o serviço “chronyd” na inicialização do sistema operacional e depois inicie o serviço:
[root@server01 ~]# systemctl enable chronyd[root@server01 ~]# systemctl start chronyd[root@server01 ~]# chronyc sources
Ferramenta de administração Cockpit
Se você não conhece o Cockpit, de uma olhada nela. No CentOS 8 ela vem instalada por padrão, basta habilitá-la.
A ferramenta consiste em uma interface de administração via Web, nela você pode realizar diversas configurações do sistema operacional, disco, rede, virtualização (KVM), acessar a console do servidor remotamente, etc. Maiores informações você encontra no site do projeto Cockpit [7].
O Cockpit possui diversos módulos, instale o que lhe for útil:
- cockpit-pcp: módulo para coleta de performance do SO, utilizado para gerar os gráficos do cockpit;
- cockpit-packagekit: módulo para gerenciamento de pacotes e atualizações;
- cockpit-storaged: módulo para administração de discos dentro do cockpit;
- cockpit-podman: módulo para Podman containers;
- cockpit-machines: módulo para administração de VMs (KVM);
- cockpit-session-recording: módulo para gravação de sessões no servidor, configure quais usuários ou grupos serão “filmados”;
- cockpit-composer: módulo para criação de imagens customizadas do CentOS;
- cockpit-dashboard: módulo para administração de centralizada de outros Cockpits.
Instale os módulos extras do Cockpit, habilite na inicialização do servidor e inicie o serviço:
[root@server01 ~]# dnf -y install cockpit-pcp cockpit-packagekit cockpit-storaged cockpit-session-recording cockpit-dashboard[root@server01 ~]# systemctl enable cockpit.socket[root@server01 ~]# systemctl start cockpit.socket
Acesse via navegador utilizando o endereço IP ou nome do servidor na porta 9090/TCP, logue na interface como root.
https://IP_ou_dns:9090.
Instalação do pacote de ferramentas do hypervisor
Se você está instalando este servidor em uma máquina virtual dentro de algum Hypervisor como VMware, KVM puro, RHEV, oVirt ou Proxmox, XenServer ou XCP-NG, não esqueça de instalar o respectivo pacote que contém os módulos do Hypervisor.
Para VMware instale o pacote “open-vm-tools”:
[root@server01 ~]# dnf -y install open-vm-tools
Para KVM based (RHEV, oVirt, Proxmox) instale o pacote “qemu-guest-agent”:
[root@server01 ~]# dnf -y install qemu-guest-agent
Para XenServer ou XCP-NG monte a respectiva ISO pelo XenCenter ou XCP-Center e execute o shell script de instalação.
Otimizando a performance do servidor
Neste artigo iremos abordar apenas o tuning baseado em perfil e workload de uso do servidor. Em outros artigos iremos ver tunings mais refinados e específicos.
Por hora iremos trabalhar com o “Tuned”. Ele já vem instalado por padrão no CentOS 8, maiores informações você pode consultar o site do projeto Tuned [8].
Para listar os perfis disponíveis utilize o comando abaixo:
[root@server01 ~]# tuned-adm list
Você pode escolher o perfil que melhor se encaixa para o seu servidor e aplicá-lo manualmente com o comando abaixo:
[root@server01 ~]# tuned-adm profile <NOME_DO_PERFIL>
Ou então aplicar a sugestão do próprio tuned com o comando abaixo:
[root@server01 ~]# tuned-adm recommend
Limpando a instalação para criação de um template — Passo opcional
Se você vai utilizar esse post-install para a criação de um template para virtualização, alguns passos deverão ser executados:
- Remover as versões antigas do Kernel Linux, deixando somente a última instalada:
[root@server01 ~]# dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)
- Remover UUID e HWADDR dos arquivos de configurações da placas de rede:
[root@server01 ~]# sed -i -e '/^UUID=/d' -e '/^HWADDR=/d'/etc/sysconfig/network-scripts/ifcfg-*
- Removendo as chaves do servidor SSH e do usuário root:
[root@server01 ~]# rm -f /etc/ssh/ssh_host_* /root/.ssh/*
- Remover cache do gerenciador de pacotes:
[root@server01 ~]# dnf clean all
- Remover logs e arquivos desnecessarios
[root@server01 ~]# logrotate -f /etc/logrotate.conf
[root@server01 ~]# rm -rf /var/log/*-???????? /var/log/*.gz
[root@server01 ~]# rm -rf /var/log/anaconda
[root@server01 ~]# cat /dev/null > /var/log/audit/audit.log
[root@server01 ~]# cat /dev/null > /var/log/wtmp
[root@server01 ~]# cat /dev/null > /var/log/lastlog
[root@server01 ~]# rm -f /root/anaconda-ks.cfg
[root@server01 ~]# rm -rf /tmp/*
- Limpar o histórico de comandos:
[root@server01 ~]# history -c
- Desligue o servidor e crie o seu template:
[root@server01 ~]# poweroff
Reinicie o servidor
Para finalizar, reinicie o servidor e pronto. Nosso post-install do CentOS Linux 8 está concluído.
[root@server01 ~]# reboot
Conclusão
Bom, este artigo buscou abordar o processo de post-install. Através dele o servidor estará apto para ser utilizado nos mais diversos serviços .
Me acompanhe aqui no TechRebels e não esqueça de compartilhar nossos artigos com seus amigos.
Espero que tenham gostado, deixem seus comentários, sugestões, críticas ou correções. Até o próximo artigo.
Referências
- [1] https://www.redhat.com/en/topics/linux/what-is-selinux
- [2] https://en.wikipedia.org/wiki/Security-Enhanced_Linux
- [3] https://en.wikipedia.org/wiki/Ssh_(Secure_Shell)
- [4] https://en.wikipedia.org/wiki/OpenSSH
- [5] https://fedoraproject.org/wiki/EPEL
- [6] https://wiki.centos.org/AdditionalResources/Repositories
- [7] https://cockpit-project.org
- [8] https://tuned-project.org
Sobre o Autor
Marcelo Veriato Lima é CEO da Lotic Arquitetura de Soluções.
Especialista em arquitetura de infraestrutura para Datacenter e Cloud, trabalha com TI a pelo menos 20 anos, participa ativamente da comunidade Open-Source.