Wie kann ich nur Sicherheitsupdates über die Befehlszeile installieren?


333

sudo apt-get upgradeInstalliert alle Updates, nicht nur Sicherheitsupdates. Ich weiß, dass ich mit Update Manager nur wichtige Sicherheitsupdates auswählen kann. Gibt es eine Möglichkeit, dies über die Befehlszeile zu tun?


2
Ich glaube nicht. Mit dist-upgrade wird das gesamte System auf eine neue Version gebracht. Ich spreche von alltäglichen Updates, wie sie im Update Manager angezeigt werden.
Michael Crenshaw

1
Oh, ich verstehe, was du jetzt sagst. Heh, ich führe apt-get update so oft aus, dass ich es ohne nachzudenken eingebe. Danke für die Warnung!
Michael Crenshaw

7
Sie möchten "apt-get dist-upgrade", nicht "apt-get upgrade". "dist-upgrade" gilt nicht für neue Releases (das ist "do-release-upgrade", ein separater Befehl). Die Verwendung von "dist-upgrade" bedeutet, dass sich die Abhängigkeiten der neuen Pakete ändern. Das kann wichtig sein.
Kees Cook

3
dist-upgrade ist der normale Vorgang, der von der Update Manager-GUI ausgeführt wird. Bei Paketen wie dem Kernel, auf dem sich ein linux-image-genericPaket befindet, wird abhängig vom aktuellen Image, z. B. linux-image-3.x.y-zz-generic(jede Version ist ein separater Paketname), dieses Upgrade von dist-upgrade (mit dem neue Pakete installiert werden können, um Abhängigkeiten zu erfüllen) durchgeführt Während beim Upgrade das Kernel-Paket als zurückgehalten angezeigt wird.
Chronitis

3
Überraschend, dass es keine guten apt-getAntworten dafür gibt, wenn man bedenkt, wie prominent es auf jedem Server aufgeführt ist
Karthik T

Antworten:


308

Das Paket für unbeaufsichtigte Upgrades bietet Funktionen zum automatischen Installieren von Sicherheitsupdates.

Sie können dies verwenden, aber anstatt den automatischen Teil zu konfigurieren, können Sie ihn manuell aufrufen:

sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d

Wenn Sie es stattdessen ruhig ausführen möchten:

sudo unattended-upgrade

HINWEIS: Wenn Sie das unbeaufsichtigte Upgrade aufrufen, lassen Sie das "s" am Ende stehen.

Dies setzt voraus, dass das Paket standardmäßig installiert ist, was wahrscheinlich auch so ist. Wenn nicht, machen Sie einfach:

sudo apt-get install unattended-upgrades

Siehe auch /usr/share/doc/unattended-upgrades/README.md.


Für die Deaktivierung der automatischen Ausführung müssen unattended-upgradeSie wahrscheinlich ändern /etc/cron.daily/apt, aber nicht sicher, ob es "richtig" ist, um dies zu tun
Jaime Hablutzel

Nebenbemerkung: für Ubuntu 12.04.5 LTS-Server unattended-upgradesist nicht standardmäßig installiert.
Raptor

13
Da Sie dies von der Befehlszeile aus tun, verwenden Sie diese -vOption für Informationsnachrichten oder -dfür Debug-Nachrichten. Andernfalls ist das Dienstprogramm sehr leise. In diesem Fall müssen Sie die Anmeldungen überprüfen /var/log/unattended-upgrades. Sie können auch verwenden --dry-run, um etwas zu simulieren, aber nicht wirklich zu aktualisieren. Für weitere Informationen und andere Optionen verwenden Sie --help, um die Hilfemeldung abzurufen.
ADTC

Ich habe ein paar Dinge über unattended-upgradesheute gelernt . Vielen Dank!
Uhr

"für die Überwachung, wie es geht", ist es nur nicht interaktive Nachrichten zu debuggen, oder?
Aquarius Power

116

Einige Tipps zum Verwalten von Updates

Dies gilt sowohl für Debian als auch für Ubuntu. Genauere Anweisungen für Ubuntu folgen.

  • Nur Sicherheitsupdates anzeigen:

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

    oder

    sudo unattended-upgrade --dry-run -d
    

    oder

    /usr/lib/update-notifier/apt-check -p
    
  • Alle aktualisierbaren Pakete anzeigen

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Installieren Sie nur Sicherheitsupdates

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

