it-swarm.it

Come posso installare solo gli aggiornamenti di sicurezza dalla riga di comando?

Sudo apt-get upgrade installa tutti gli aggiornamenti, non solo gli aggiornamenti di sicurezza. So che posso utilizzare Update Manager per selezionare solo importanti aggiornamenti di sicurezza, ma c'è un modo per farlo dalla riga di comando?

330
Michael Crenshaw

Il pacchetto nattended-upgrades fornisce funzionalità per installare automaticamente gli aggiornamenti di sicurezza.

Puoi usarlo, ma invece di configurare la parte automatica puoi chiamarla manualmente:

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

Se invece vuoi eseguirlo tranquillamente:

Sudo unattended-upgrade

NOTA: quando si chiama l'aggiornamento automatico, si lascia la "s" alla fine.

Ciò presuppone che il pacchetto sia installato per impostazione predefinita, cosa che probabilmente è. In caso contrario, fai semplicemente:

Sudo apt-get install unattended-upgrades

Vedi anche /usr/share/doc/unattended-upgrades/README.md.

307
blueyed

Alcuni consigli su come gestire gli aggiornamenti

Questo vale sia per Debian che per Ubuntu, ma seguono istruzioni più specifiche per Ubuntu.

  • Mostra solo gli aggiornamenti di sicurezza:

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

    o

    Sudo unattended-upgrade --dry-run -d
    

    o

    /usr/lib/update-notifier/apt-check -p
    
  • Mostra tutti i pacchetti aggiornabili

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Installa solo gli aggiornamenti di sicurezza

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

Note:

  • A volte Ubuntu mostra gli aggiornamenti di sicurezza come se provenissero dal repository $ release-updates. È così, mi viene detto, perché gli sviluppatori Ubuntu inviano gli aggiornamenti di sicurezza al repository $ release-updates anche per accelerarne la disponibilità.

    In tal caso, è possibile eseguire le seguenti operazioni per mostrare solo gli aggiornamenti di sicurezza:

    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'}
    
  • Verifica quali servizi devono essere riavviati dopo gli aggiornamenti del pacchetto. Scopri quali pacchetti aggiornerai in anticipo e pianifica i tuoi riavvii/riavvii. Il problema qui è che, a meno che non si riavvii un servizio, è possibile che stia ancora utilizzando una versione precedente di una libreria (motivo più comune) che è stata caricata in memoria prima di installare un nuovo pacchetto che corregge una vulnerabilità di sicurezza o altro.

    checkrestart -v
    

    Tuttavia, tieni presente che checkrestart può elencare i processi che non devono necessariamente essere riavviati. Ad esempio, il servizio PostgreSQL potrebbe conservare nella memoria il riferimento a un file xlog già eliminato, che non è un motivo valido per riavviare il servizio.

    Pertanto, un altro modo più affidabile per verificarlo utilizzando utils standard è il seguente piccolo script bash da cui ho sottratto spudoratamente https://locallost.net/?p=2

    Verifica se i processi in esecuzione su un sistema utilizzano ancora librerie eliminate in virtù del mantenimento di copie di quelle nella memoria attiva.

    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
    
114
ILIV

sostituire /etc/apt/preferences con il seguente:

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

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

ora un semplice apt-get upgrade aggiornerà solo tutti gli aggiornamenti di sicurezza.

Perché (e come) funziona: il file delle preferenze bloccherà tutti i pacchetti dalla distribuzione Ubuntu alla priorità 50, il che li renderà meno desiderabili dei pacchetti già installati. Ai file che provengono dal repository di sicurezza viene assegnata la priorità predefinita (500), quindi vengono considerati per l'installazione. Ciò significa che solo i pacchetti considerati più desiderabili di quelli attualmente installati sono aggiornamenti di sicurezza. Maggiori informazioni sull'appuntamento nella man_preferences manpage .

Puoi promuovere temporaneamente una determinata distribuzione per gli aggiornamenti con l'opzione --target-release che funziona con apt-get e aptitude (almeno) che ti consentirà di bloccare determinate versioni in modo che siano idonee all'aggiornamento.

Se si desidera utilizzarlo solo per gli script e non renderlo predefinito per il sistema, è possibile posizionare le regole in un'altra posizione e utilizzare invece questo:

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

Questo farà in modo che apt cerchi il file delle preferenze da una posizione non predefinita.

Il file delle preferenze fornito come esempio non si applica ai repository di terze parti, se si desidera bloccare anche quelli, è possibile utilizzare apt-cache policy per determinare facilmente le chiavi richieste per il pinning.

46
Ressu

Quanto segue è confermato in Ubuntu 14.04 LTS.

Utilizzare il pacchetto unattended-upgrade.

Guarda il file /etc/apt/apt.conf.d/50unattended-upgrades. Dovrebbe esserci una sezione in alto che è:

// 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";
};

Si noti come è stato configurato per consentire solo gli aggiornamenti automatici per i pacchetti di sicurezza, per impostazione predefinita.

Modifica il file /etc/apt/apt.conf.d/10periodic simile a:

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

Questo eseguirà aggiornamenti automatici della sicurezza automatica, una volta al giorno.

Ora, per eseguire manualmente: Sudo unattended-upgrade.

Per eseguire il test a secco, senza fare nulla: Sudo unattended-upgrade --dry-run.

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

12
vcardillo

Sebbene sia piuttosto brutto, è possibile disabilitare tutti i repository oltre al repository di sicurezza e quindi fare:

Sudo apt-get update && Sudo apt-get upgrade

Non l'ho provato, ma in teoria troverebbe solo gli aggiornamenti nel repository di sicurezza e li applicherebbe ...

5
Stephen RC
  • apt-get update: basta leggere le voci nel repository - secondo l'elenco esistente. Necessario controllare le novità.
  • apt-get upgrade: tutti gli aggiornamenti per i pacchetti installati senza moduli del kernel. Nessun aggiornamento di rilascio.
  • apt-get dist-upgrade: tutti gli aggiornamenti per i pacchetti installati anche con i moduli del kernel. Nessun aggiornamento di rilascio.
  • apt-get con parametro -s: solo test, nessuna modifica eseguita.
3
fuser

Ecco uno script che raggiunge questo in diversi modi:

#!/usr/bin/env bash
set -e

# List upgradable packages
apt-get update
apt list --upgradable 2>/dev/null
# List security upgrades
test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)
# List upgradable apt packages then upgrade
apt-get update && apt-get upgrade -y  -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
0
Seth Bergman

Su Debians uso questo comando per fare solo aggiornamenti di sicurezza:

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

Non riesco a trovare un'opzione in apt-get o aptitude, tuttavia qualcuno aveva il stessa domanda su SuperUser. L'unica risposta è:

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

Nessuna risposta sul fatto che funzionasse comunque.

0
Ross