Domanda 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 esiste un modo per farlo dalla riga di comando?


286
2017-07-28 22:50


origine


Io non la penso così dist-upgrade porta l'intero sistema a una nuova versione. Sto parlando degli aggiornamenti giornalieri, come quelli che vedi in Update Manager. - mac9416
Oh, capisco cosa stai dicendo ora. Heh, eseguo apt-get update così spesso, lo scrivo senza pensare. Grazie per il testa a testa! - mac9416
Si desidera "apt-get dist-upgrade", non "apt-get upgrade". "dist-upgrade" non è per le nuove versioni (è "do-release-upgrade" un comando separato). L'uso di "dist-upgrade" significa che gestirà le dipendenze mutevoli dei nuovi pacchetti. Questo può essere importante. - Kees Cook
dist-upgrade è la normale operazione eseguita dalla GUI di Update Manager. Per pacchetti come il kernel dove c'è un linux-image-generic pacchetto, a seconda dell'immagine corrente, ad es linux-image-3.x.y-zz-generic (ciascuna versione di cui è un nome di pacchetto separato), dist-upgrade (che consente l'installazione di nuovi pacchetti per soddisfare le dipendenze) eseguirà questo aggiornamento, mentre l'aggiornamento mostrerà il pacchetto del kernel come interrotto. - chronitis
Sorprendente che non ci sia nulla di buono apt-get risposte basate per questo, considerando quanto è prominente elencato su ciascun server - Karthik T


risposte:


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

Potresti usare questo, ma invece di configurare la parte automatica potresti chiamarla manualmente. Per questo caso, il seguente dovrebbe farlo tranquillamente:

sudo unattended-upgrade

o versione più dettagliata, per controllare come va

sudo unattended-upgrade -d

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

Ciò presuppone che il pacchetto sia installato di default, che probabilmente è. In caso contrario, basta fare:

sudo apt-get install unattended-upgrades

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


267
2017-07-29 17:28



Per disabilitare l'esecuzione automatica di unattended-upgrade probabilmente hai bisogno di modificare /etc/cron.daily/apt, ma non sono sicuro che sia "corretto" farlo - Jaime Hablutzel
nota a margine: per il server LTS Ubuntu 12.04.5, unattended-upgrades non è installato di default. - Raptor
Dal momento che stai facendo questo dalla riga di comando, usa -v per messaggi informativi o -d per i messaggi di debug. Altrimenti l'utilità sarà molto silenziosa, nel qual caso sarà necessario controllare i log in /var/log/unattended-upgrades. Puoi anche usare --dry-run simulare ma non aggiornare effettivamente nulla. Per maggiori informazioni e altre opzioni, usa --help per ottenere il messaggio di aiuto. - ADTC
ho imparato alcune cose su unattended-upgrades oggi. Grazie! - the0ther
"per monitorare come va", è giusto eseguire il debug dei messaggi non interattivi, giusto? - Aquarius Power


Alcuni consigli su come gestire gli aggiornamenti

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

  • Mostra solo 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
    

Gli appunti: 

  • A volte Ubuntu mostra aggiornamenti di sicurezza come se provenissero dal repository $ release-updates. È così, mi è stato detto, perché gli sviluppatori di Ubuntu trasferiscono gli aggiornamenti di sicurezza al repository $ release-updates per velocizzare la loro disponibilità.

    In questo caso, puoi 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 l'aggiornamento del pacchetto. Scopri quali pacchetti stai per aggiornare in anticipo e pianifica i tuoi riavvii / riavvii. Il problema qui è che, a meno che non si riavvii un servizio, potrebbe ancora essere in uso una versione precedente di una libreria (la ragione 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 mantenere in memoria il riferimento a un file xlog già eliminato, che non è un motivo valido per riavviare il servizio.

    Pertanto, un altro, più affidabile, modo per verificare questo utilizzando gli utils standard è il seguente piccolo script di bash che ho spudoratamente rubato https://locallost.net/?p=233

    Controlla se i processi in esecuzione su un sistema stanno ancora utilizzando le librerie cancellate in virtù del mantenimento delle copie di quelli in 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
    

104
2017-11-16 11:35



Noto solo ora questo post. È estremamente preciso Grazie mille (+1) - Danduk82
da dove viene il "checkrestart"? Non riesco a trovarlo in Ubuntu Trusty. Ho trovato "needrestart" che sembra si adatta alle tue istruzioni? - Ben XO
Può essere trovato nel pacchetto Debian-goodies: packages.debian.org/wheezy/debian-goodies. C'è anche needrestart. Puoi trovarli entrambi su Xenial eseguendo: $ apt-cache search checkrestart - ILIV
Ricevo "E: Impossibile aprire il file di blocco / var / lib / dpkg / lock - open (13: Autorizzazione negata)" anche con sudo. È qualcosa di specifico per uno degli aggiornamenti o i comandi che hai fornito? - Nathan Hornby
Molto probabilmente si tratta di una terminazione errata / anormale di dpkg che ha lasciato un file di blocco non chiarito. Non accade normalmente fino a, ad es. l'installazione di un pacchetto non termina con successo (disco pieno, ecc.) Probabilmente non puoi eseguire altri comandi apt-get e dpkg, puoi? - 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 imposterà tutti i pacchetti dalla distribuzione di Ubuntu alla priorità 50, il che li renderà meno desiderabili rispetto ai pacchetti già installati. Ai file originati dal repository di sicurezza viene assegnata la priorità predefinita (500), quindi vengono considerati per l'installazione. Ciò significa che solo i pacchetti che sono considerati più desiderabili di quelli attualmente installati sono aggiornamenti di sicurezza. Ulteriori informazioni sul fissaggio in la pagina di manuale di apt_preferences.

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

Se desideri utilizzarlo solo per gli script e non impostarlo come predefinito per il sistema, puoi inserire le regole in un'altra posizione e utilizzarlo invece:

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

Questo farà sì 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 che è possibile utilizzare apt-cache policy per determinare facilmente le chiavi richieste per il fissaggio.


46
2017-07-29 04:12



Grazie per aver dedicato del tempo per una risposta esauriente. io pensare Capisco come funziona. Ma quando creo il file / etc / apt / preferences ed eseguo apt-get upgrade, vuole aggiornare tutti i pacchetti, non solo gli aggiornamenti di sicurezza. L'aggiornamento dell'elenco prima e dopo è esattamente lo stesso, tranne con / etc / apt / preferences non vuole aggiornare Leafpad, che ho creato dal sorgente e installato "a mano" con dpkg. È molto strano per me, ma può significare qualcosa per te. - mac9416
Puoi vedere cosa sta succedendo con il comando della politica di apt-cache. Scegli uno dei pacchetti che non ottiene una correzione per la sicurezza ed esegui apt-cache policy packagename. Questo elencherà le priorità per varie versioni. Dovresti vedere varie linee e priorità diverse. Se non ci sono linee con la priorità 50, il blocco non influisce sui pacchetti in questione per qualche motivo. - Ressu
Avevo seguito questa risposta in passato. Oggi ho scoperto che a causa di questa risposta, 68 pacchetti di aggiornamento della sicurezza NON sono stati installati sul mio server e non si sono presentati come potenziali candidati all'installazione. Questa NON è UNA BUONA RISPOSTA! - Shade


Quanto segue è confermato in Ubuntu 14.04 LTS.

Usa il unattended-upgrade pacchetto.

Guarda il file /etc/apt/apt.conf.d/50unattended-upgrades. Ci dovrebbe essere una sezione in alto che sia:

// 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 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 di sicurezza non presidiati, una volta al giorno.

Ora, per eseguire manualmente: sudo unattended-upgrade.

Per testare come una corsa a secco, senza fare nulla: sudo unattended-upgrade --dry-run.

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


9
2017-10-03 17:18



C'è un modo per rendere questo un programma mensile? - mike.b93
@ mike.b93, credo che l'impostazione APT::Periodic::Unattended-Upgrade "30"; Lo farei ogni 30 giorni. - vcardillo


Sebbene sia piuttosto brutto, puoi disabilitare tutti i repository oltre al repository di sicurezza e poi fare:

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

Non l'ho provato, ma in teoria troverei solo aggiornamenti nel repository di sicurezza e li applicheremo ...


5
2017-07-29 00:00



Sì, questa è una possibilità. Lo esaminerò. Non sono bravo con BASH, ma potrei provare a fare una sceneggiatura per farlo. - mac9416
OK, ho disabilitato tutti tranne i repository di sicurezza di Ubuntu e ho eseguito a sudo apt-get update && sudo apt-get upgrade (cancellando prima che fossero fatti tutti gli aggiornamenti). Quindi ho riattivato tutti i miei repository, ho funzionato sudo apt-get updateee ha aperto Update Manager. I pacchetti contrassegnati come aggiornamenti di sicurezza non erano esattamente cosa apt-get upgrade trovato, ma erano molto vicini - abbastanza vicino per me. Spero ancora di sapere esattamente come fa Update Manager e come fare lo stesso dalla riga di comando, ma questo succederà. Grazie! - mac9416


  • apt-get update: basta leggere le voci nel repository - secondo la lista esistente. Necessario per controllare ciò che è nuovo.
  • apt-get upgrade: tutti gli aggiornamenti per i pacchetti installati senza moduli del kernel. Nessun aggiornamento della versione.
  • apt-get dist-upgrade: tutti gli aggiornamenti per i pacchetti installati anche con i moduli del kernel. Nessun aggiornamento della versione.
  • apt-get con parametro -s: solo test, nessuna modifica eseguita.

3
2017-08-02 09:49





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

Controlla e regola /etc/apt/apt.conf.d/50unattended-upgrade. Hai sostituito 'karmic' con il nome in codice di Ubuntu?

Nessuna risposta al fatto se ciò ha funzionato comunque.


0
2017-07-28 23:04



Sembra che il metodo descritto in quella pagina wiki dipenda dall'impostazione dell'argomento --target-release di aptitude su <release> -security. Come l'OP di quella domanda, quel metodo installa tutti gli aggiornamenti, non solo gli aggiornamenti di sicurezza. Leggendo le pagine man di apt-get e aptitude, non penso che l'argomento --target-release sia inteso anche a limitare gli aggiornamenti alla sola sicurezza, anche se non sono sicuro di cosa sia è per. - mac9416