Anmerkungen:

  • Manchmal zeigt Ubuntu Sicherheitsupdates an, als stammten sie aus dem $ release-updates-Repository. Dies ist, wie mir gesagt wurde, so, weil Ubuntu-Entwickler Sicherheitsupdates auch in das $ release-updates-Repository verschieben, um deren Verfügbarkeit zu beschleunigen.

    In diesem Fall können Sie folgendermaßen vorgehen, um nur Sicherheitsupdates anzuzeigen:

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

    und

    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'}
    
  • Überprüfen Sie, welche Dienste nach Paketaktualisierungen neu gestartet werden müssen. Stellen Sie im Voraus fest, welche Pakete aktualisiert werden sollen, und planen Sie die Neustarts / Neustarts. Das Problem hierbei ist, dass, wenn Sie einen Dienst nicht neu starten, möglicherweise noch eine ältere Version einer Bibliothek verwendet wird (häufigster Grund), die vor der Installation eines neuen Pakets in den Speicher geladen wurde, um eine Sicherheitsanfälligkeit zu beheben, oder was auch immer.

    checkrestart -v
    

    Beachten Sie jedoch, dass checkrestartmöglicherweise Prozesse aufgelistet sind, die nicht unbedingt neu gestartet werden müssen. Beispielsweise kann der PostgreSQL-Dienst eine bereits gelöschte xlog-Datei im Speicher behalten, was kein gültiger Grund für einen Neustart des Dienstes ist.

    Daher ist das folgende kleine Bash-Skript, das ich schamlos von https://locallost.net/?p=233 gestohlen habe, eine weitere, zuverlässigere Möglichkeit, dies mit Standard-Utils zu überprüfen

    Es prüft, ob laufende Prozesse auf einem System noch gelöschte Bibliotheken verwenden, indem Kopien dieser im aktiven Speicher aufbewahrt werden.

    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
    

1
Ich merke erst jetzt diesen Beitrag. Es ist äußerst präzise. Vielen Dank (+1)
Danduk82

woher kommt checkrestart Ich kann es in Ubuntu Trusty nicht finden. Ich habe "needrestart" gefunden, wie es aussieht, würde es in Ihre Anweisungen passen?
Ben XO

Es kann im debian-goodies-Paket gefunden werden: packages.debian.org/wheezy/debian-goodies . Es gibt auch einen Neustart. Sie können beides auf Xenial finden, indem Sie Folgendes
ausführen

Ich erhalte die Meldung "E: Sperrdatei / var / lib / dpkg / lock - open konnte nicht geöffnet werden (13: Berechtigung verweigert)", auch mit sudo. Ist dies spezifisch für eines der von Ihnen bereitgestellten Updates oder Befehle?
Nathan Hornby

Höchstwahrscheinlich handelt es sich um eine inkorrekte / abnormale Beendigung von dpkg, bei der eine Sperrdatei nicht gelöscht wurde. Kommt normalerweise erst vor, wenn zB die Installation eines Pakets nicht erfolgreich abgeschlossen wurde (vollständige Festplatte usw.). Sie können wahrscheinlich keine anderen apt-get- und dpkg-Befehle ausführen, oder?
ILIV

46

Ersetzen Sie /etc/apt/preferencesdurch Folgendes:

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

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

Jetzt apt-get upgradeaktualisiert ein einfaches Update nur alle Sicherheitsupdates.

Warum (und wie) das funktioniert: Die Voreinstellungsdatei fixiert alle Pakete von der Ubuntu-Distribution auf Priorität 50, was sie weniger wünschenswert macht als bereits installierte Pakete. Dateien, die aus dem Sicherheitsrepository stammen, erhalten die Standardpriorität (500), sodass sie für die Installation berücksichtigt werden. Dies bedeutet, dass nur Pakete Sicherheitsupdates sind, die als wünschenswerter als die derzeit installierten angesehen werden. Weitere Informationen zum Fixieren finden Sie auf der Hilfeseite apt_preferences .

Sie können vorübergehend eine bestimmte Verteilung von Aktualisierungen mit der Förderung der --target-releaseOption , die mit arbeitet apt-getund aptitude(zumindest) , die Sie bestimmte Versionen stecken kann , so dass sie für das Upgrade berechtigt sind.

Wenn Sie dies nur für Skripte verwenden möchten und nicht für das System als Standard festlegen möchten, können Sie die Regeln an einem anderen Speicherort ablegen und stattdessen Folgendes verwenden:

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

Dadurch wird apt veranlasst, nach der Voreinstellungsdatei von einem nicht standardmäßigen Speicherort aus zu suchen.

Die als Beispiel angegebene Einstellungsdatei gilt nicht für Repositorys von Drittanbietern. Wenn Sie diese ebenfalls anheften möchten, können Sie apt-cache policydie erforderlichen Schlüssel zum Anheften einfach ermitteln.


Vielen Dank, dass Sie sich die Zeit für eine gründliche Antwort genommen haben. Ich denke, ich verstehe, wie es funktioniert. Wenn ich jedoch die Datei / etc / apt / preferences erstelle und apt-get upgrade ausführe, möchte das Programm alle Pakete aktualisieren, nicht nur Sicherheitsupdates. Das Listen-Upgrade davor und danach ist genau das gleiche, außer dass es mit / etc / apt / preferences kein Upgrade für Leafpad durchführen soll, das ich aus dem Quellcode erstellt und "von Hand" mit dpkg installiert habe. Es ist sehr seltsam für mich, aber es kann dir etwas bedeuten.
Michael Crenshaw

