Post-install CentOS Linux 8

Marcelo Veriato Lima
TechRebels
Published in
15 min readSep 30, 2020
CentOS 8 post-install

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.

Logando no servidor CentOS

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
Verificando o 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
Saida do comando 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
Configurando o hostname

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
Configurando o hostname através do nmtui
Insira o hostname

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:

Retornando a nomenclatura das interfaces para eth0, eth1, etc

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
Verificando o nome da conexão no NetworkManager

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
Saida do comando “ip addr”

Ou com o clássico ifconfig:

[root@server01 ~]# ifconfig
Saida do comando “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”:

Saida do comando “ip route”
Saida do comando “route”

Os servidores DNS você pode verificar diretamente o conteúdo do arquivo “/etc/resolv.conf”:

Configuração dos servidores DNS

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.

Evetivando alterações manuais das interfaces

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.

Conteúdo do arquivo “/etc/hosts”

Verifique se o FQDN do servidor está retornando corretamente através do comando abaixo:

[root@server01 ~]# hostname –fqdn
Verificação do 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 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:

Desabilitando o SELinux de forma definitiva

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
Desabilitando o SELinux manualmente

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.

Ajustando o arquivo de configuração do serviço SSH
[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
Criando usuários locais para acesso

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:

Permissões de sudo para os usuários locais

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 -
Virando root através do sudo

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
Habilitando o repositório PowerTools
[root@server01 ~]# dnf -y install epel-release
Instalando o repositório EPEL

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
Conclusão da atualização dos pacotes

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.

Configurando um pool de servidores NTP
Configurando servidores NTP específicos

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
Habilitando, inicializando e verificando o serviço chronyd

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.

Tela de login do cockpit
Informações gerais do servidor
Utilização de recursos
Configurações e informações sobre os discos
Configurações e informações sobre a rede
Sistema de gravação das sessões

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
Lista de perfis do Tuned

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
Aplicando o perfil recomendado

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)
Removendo versões antigas do kernel
  • 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

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.

LinkedIn.

--

--

TechRebels
TechRebels

Published in TechRebels

The day-to-day of the IT Infrastructure. Higher quality content and less filter :P

Marcelo Veriato Lima
Marcelo Veriato Lima

Written by Marcelo Veriato Lima

Entrepreneur | Data Center Architect | RedHat | VMware | Cisco | Pure Storage | Melanox | Veeam