Existem várias maneiras de obter o nginx 1.13.3 e superior. Você mesmo pode compilar, use o repositório stretch-backports , ou você pode adicionar o próprio repositório apt do nginx. Nessa resposta, estarei andando com você até o último, pois é provavelmente o mais fácil de fazer entre os três.
O site do nginx tem uma página dedicada sobre como configurar seu repositório, mas há mais, especialmente se você quer evitar essa vulnerabilidade específica a partir de agora. A ramificação stable
instalará 1.12.0, que ainda está vulnerável (foi corrigido em 1.12.1+ e 1.13.3+), portanto, você precisará usar mainline
, que instalará 1.13.5.
Na melhor das hipóteses, alternar a versão nginx deve ser tão simples quanto executar alguns comandos e você concluirá em 2 a 3 minutos com o mínimo de tempo de inatividade. Para poder voltar a funcionar assim que possível, vamos começar a preparar a instalação. Primeiro, você precisa adicionar o repositório à sua configuração apt, adicionar a chave de assinatura e atualizar a lista de pacotes: ( apt
e apt-get
funcionam aqui, apt
é apenas menor)
$ sudo echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
$ wget -qO - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ sudo apt update
Em seguida, execute o seguinte comando:
$ sudo apt remove nginx-common
Isto irá efetivamente desinstalar o nginx do sistema, mas preservará seus arquivos de configuração, exceto por um arquivo de serviço systemd que é fácil de restaurar.
Em seguida, instale o nginx no novo repositório:
$ sudo apt install nginx
Esteja ciente de que isso perguntará se você deseja substituir determinados arquivos de configuração, como este:
Configuration file '/etc/nginx/nginx.conf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** nginx.conf (Y/I/N/O/D/Z) [default=N] ?
Certifique-se de que não insira Y
, apenas pressione Enter ou digite N
sempre que for solicitado a evitar a perda da configuração atual.
Se você acidentalmente substituir seu nginx.conf
, precisará - no mínimo - alterar a última linha do arquivo de include /etc/nginx/conf.d/*.conf;
para include /etc/nginx/sites-enabled/*;
para restaurar o comportamento de inclusão anterior.
Você pode verificar a versão recém-instalada:
$ nginx -v
nginx version: nginx/1.13.5
Por fim, você notará que a tentativa de executar service nginx start
falha com a seguinte mensagem:
Failed to start nginx.service: Unit nginx.service is masked.
Isso ocorre porque a remoção de nginx-common
também limpou /lib/systemd/system/nginx.service
que foi usado anteriormente pelo systemd para gerenciar o nginx. Para restaurar este arquivo, basta criá-lo usando o comando abaixo:
$ echo "[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
" > /lib/systemd/system/nginx.service
Por fim, execute systemctl unmask nginx
seguido de systemctl enable nginx
e, agora, você poderá gerenciar o serviço como antes, com todas as configurações anteriores intactas.
$ service nginx start