1
Mit dem Befehl apt-cache policy können Sie sehen, was los ist. Wählen Sie eines der Pakete aus, für das kein Sicherheitsupdate installiert wurde, und führen Sie es aus apt-cache policy packagename. Dies listet die Prioritäten für verschiedene Versionen auf. Sie sollten verschiedene Zeilen und unterschiedliche Prioritäten sehen. Wenn es keine Zeilen mit der Priorität 50 gibt, wirkt sich das Fixieren aus irgendeinem Grund nicht auf die betreffenden Pakete aus.
Ressu

1
Ich war dieser Antwort in der Vergangenheit gefolgt. Heute habe ich festgestellt, dass aufgrund dieser Antwort 68 Sicherheitsupdatepakete NICHT auf meinem Server installiert wurden und nicht als potenzielle Installationskandidaten angezeigt wurden. Dies ist keine gute Antwort!
Schatten

12

Folgendes wird in Ubuntu 14.04 LTS bestätigt.

Verwenden Sie das unattended-upgradePaket.

Schauen Sie sich die Datei an /etc/apt/apt.conf.d/50unattended-upgrades. Es sollte oben einen Abschnitt geben, der lautet:

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

Beachten Sie, dass standardmäßig nur unbeaufsichtigte Upgrades für Sicherheitspakete zulässig sind.

Ändern Sie die Datei /etc/apt/apt.conf.d/10periodicwie folgt :

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

Dadurch werden einmal täglich automatische unbeaufsichtigte Sicherheitsupgrades ausgeführt.

Nun läuft manuell: sudo unattended-upgrade.

Um zu testen , als Trockenlauf, ohne etwas zu tun: sudo unattended-upgrade --dry-run.

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


Gibt es eine Möglichkeit, dies zu einem monatlichen Zeitplan zu machen?
mike.b93

1
@ mike.b93, ich glaube Einstellung APT::Periodic::Unattended-Upgrade "30";würde dies tun - alle 30 Tage.
Vcardillo

5

Obwohl es ziemlich hässlich ist, können Sie alle Repositorys außer dem Sicherheits-Repository deaktivieren und dann Folgendes tun:

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

Ich habe es nicht getestet, aber theoretisch würde es nur Aktualisierungen im Sicherheits-Repository finden und anwenden ...


Ja, das ist eine Möglichkeit. Ich werde es untersuchen. Ich bin nicht gut in BASH, aber ich kann versuchen, ein Skript dafür zu erstellen.
Michael Crenshaw

OK, ich habe alle außer den Ubuntu-Sicherheits-Repos deaktiviert und ein ausgeführt sudo apt-get update && sudo apt-get upgrade(wird abgebrochen, bevor Upgrades durchgeführt wurden). Dann habe ich alle meine Repos wieder aktiviert sudo apt-get updatee, ausgeführt und den Update Manager geöffnet. Die als Sicherheitsupdates gekennzeichneten Pakete waren nicht genau das apt-get upgrade, was sie gefunden hatten, aber sie waren sehr nah genug für mich. Ich wünschte immer noch, ich wüsste genau, wie Update Manager es macht und wie das gleiche über die Befehlszeile gemacht wird, aber das wird es tun. Vielen Dank!
Michael Crenshaw

3
  • apt-get update: Lies einfach die Einträge im Repository - entsprechend der vorhandenen Liste. Muss überprüfen, was neu ist.
  • apt-get upgrade: alle Updates für installierte Pakete ohne Kernelmodule. Kein Release-Update.
  • apt-get dist-upgrade: alle Updates für installierte Pakete auch mit Kernelmodulen. Kein Release-Update.
  • apt-getmit Parameter -s: nur Test, keine Änderungen durchgeführt.

0

Unter Debians verwende ich diesen Befehl nur, um Sicherheitsupdates durchzuführen:

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

0

Ich kann weder in apt-get noch in aptitude eine Option finden, jedoch hatte jemand die gleiche Frage zu SuperUser. Die einzige Antwort ist:

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

Keine Antwort, ob das aber geklappt hat.


2
Es scheint, dass die in dieser Wiki-Seite beschriebene Methode davon abhängt, ob das --target-release-Argument von aptitude auf <release> -security gesetzt wird. Wie das OP dieser Frage installiert diese Methode alle Upgrades, nicht nur Sicherheitsupgrades. Ich glaube nicht, dass das Argument --target-release beim Lesen der Manpages zu apt-get und aptitude Upgrades nur auf die Sicherheit beschränken soll, obwohl ich nicht sicher bin, wofür es gedacht ist .
Michael Crenshaw

0

Hier ist ein Skript, mit dem dies auf verschiedene Arten erreicht wird:

#!/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)"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.