ti-enxame.com

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

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?

321
Michael Crenshaw

O pacote atualizações autônomas fornece 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:

Sudo unattended-upgrade -d --dry-run
Sudo unattended-upgrade -d

Se você quiser executá-lo silenciosamente:

Sudo unattended-upgrade

NOTA: Quando você chama de atualização não assistida, você sai do "s".

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

Sudo apt-get install unattended-upgrades

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

300
blueyed

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 apenas 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 apenas 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, me disseram, porque os desenvolvedores do Ubuntu enviaram 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 apenas 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, tenha em mente 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 de https://locallost.net/?p=2

    Ele 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
    
113
ILIV

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 no apt_preferences manpage .

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

Se você deseja usar isto apenas para scripts e não torná-lo padrão para o sistema, você pode colocar as regras em algum outro local e usar isto em vez disso:

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.

46
Ressu

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 é:

// 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 não assistidas para pacotes de segurança, por padrão.

Modifique o arquivo /etc/apt/apt.conf.d/10periodic similar 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 um dry-run, sem fazer nada: Sudo unattended-upgrade --dry-run.

Fonte: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html

11
vcardillo

Embora seja bastante feio, você pode desabilitar todos os repositórios além 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 ...

5
Stephen RC
  • apt-get update: apenas leia as entradas no repositório - de acordo com a lista existente. Necessário para verificar o que é novo.
  • apt-get upgrade: todas as atualizações para pacotes instalados sem módulos do kernel. Nenhuma atualização de lançamento.
  • apt-get dist-upgrade: todas as atualizações para pacotes instalados também com módulos do kernel. Nenhuma atualização de lançamento.
  • apt-get com o parâmetro -s: somente teste, sem alterações executadas.
3
fuser

Em Debians eu uso este comando para fazer apenas atualizações de segurança:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
0
keypress

Eu não consigo encontrar uma opção no apt-get ou aptitude, no entanto alguém teve 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?

Nenhuma resposta sobre se isso funcionou no entanto.

0
Ross