Fala, Guerreiros e Guerreiras!

Nesta publicação, vamos falar um pouco sobre administração de servidores Linux e aprender a interpretar algumas das mensagens que aparecem quando acessamos um servidor por SSH.

A ideia é compartilhar conhecimentos sobre as tecnologias que utilizo no dia a dia e orientar quem está começando na área. Para acompanhar a leitura, estou ao som da banda Lake of Tears, ouvindo o álbum Forever Autumn — discaço, com faixas que merecem ser ouvidas do início ao fim.

Hoje vamos aprender a interpretar uma daquelas mensagens que aparecem no terminal quando acessamos um servidor Linux. Se você está começando a trabalhar com servidores, pode olhar para essas informações e não saber por onde começar.

Afinal, o que significa o consumo de memória? Por que o sistema está utilizando swap? O que são as atualizações de segurança? E por que o Ubuntu está solicitando uma reinicialização?

Vamos utilizar como exemplo a saída de um servidor com Ubuntu 23.04, considerando as informações apresentadas no terminal em 26 de Outubro de 2023. O objetivo é explicar cada item, mostrar como verificar possíveis problemas e apresentar os procedimentos adequados para corrigi-los.

Não basta copiar comandos: precisamos entender o que estamos fazendo e quais consequências cada ação pode trazer.

1. Identificando o sistema operacional

A primeira informação apresentada pelo terminal é:

Welcome to Ubuntu 23.04
GNU/Linux 6.2.0-generic x86_64

A mensagem identifica a versão da distribuição Ubuntu (que não possui suporte de longo prazo, ou LTS), o kernel em execução e a arquitetura do sistema. O acrônimo LTS significa Long-Term Support.

Vamos separar os componentes:

  • Ubuntu 23.04 : identifica a versão da distribuição.
  • GNU/Linux: indica o ambiente operacional baseado no kernel Linux e nas ferramentas do sistema GNU.
  • 6.2.0-generic: identifica a versão do kernel Linux que está em execução.
  • x86_64: indica uma arquitetura de 64 bits da família x86.

O kernel é um dos componentes centrais do sistema operacional. Ele gerencia recursos como memória, processos, dispositivos e comunicação com o hardware.

Como verificar?

Execute os seguintes comandos:

lsb_release -a
uname -r
uname -m

O primeiro apresenta informações sobre a distribuição Ubuntu. O segundo informa a versão do kernel em execução, enquanto o terceiro apresenta a arquitetura.

O que devo corrigir?

Não há nada para corrigir apenas porque essas informações aparecem no terminal. Elas servem para identificar o ambiente.

Entretanto, manter o sistema operacional e o kernel atualizados faz parte da administração responsável de um servidor.

É importante distinguir a atualização dos pacotes instalados da migração para outra versão do Ubuntu. São procedimentos diferentes e exigem cuidados distintos.

2. System information: o resumo do estado do servidor

A próxima seção apresenta informações sobre os recursos do sistema:

System load: 0.33
Processes: 294
Usage of /: 46.2% of 37.70GB
Users logged in: 0
Memory usage: 77%
Swap usage: 68%

Esse resumo ajuda a identificar situações que merecem investigação. Vamos analisar cada indicador separadamente.

2.1. System load: carga do sistema

O terminal apresenta:

System load: 0.33

O load average representa a média de tarefas que estão executáveis ou em espera ininterruptível, normalmente associada a operações de entrada e saída.

Ele não representa diretamente o percentual de utilização da CPU.

Um valor de 0,33 costuma indicar uma carga baixa em um servidor com vários núcleos disponíveis. Porém, a interpretação depende da quantidade de CPUs e do comportamento do sistema ao longo do tempo.

Por exemplo, uma carga de 4 tem um significado diferente em uma máquina com um núcleo e em outra com oito núcleos.

Como verificar?

uptime
nproc
top
  • uptime: apresenta o tempo de atividade e as médias de carga.
  • nproc: informa quantas unidades de processamento estão disponíveis para o sistema.
  • top: permite acompanhar processos e utilização de recursos em tempo real.

Como corrigir?

O valor 0,33, isoladamente, não indica um problema.

Se a carga estiver continuamente elevada, investigue os processos em execução, as consultas ao banco de dados, as tarefas agendadas e as operações de entrada e saída.

Dependendo da causa, pode ser necessário otimizar o código, revisar consultas, limitar tarefas simultâneas ou ampliar os recursos do servidor.

