Como posso instalar apenas atualizações de segurança a partir da linha de comando?

296

sudo apt-get upgrade instala todas as atualizações, não apenas atualizações de segurança. Eu sei que posso usar o Gerenciador de Atualizações para selecionar apenas atualizações de segurança importantes, mas existe uma maneira de fazer isso a partir da linha de comando?

    
por mac9416 29.07.2010 / 00:50

7 respostas

274

O pacote atualizações autônomas oferece funcionalidade para instalar atualizações de segurança automaticamente.

Você poderia usar isso, mas em vez de configurar a peça automática, você poderia chamá-la manualmente. Para este caso, o seguinte deve ser silencioso:

sudo unattended-upgrade

ou uma versão mais detalhada, para controlar como isso ocorre

sudo unattended-upgrade -d

OBSERVAÇÃO: quando você chama de atualização automática, deixa o "s" fora do final.

Isso pressupõe que o pacote esteja instalado por padrão, o que provavelmente é. Se não, faça exatamente:

sudo apt-get install unattended-upgrades

Veja também /usr/share/doc/unattended-upgrades/README.md .

    
por blueyed 29.07.2010 / 19:28
109

Algumas dicas sobre como gerenciar atualizações

Isso se aplica tanto ao Debian quanto ao Ubuntu, mas instruções mais específicas para o Ubuntu seguem.

  • Mostrar somente atualizações de segurança:

    apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
    

    ou

    sudo unattended-upgrade --dry-run -d
    

    ou

    /usr/lib/update-notifier/apt-check -p
    
  • Mostrar todos os pacotes atualizáveis

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Instalar somente atualizações de segurança

    apt-get -s dist-upgrade | grep "^Inst" | 
        grep -i securi | awk -F " " {'print $2'} | 
        xargs apt-get install
    

Notas:

  • Às vezes, o Ubuntu mostra atualizações de segurança como se estivessem vindo do repositório $ release-updates. Isto é assim, foi-me dito, porque os desenvolvedores do Ubuntu enviam atualizações de segurança para o repositório $ release-updates também para agilizar sua disponibilidade.

    Se for esse o caso, você pode fazer o seguinte para mostrar somente as atualizações de segurança:

    sudo sh -c 'grep ^deb /etc/apt/sources.list | 
        grep security > /etc/apt/sources.security.only.list'
    

    e

    apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null  | 
        grep "^Inst" | awk -F " " {'print $2'}
    
  • Verifique quais serviços precisam ser reiniciados após as atualizações de pacotes. Descubra quais pacotes você irá atualizar antecipadamente e agende suas reinicializações / reinicializações. O problema aqui é que, a menos que você reinicie um serviço, ele ainda pode estar usando uma versão mais antiga de uma biblioteca (razão mais comum) que foi carregada na memória antes de você instalar um novo pacote que corrige uma vulnerabilidade de segurança.

    checkrestart -v
    

    No entanto, lembre-se de que checkrestart pode listar processos que não devem necessariamente ser reiniciados. Por exemplo, o serviço PostgreSQL pode manter em sua memória referência a um arquivo xlog já excluído, o que não é um motivo válido para reiniciar o serviço.

    Portanto, outra maneira mais confiável de verificar isso usando utilitários padrão é o seguinte pequeno script que eu descaradamente roubei do link link a>

    Verifica se os processos em execução em um sistema ainda estão usando bibliotecas excluídas em virtude de manter cópias das que estão na memória ativa.

    ps xh -o pid |
    while read PROCID; do
           grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
           if [ $? -eq 0 ]; then
                   CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
                   echo -e "\tPID $PROCID $CMDLINE\n"
           fi
    done
    
por ILIV 16.11.2012 / 12:35
46

substitua /etc/apt/preferences pelo seguinte:

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

agora, um simples apt-get upgrade atualizará todas as atualizações de segurança apenas.

Por que (e como) isso funciona: O arquivo de preferências irá fixar todos os pacotes da distribuição do Ubuntu para a prioridade 50, o que os tornará menos desejáveis do que os pacotes já instalados. Arquivos originados do repositório de segurança recebem a prioridade padrão (500), portanto, são considerados para instalação. Isso significa que apenas os pacotes considerados mais desejáveis que os atualmente instalados são atualizações de segurança. Mais informações sobre fixação na página do manual do apt_preferences .

Você pode promover temporariamente uma determinada distribuição de atualizações com a opção --target-release , que funciona com apt-get e aptitude (pelo menos), o que permitirá fixar certas versões para que elas sejam elegíveis para atualização.

Se você deseja usar isso apenas para scripts e não torná-lo padrão para o sistema, é possível colocar as regras em algum outro local e usá-lo:

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

Isso fará com que o apt procure pelo arquivo de preferências de um local não padrão.

O arquivo de preferências dado como exemplo não se aplica a repositórios de terceiros, se você deseja fixar esses também, você pode usar apt-cache policy para determinar facilmente as chaves necessárias para fixar.

    
por Ressu 29.07.2010 / 06:12
9

O seguinte é confirmado no Ubuntu 14.04 LTS.

Use o pacote unattended-upgrade .

Veja o arquivo /etc/apt/apt.conf.d/50unattended-upgrades . Deve haver uma seção no topo que seja:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

Observe como ele foi configurado para permitir somente atualizações automáticas para pacotes de segurança, por padrão.

Modifique o arquivo /etc/apt/apt.conf.d/10periodic semelhante a:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Isso executará atualizações automáticas de segurança autônoma, uma vez por dia.

Agora, para executar manualmente: sudo unattended-upgrade .

Para testar como uma execução a seco, sem fazer nada: sudo unattended-upgrade --dry-run .

Fonte: link

    
por vcardillo 03.10.2016 / 19:18
5

Apesar de ser bem feio, você pode desabilitar todos os repositórios do repositório de segurança e fazer:

sudo apt-get update && sudo apt-get upgrade

Eu não testei isso, mas em teoria ele só encontraria atualizações no repositório de segurança e as aplicaria ...

    
por Stephen RC 29.07.2010 / 02:00
3
  • %código%: apenas leia as entradas no repositório - de acordo com a lista existente. Necessário para verificar o que há de novo.
  • apt-get update : todas as atualizações para pacotes instalados sem módulos do kernel. Nenhuma atualização de lançamento.
  • apt-get upgrade : todas as atualizações para pacotes instalados também com módulos do kernel. Nenhuma atualização de lançamento.
  • apt-get dist-upgrade com o parâmetro apt-get : somente teste, nenhuma alteração executada.
por fuser 02.08.2013 / 11:49
0

Eu não consigo encontrar uma opção no apt-get ou aptitude, no entanto, alguém tinha o mesma pergunta no SuperUser. A única resposta é:

Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade . Did you replace 'karmic' with the code name of your Ubuntu?

Não há resposta sobre se isso funcionou no entanto.

    
por Ross 29.07.2010 / 01:04