Manter um servidor Linux sempre atualizado é muito importante para evitar brechas de segurança, especialmente em servidores VPS. Eu mantenho meu servidores na DigitalOcean sempre atualizado com auxílio do programa unattended-upgrades. No Ubuntu Server 18.04 ele já vem instalado, mas caso não esteja digite o comando abaixo:
Instalando o unattended-upgrades
sudo apt install unattended-upgrades -y
Depois disso, precisamos o habilitar programa:
sudo dpkg-reconfigure unattended-upgrades
Irá aparecer uma tela perguntando se queremos “Fazer downloads automaticamente e instalar pacotes estáveis de atualização?” Pressione Enter para afirmar que sim.
Agora, configure como e quais as atualizações devem ser realizadas alterando os parâmetros do arquivo 50unattended-upgrades
:
sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
Toda linha que tiver “//” não é lida pelo programa. Então, compare o seu arquivo com esse exemplo e remova os “//” de acordo com os exemplo abaixo. Nesse primeiro trecho de configuração, definimos o que queremos que seja atualizado, que são: atualizções normais e de segurança.
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that unattended-upgrades
// should also install from here by default.
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
"${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
Especifique um e-mail para receber notificações.
// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "[email protected]"
Unattended-Upgrade::Mail "[email protected]";
Essa opção é para remover automaticamente pacotes de kernels não utlizados.
// Remove unused automatically installed kernel-related packages
// (kernel images, kernel headers and kernel version locked tools).
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Essa opção é para remover automaticamente pacotes de dependências não utlizadas.
// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Habilite a reinicialização automática
// Automatically reboot *WITHOUT CONFIRMATION*
// if the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "true";
Defina que horas o servidor deve ser reiniciado
// If automatic reboot is enabled and needed, reboot at the specific
// time instead of immediately
// Default: "now"
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
Hablite o log
// Enable logging to syslog. Default is False
Unattended-Upgrade::SyslogEnable "true";
Observação: Apesar de termos configurado o e-mail dentro script para sermos avisados quando uma atualização ocorrer, você não receberá e-mails senão configurar o Postfix.
Testando a configuração
Sempre que editamos os parâmetros de um arquivo no Linux precisamos testar se tudo está correto, e nesse caso utilize o comando abaixo:
sudo unattended-upgrades --dry-run -v -d
Se quiser fazer com que o unattended-upgrades seja executado imediatamente, use a linha de comando abaixo:
sudo unattended-upgrades -v -d
Logs
Se quiser olhar detalhadamente os pacotes que foram atualizados, digite:
sudo tail -f /var/log/unattended-upgrades/unattended-upgrades.log
Aqui conseguimos ver tudo o precisamos, como pacotes atualizados, removidos, etc.
Verificando serviços que precisam reiniciados
Em alguns casos, depois que o unattended-upgrades atualiza o sistema ele não reinicia o sistema operacional por não se tratar de uma atualização crítica de segurança. Então é sempre bom durante a sua rotina de auditoria do servidor, verificar se algum serviço (como por exemplo o Apache) precisam ser reiniciado.
Para verificar isso precisamos instalar o pacote debian-goodies:
sudo apt install debian-goodies -y
E depois executamos o comando checkrestart
:
sudo checkrestart
Um exemplo do que será exibido:
Found 10 processes using old versions of upgraded files
(8 distinct programs)
(2 distinct packages)
Of these, 2 seem to contain systemd service definitions or init scripts which can be used to restart them.
The following packages seem to have definitions that could be used
to restart their services:
networkd-dispatcher:
837 /usr/bin/networkd-dispatcher
unattended-upgrades:
919 /usr/share/unattended-upgrades/unattended-upgrade-shutdown
These are the systemd services:
systemctl restart networkd-dispatcher.service
These are the initd scripts:
service unattended-upgrades restart
Repare, que no exemplo acima o comando encontrou 10 processos que ainda estão usando arquivos de configurações antigos. Depois de algumas linhas, ele mostra que dois destes processos podem ser reiniciados manualmente, que são: networkd-dispatcher.service
e o unattended-upgrades
. Então, execute as linhas de comando conforme são exibidas, com o sudo
no início.
systemctl restart networkd-dispatcher.service
service unattended-upgrades restart
Se você rodar o comando novamente:
sudo checkrestart
o resultado será:
Found 8 processes using old versions of upgraded files
(6 distinct programs)
(0 distinct packages)
No packages seem to need to be restarted.
(please read checkrestart(1))
Agora veja que só temos oito processos que ainda estão usando arquivos de configuração antigos.
Verificando a última vez que o servidor foi reiniciado ou desligado
Talvez você queira simplesmente ver se o unattended-upgrades reiniciou o servidor em algum momento. Para ver isso podemos utilizar o comando abaixo:
last -x reboot
E caso você queira ver a última vez que o servidor foi desligado:
last -x shutdown
Então, gostou desse tutorial? Deixe um comentário abaixo. E até próximo tutorial. 🙂