Não aumente a capacidade da máquina sem antes verificar se existe um gargalo que possa ser resolvido por meio de otimização.

2.2. Processes: quantidade de processos

Processes: 294

Essa informação indica que o sistema contabilizou 294 processos no momento da coleta.

Um processo é uma instância de um programa em execução. O Ubuntu utiliza processos para executar serviços de rede, monitoramento, aplicações, tarefas agendadas e diversas outras funções.

Portanto, centenas de processos não representam necessariamente um problema.

Como verificar?

ps aux

Para acompanhar os processos e o consumo de recursos:

top

Se preferir uma interface mais amigável, você também pode utilizar o htop, caso esteja instalado.

Como corrigir?

Não encerre processos apenas porque a quantidade parece elevada.

Primeiro, identifique os programas responsáveis pelo consumo excessivo de recursos e verifique se o comportamento é esperado.

Encerrar um serviço essencial pode interromper aplicações, conexões e operações importantes.

Se encontrar um processo com consumo anormal, investigue seus registros e sua configuração antes de decidir pela reinicialização ou pelo encerramento.

2.3. Usage of /: utilização do disco

Usage of /: 46.2% of 37.70GB

O símbolo / representa a raiz do sistema de arquivos Linux.

Nesse exemplo, 46,2% dos 37,70 GB informados estão ocupados, o equivalente a aproximadamente 17,4 GB.

Esse percentual não indica falta de espaço. Entretanto, é importante acompanhar o crescimento do armazenamento, principalmente em servidores que executam Docker, bancos de dados, aplicações web e serviços que geram muitos registros.

Como verificar?

df -h /

O comando apresenta a capacidade total, o espaço utilizado e o espaço disponível no sistema de arquivos.

Para identificar os diretórios que mais ocupam espaço:

sudo du -xhd1 / 2>/dev/null | sort -h

Esse comando ajuda a identificar os diretórios que consomem mais espaço na partição raiz, sem atravessar outros sistemas de arquivos montados.

Como corrigir?

Se o disco estiver próximo da capacidade máxima, descubra primeiro o que está ocupando espaço.

Entre as causas comuns estão:

  • Logs antigos ou excessivamente grandes.
  • Imagens e camadas de contêineres Docker.
  • Backups acumulados.
  • Arquivos temporários.
  • Dados de bancos de dados.
  • Arquivos enviados por usuários.

Para limpar os pacotes baixados que permanecem em cache:

sudo apt clean

Esse comando remove os arquivos de pacotes armazenados em cache pelo APT. Ele não desinstala os programas instalados.

Atenção: não apague diretórios manualmente apenas porque são grandes. Em ambientes Docker, por exemplo, remover arquivos internos ou volumes pode causar perda de dados.

Antes de realizar qualquer limpeza, identifique os arquivos, verifique os backups e avalie o impacto sobre os serviços.

2.4. Users logged in: usuários conectados

Users logged in: 0

Essa informação indica que não havia sessões de usuários contabilizadas pelo sistema no momento da coleta.

Isso não significa que o servidor não tenha contas cadastradas ou que os serviços estejam parados. Aplicações e serviços podem continuar funcionando normalmente sem uma sessão interativa aberta.

Como verificar?

who
w

O primeiro comando apresenta as sessões de usuários registradas. O segundo oferece informações adicionais sobre os usuários conectados e suas atividades.

Como corrigir?

Não há nada para corrigir se a ausência de sessões for esperada.

Por outro lado, se você identificar uma sessão desconhecida, investigue sua origem antes de encerrar qualquer conexão.

Em servidores acessíveis pela internet, é importante verificar as contas autorizadas, as configurações do SSH e os registros de autenticação.

2.5. Memory usage: utilização da memória RAM

Memory usage: 77%

A memória RAM é utilizada pelo sistema operacional, pelas aplicações e pelos serviços em execução.

Um consumo de 77% merece acompanhamento, mas não significa automaticamente que o servidor esteja com problemas.

O Linux utiliza parte da memória disponível para cache e outras finalidades. Além disso, a forma como a porcentagem é calculada pode variar conforme a ferramenta que gera o resumo do terminal.

Por isso, não devemos avaliar a situação apenas com base nesse percentual.

Como verificar?

free -h

Observe principalmente a coluna available, que estima quanta memória pode ser disponibilizada para novas aplicações sem provocar pressão excessiva sobre a RAM.

Também é possível executar:

top

Na interface do top, você pode ordenar os processos por consumo de memória e identificar aqueles que utilizam mais recursos.

Como corrigir?

Se houver pouca memória disponível e sinais de pressão sobre o sistema, investigue as aplicações.

Algumas medidas possíveis são:

  1. Investigar vazamentos de memória.
  2. Ajustar a quantidade de processos e trabalhadores simultâneos.
  3. Configurar limites de memória nos serviços que permitem esse controle.
  4. Otimizar aplicações e consultas ao banco de dados.
  5. Ampliar a memória RAM, se a demanda justificar o investimento.

Não encerre processos indiscriminadamente. Identifique a causa do consumo antes de tomar qualquer decisão.

2.6. Swap usage: utilização da memória de troca

Swap usage: 68%

A swap é uma área de armazenamento utilizada pelo Linux para manter páginas de memória que foram transferidas da RAM. Ela pode ser configurada como um arquivo ou uma partição.

No exemplo, 68% da swap está ocupada.

Esse valor merece atenção, principalmente quando aparece acompanhado de pouca memória disponível, lentidão ou atividade intensa de leitura e gravação no disco.

Entretanto, swap ocupada não significa necessariamente que o servidor esteja sofrendo com falta de memória naquele momento. Páginas podem permanecer na swap mesmo depois que a pressão sobre a RAM diminui.

Como verificar?

free -h

Para observar a atividade de memória e swap ao longo do tempo:

vmstat 1 5

O comando coleta cinco amostras, com intervalo de um segundo.

Observe as colunas si e so, que representam operações de entrada e saída da swap. Atividade persistente, acompanhada de lentidão e pouca memória disponível, pode indicar pressão de memória.

Como corrigir?

Primeiro, identifique os processos que estão utilizando muita RAM. Depois, avalie se é necessário otimizar as aplicações, ajustar a concorrência ou ampliar a memória disponível.

Não execute automaticamente os comandos abaixo apenas porque a swap está em 68%:

sudo swapoff -a
sudo swapon -a

O primeiro desativa as áreas de swap e o segundo as ativa novamente. Desativar a swap pode exigir que o sistema transfira suas páginas de volta para a RAM.

Se não houver memória suficiente, a operação pode falhar ou provocar pressão severa de memória.

Esse procedimento só deve ser considerado após uma avaliação cuidadosa da capacidade disponível e da necessidade real de esvaziar a swap.

Aumentar a capacidade de swap também pode ser uma opção em determinadas situações, mas não substitui a investigação da causa do consumo.

3. Expanded Security Maintenance: manutenção de segurança adicional

O terminal informa:

Expanded Security Maintenance for Applications is not enabled.

O ESM Apps faz parte do Ubuntu Pro e amplia a cobertura de atualizações de segurança para determinados pacotes de aplicações do Ubuntu.

Essa mensagem não significa que o servidor esteja sem qualquer atualização de segurança. Ela indica que esse serviço adicional não está habilitado.

Como verificar?

pro status

O comando apresenta o estado dos serviços do Ubuntu Pro, quando a ferramenta está instalada e disponível.

Como corrigir?

Se você precisar dessa cobertura adicional, consulte as condições de uso e os requisitos do Ubuntu Pro:

https://ubuntu.com/pro

O procedimento depende da situação da máquina e da assinatura utilizada. Para uma instalação elegível, pode ser necessário anexar o sistema a uma assinatura e habilitar o serviço correspondente.

Não habilite serviços sem entender quais pacotes e versões eles cobrem.

Em servidores de produção, mantenha uma política de atualizações que considere segurança, compatibilidade, testes e janelas de manutenção.

4. Existem 91 atualizações disponíveis

O terminal apresenta:

91 updates can be applied immediately.
1 of these updates is a standard security update.

Isso significa que, no momento em que o resumo foi gerado, o sistema identificou 91 atualizações aplicáveis aos pacotes instalados. A mensagem também informa que uma delas foi classificada como atualização de segurança padrão.

Esses números representam o estado observado naquele momento. Eles podem mudar após a atualização dos índices dos repositórios.

Além disso, a contagem não informa, sozinha, a gravidade de todas as atualizações pendentes.

Como verificar quais pacotes podem ser atualizados?

Primeiro, atualize o índice de pacotes:

sudo apt update

Depois, consulte a lista:

apt list --upgradable

O primeiro comando atualiza as informações dos repositórios. O segundo apresenta os pacotes para os quais há versões mais recentes disponíveis.

Como instalar as atualizações?

Depois de analisar os pacotes e planejar a manutenção, você pode executar:

sudo apt upgrade

O APT apresentará as alterações previstas e poderá solicitar confirmação.

Antes de atualizar um servidor de produção, verifique os backups, as dependências das aplicações, os serviços em execução e a possibilidade de interrupção.

Atualizações de pacotes podem exigir a reinicialização de serviços ou revelar incompatibilidades com aplicações que dependem de versões específicas.

Boa prática: mantenha o sistema atualizado, mas não transforme a atualização em um procedimento cego. Planeje, verifique e valide o funcionamento após as mudanças.

5. Existem mais oito atualizações de segurança disponíveis com ESM Apps

O terminal apresenta:

8 additional security updates can be applied with ESM Apps.

Essa mensagem está relacionada ao ESM Apps, explicado anteriormente.

Ela informa que existem oito atualizações de segurança adicionais disponíveis por meio dessa cobertura.

Isso não significa que as oito atualizações sejam necessariamente críticas, nem que o sistema inteiro esteja desprotegido.

Para compreender quais pacotes e avisos de segurança estão envolvidos, consulte o estado do Ubuntu Pro e as informações de segurança dos pacotes afetados.

A documentação oficial está disponível em:

https://ubuntu.com/esm

Se o servidor hospeda sistemas de clientes, bancos de dados ou aplicações expostas à internet, a política de manutenção deve considerar a cobertura de segurança necessária para o ambiente.

A decisão de habilitar o ESM deve fazer parte dessa política, e não ser tomada apenas para eliminar uma mensagem do terminal.

6. Uma nova versão do Ubuntu está disponível

O sistema apresenta:

New release '23.10' available.
Run 'do-release-upgrade' to upgrade to it.

Essa mensagem indica que o mecanismo de atualização identificou uma versão mais recente para a qual existe um caminho de migração.

É importante distinguir dois procedimentos:

  • Atualização de pacotes: atualiza componentes dentro da versão atual do Ubuntu.
  • Atualização de versão: migra o sistema operacional para outra versão, podendo alterar bibliotecas, serviços e componentes fundamentais.

O comando indicado pelo terminal é:

sudo do-release-upgrade

Entretanto, não recomendo executá-lo imediatamente em um servidor de produção apenas porque a mensagem apareceu.

Uma migração de versão pode afetar bibliotecas, configurações, serviços de rede, aplicações Ruby on Rails, aplicações Node.js, bancos de dados, Docker, regras de firewall e outros componentes.

Como proceder com segurança?

  1. Confirme a versão atual do Ubuntu.
  2. Consulte as notas de lançamento da versão de destino.
  3. Verifique a compatibilidade das aplicações e dos serviços.
  4. Faça backups dos dados e das configurações.
  5. Teste a migração em um ambiente de homologação, quando possível.
  6. Planeje uma janela de manutenção.
  7. Execute a atualização seguindo a documentação oficial.
  8. Valide os serviços, os registros e a conectividade após a migração.

Consulte a documentação oficial:

https://ubuntu.com/server/docs

Uma observação importante: a mensagem apresentada pelo terminal deve ser interpretada como uma indicação de disponibilidade, não como uma ordem para migrar imediatamente.

Antes de realizar a atualização, confirme também se a versão de destino e o caminho de migração são adequados para o ambiente.

7. O sistema sinaliza a necessidade de reinicialização

No final da saída, encontramos:

*** System restart required ***

Essa mensagem indica que o sistema detectou uma condição que sinaliza a necessidade de reinicialização para que determinadas mudanças entrem em vigor.

Uma causa comum é a atualização do kernel, mas não é a única. Dependendo dos pacotes instalados e das ferramentas de manutenção utilizadas, outras atualizações também podem gerar esse aviso.

Como verificar?

No Ubuntu, você pode consultar o arquivo utilizado para sinalizar a necessidade de reinicialização:

test -f /var/run/reboot-required \
  && echo "Reinicialização sinalizada" \
  || echo "Nenhuma reinicialização sinalizada"

Para consultar os pacotes que podem ter motivado o aviso:

cat /var/run/reboot-required.pkgs

O segundo arquivo pode não existir em todos os casos. Sua ausência não comprova, isoladamente, que o aviso apresentado anteriormente estivesse incorreto.

Como corrigir?

Antes de reiniciar um servidor de produção:

  • Confirme se os backups estão atualizados.
  • Verifique quais aplicações e serviços serão interrompidos.
  • Garanta que o servidor possa ser acessado novamente após a inicialização.
  • Confirme se existe acesso ao console de recuperação, quando necessário.
  • Avise os responsáveis pelos serviços afetados.
  • Programe uma janela de manutenção.

Depois de verificar as condições e aprovar a interrupção, a reinicialização pode ser executada com:

sudo reboot

Após o retorno, confira a versão do kernel em execução:

uname -r

Valide também os serviços importantes, as aplicações, os bancos de dados e a conectividade de rede.

Atenção: não reinicie um servidor remoto sem avaliar como recuperá-lo caso ele não volte corretamente. Uma falha de inicialização ou de rede pode exigir acesso ao console do provedor.

8. Last login: o último acesso ao servidor

A mensagem apresentada foi:

Last login: Mon Oct 26 23:21:56 2023 from ip

Ela registra informações sobre o último login associado à conta utilizada na sessão atual.

O endereço IP apresentado é a origem da conexão registrada. Ele pode pertencer ao próprio administrador, a uma rede corporativa, a uma VPN ou a outro ponto de acesso autorizado.

Se você não reconhecer esse acesso, não conclua automaticamente que houve uma invasão. Primeiro, verifique se o horário, o endereço e a conta correspondem às suas atividades ou às de outros administradores autorizados.

Como verificar os registros de acesso SSH?

Em sistemas que utilizam o journald para registrar eventos do serviço SSH, execute:

sudo journalctl -u ssh --since "24 hours ago"

A disponibilidade e o conteúdo desses registros dependem da configuração do sistema. Em algumas instalações, os eventos de autenticação também são registrados em /var/log/auth.log.

Para consultar os últimos logins registrados:

last -a

Como proteger o SSH?

Algumas medidas importantes são:

  • Utilizar autenticação por chave SSH quando apropriado.
  • Desabilitar o acesso direto de root por SSH, após confirmar que existe outra forma segura de administração.
  • Evitar senhas fracas e reutilizadas.
  • Limitar o acesso de rede quando possível.
  • Manter o sistema e o serviço SSH atualizados.
  • Monitorar tentativas de autenticação e acessos bem-sucedidos.

Antes de alterar a configuração do SSH, valide os parâmetros e mantenha uma sessão administrativa funcional. Uma configuração incorreta pode impedir novos acessos remotos.

9. Um roteiro inicial para cuidar do servidor

Depois de compreender os indicadores, podemos organizar uma sequência simples de diagnóstico.

Execute os comandos individualmente e interprete os resultados antes de partir para a próxima etapa.

Etapa 1 — Conferir o estado geral

uptime
free -h
df -h

Esses comandos ajudam a avaliar a carga, a memória e o espaço disponível nos sistemas de arquivos.

Etapa 2 — Investigar os processos

top
ps aux

Procure processos com consumo elevado e identifique os serviços aos quais pertencem.

Etapa 3 — Consultar as atualizações

sudo apt update
apt list --upgradable

Analise os pacotes pendentes e planeje a aplicação das atualizações.

Etapa 4 — Verificar o estado de segurança

pro status

Consulte a cobertura do Ubuntu Pro e avalie se ela atende à política de segurança do servidor.

Etapa 5 — Planejar a reinicialização

Se houver indicação de reinicialização necessária, verifique a origem do aviso, prepare o ambiente e programe a operação.

Não existe vantagem em executar todos os comandos de manutenção de uma só vez sem avaliar os resultados intermediários.

10. Conclusão: administrar um servidor é interpretar, investigar e agir

A saída do Ubuntu Server é uma ferramenta útil para identificar situações que merecem atenção.

No exemplo analisado, encontramos consumo de RAM e swap que justificam acompanhamento, atualizações pendentes, cobertura adicional de segurança desabilitada, uma nova versão do sistema disponível e um aviso de reinicialização.

Nenhum desses indicadores, isoladamente, comprova que o servidor esteja com defeito ou comprometido.

O trabalho de administração começa com a interpretação dos sinais. Em seguida, verificamos os dados, identificamos as causas e escolhemos a intervenção apropriada.

Um bom administrador não executa comandos apenas para fazer desaparecer mensagens do terminal. Ele entende o impacto das mudanças, preserva os dados, mantém a segurança e valida o funcionamento dos serviços depois de cada intervenção.

Esse é um dos fundamentos da administração responsável de servidores Linux: observar antes de alterar, investigar antes de corrigir e validar depois de executar.