Frage Wie kann ich nur Sicherheitsupdates über die Befehlszeile installieren?


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


286
2017-07-28 22:50


Ursprung


Ich denke nicht. dist-upgrade bringt das gesamte System auf eine neue Version. Ich spreche von täglichen Updates, wie sie im Update Manager angezeigt werden. - mac9416
Oh, ich verstehe, was du jetzt sagst. Heh, ich laufe apt-get update so oft, ich tippe es ohne nachzudenken. Danke für das Heads-up! - mac9416
Sie wollen "apt-get dist-upgrade", nicht "apt-get upgrade". "dist-upgrade" ist nicht für neue Releases (das ist "do-release-upgrade" ein separater Befehl). Wenn "dist-upgrade" verwendet wird, werden die Abhängigkeiten der neuen Pakete geändert. Dies kann wichtig sein. - Kees Cook
dist-upgrade ist der normale Vorgang, der von der Update Manager-GUI ausgeführt wird. Für Pakete wie den Kernel, wo es a linux-image-generic Paket, abhängig vom aktuellen Bild, z linux-image-3.x.y-zz-generic (Jede Version davon ist ein separater Paketname), dist-upgrade (das die Installation neuer Pakete ermöglicht, um die Abhängigkeiten zu erfüllen) führt dieses Upgrade durch, während das Upgrade das Kernel-Paket als zurückgehalten anzeigt. - chronitis
Überraschend, dass es nichts Gutes gibt apt-get basierend darauf, wie gut es auf jedem Server aufgeführt ist - Karthik T


Antworten:


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

Sie könnten dies verwenden, aber anstatt den automatischen Teil zu konfigurieren, könnten Sie ihn manuell aufrufen. Für diesen Fall sollte das folgende ruhig sein:

sudo unattended-upgrade

oder eine ausführlichere Version, um zu kontrollieren, wie es läuft

sudo unattended-upgrade -d

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 es wahrscheinlich ist. Wenn nicht, mach einfach:

sudo apt-get install unattended-upgrades

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


267
2017-07-29 17:28



Zum Deaktivieren der automatischen Ausführung von unattended-upgrade Sie müssen wahrscheinlich ändern /etc/cron.daily/apt, aber nicht sicher, ob es "richtig" ist - Jaime Hablutzel
Randnotiz: für Ubuntu 12.04.5 LTS Server, unattended-upgrades ist nicht standardmäßig installiert. - Raptor
Da Sie dies über die Befehlszeile ausführen, verwenden Sie -v für Info-Nachrichten oder -d für Debug-Nachrichten. Andernfalls wird das Dienstprogramm sehr leise sein. In diesem Fall müssen Sie die Protokolle überprüfen /var/log/unattended-upgrades. Sie können auch verwenden --dry-run um etwas zu simulieren, aber nicht wirklich zu verbessern. Verwenden Sie für weitere Informationen und andere Optionen --help um die Hilfemeldung zu erhalten. - ADTC
Ich habe ein paar Dinge darüber gelernt unattended-upgrades heute. Vielen Dank! - the0ther
"für die Überwachung, wie es geht", ist es nur nicht interaktive Nachrichten richtig zu debuggen? - Aquarius Power


Ein paar Tipps zur Verwaltung von Updates

Dies gilt sowohl für Debian als auch für Ubuntu, aber es folgen spezifischere Anweisungen für Ubuntu.

  • 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
    
  • Zeigen Sie alle aktualisierbaren Pakete an

    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 so an, als kämen sie aus dem $ release-updates Repository. Das ist so, wurde mir gesagt, weil Ubuntu-Entwickler Sicherheitsupdates auf das $ release-updates-Repository pushen, um ihre Verfügbarkeit zu beschleunigen.

    Wenn dies der Fall ist, können Sie Folgendes tun, 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. Finden Sie heraus, welche Pakete Sie im Vorfeld aktualisieren und planen Sie Ihre Neustarts / Neustarts. Das Problem hierbei ist, dass, wenn Sie einen Dienst nicht neu starten, möglicherweise eine ältere Version einer Bibliothek (häufigster Grund) verwendet wird, die in den Speicher geladen wurde, bevor Sie ein neues Paket installiert haben, das eine Sicherheitslücke schließt.

    checkrestart -v
    

    Beachten Sie jedoch, dass checkrestart kann Prozesse auflisten, die nicht unbedingt neu gestartet werden müssen. Zum Beispiel kann der PostgreSQL-Dienst seinen Speicherverweis auf eine bereits gelöschte Xlog-Datei behalten, was kein gültiger Grund ist, den Dienst neu zu starten.

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

    Es wird überprüft, ob laufende Prozesse auf einem System gelöschte Bibliotheken weiterhin verwenden, indem Kopien davon im aktiven Speicher verbleiben.

    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



Ich merke erst jetzt diesen Beitrag. Es ist extrem präzise. Vielen Dank (+1) - Danduk82
Woher kommt 'checkrestart'? Ich kann es nicht in Ubuntu Trusty finden. Ich habe "needrestart" gefunden, das aussieht, als würde es in deine Anweisungen passen? - Ben XO
Es kann in Debian-Goodies-Paket gefunden werden: packages.debian.org/wheezy/debian-goodies. Es gibt auch Needestart. Sie können beide auf Xenial finden, indem Sie Folgendes ausführen: $ apt-cache search checkrestart - ILIV
Ich bekomme "E: Konnte die Sperrdatei nicht öffnen / var / lib / dpkg / lock - open (13: Berechtigung verweigert)" auch mit sudo. Ist das etwas, das für eines der Updates oder die von Ihnen bereitgestellten Befehle spezifisch ist? - Nathan Hornby
Höchstwahrscheinlich handelt es sich um eine inkorrekte / abnormale Beendigung von dpkg, die eine gesperrte Sperrdatei zurückgelassen hat. Passiert normalerweise nicht bis z. Die Installation eines Pakets wird nicht erfolgreich abgeschlossen (vollständige Festplatte usw.) Sie können wahrscheinlich keine anderen apt-get- und dpkg-Befehle ausführen, oder? - ILIV


ersetzen /etc/apt/preferences mit den folgenden:

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

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

jetzt ein einfaches apt-get upgrade aktualisiert nur alle Sicherheitsupdates.

Warum (und wie) das funktioniert: Die Preferences-Datei wird alle Pakete von Ubuntu-Distribution auf Priorität 50 setzen, was sie weniger wünschenswert macht als bereits installierte Pakete. Dateien aus dem Sicherheitsrepository erhalten die Standardpriorität (500), sodass sie für die Installation in Betracht gezogen werden. Dies bedeutet, dass nur Pakete, die als wünschenswerter als die derzeit installierten betrachtet werden, Sicherheitsupdates sind. Weitere Informationen zum Pinnen in der Hilfeseite apt_preferences.

Sie können vorübergehend eine bestimmte Distribution für Updates mit der --target-release Option, die mit funktioniert apt-get und aptitude (mindestens), die es Ihnen ermöglichen, bestimmte Versionen zu fixieren, damit sie für ein Upgrade in Frage kommen.

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

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

Dadurch wird apt nach der Einstellungsdatei von einem nicht standardmäßigen Speicherort aus gesucht.

Die als Beispiel angegebene Voreinstellungsdatei gilt nicht für Repositories von Drittanbietern, wenn Sie diese ebenfalls anpinnen möchten apt-cache policy um die erforderlichen Schlüssel zum Pinning einfach zu bestimmen.


46
2017-07-29 04:12



Danke, dass du dir Zeit für eine gründliche Antwort genommen hast. ich denken Ich verstehe, wie es funktioniert. Aber wenn ich die Datei / etc / apt / preferences erstelle und apt-get upgrade ausführe, möchte ich alle Pakete und nicht nur Sicherheitsupdates aktualisieren. Die Listenaktualisierung vorher und nachher ist genau gleich, außer mit / etc / apt / preferences möchte es nicht Leappad aktualisieren, das ich von Source erstellt und "von Hand" mit dpkg installiert habe. Es ist sehr seltsam für mich, aber kann dir etwas bedeuten. - mac9416
Sie können sehen, was mit dem Richtlinienbefehl apt-cache passiert. Wählen Sie eines der Pakete aus, das keine Sicherheitsupdates enthält, und führen Sie es aus apt-cache policy packagename. Dies wird die Prioritäten für verschiedene Versionen auflisten. Sie sollten verschiedene Zeilen und unterschiedliche Prioritäten sehen. Wenn es keine Zeilen mit der Priorität 50 gibt, wirkt sich das Pinning aus irgendeinem Grund nicht auf die fraglichen Pakete aus. - Ressu
Ich war dieser Antwort in der Vergangenheit gefolgt. Heute habe ich herausgefunden, dass aufgrund dieser Antwort 68 Sicherheitsaktualisierungspakete NICHT auf meinem Server installiert waren und nicht als potenzielle Installationskandidaten angezeigt wurden. Das ist keine gute Antwort! - Shade


Folgendes wird in Ubuntu 14.04 LTS bestätigt.

Benutze die unattended-upgrade Paket.

Schau dir die Datei an /etc/apt/apt.conf.d/50unattended-upgrades. Es sollte oben ein Abschnitt sein, der ist:

// 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 es standardmäßig so konfiguriert wurde, dass nur unbeaufsichtigte Upgrades für Sicherheitspakete zugelassen werden.

Ändern Sie die Datei /etc/apt/apt.conf.d/10periodic ähnlich zu:

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 Sicherheitsupdates ausgeführt.

Jetzt manuell ausführen: sudo unattended-upgrade.

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

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


9
2017-10-03 17:18



Gibt es eine Möglichkeit, dies zu einem monatlichen Zeitplan zu machen? - mike.b93
@ mike.b93, ich glaube Einstellung APT::Periodic::Unattended-Upgrade "30"; Würde dies tun - alle 30 Tage. - vcardillo


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

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

Ich habe es nicht getestet, aber in der Theorie würde es nur Updates im Sicherheits-Repo finden und sie anwenden ...


5
2017-07-29 00:00



Ja, das ist eine Möglichkeit. Ich werde es mir ansehen. Ich bin nicht gut in BASH, aber ich kann versuchen, ein Skript zu machen, um es zu tun. - mac9416
OK, ich habe alle außer den Ubuntu Security Repos deaktiviert und ran a sudo apt-get update && sudo apt-get upgrade (Abbrechen, bevor irgendwelche Upgrades durchgeführt wurden). Dann habe ich alle meine Repos wieder aktiviert, ran sudo apt-get updateeund den Update Manager geöffnet. Die als Sicherheitsupdates gekennzeichneten Pakete waren nicht genau was apt-get upgrade gefunden, aber sie waren sehr nah - nah genug für mich. Ich wünschte immer noch, ich wüsste genau, wie Update Manager es macht und wie man dasselbe über die Kommandozeile macht, aber das reicht. Vielen Dank! - mac9416


  • apt-get update: Lies einfach die Einträge im Repository - entsprechend der bestehenden Liste. Benötigt, um zu überprüfen, was neu ist.
  • apt-get upgrade: alle Updates für installierte Pakete ohne Kernel-Module. Keine Versionsaktualisierung
  • apt-get dist-upgrade: Alle Updates für installierte Pakete auch mit Kernel-Modulen. Keine Versionsaktualisierung
  • apt-get mit Parameter -s: nur Test, keine Änderungen durchgeführt.

3
2017-08-02 09:49





Ich kann keine Option in apt-get oder aptitude finden, aber jemand hat die selbe Frage auf SuperUser. Die einzige Antwort ist:

Überprüfen und passen Sie /etc/apt/apt.conf.d/50unattended-upgrade an. Hast du "karmic" durch den Codenamen deines Ubuntu ersetzt?

Keine Antwort, ob das aber funktioniert hat.


0
2017-07-28 23:04



Es scheint, dass die in dieser Wiki-Seite beschriebene Methode davon abhängt, ob das Argument --target-release von aptitude auf <release> -Sicherheit gesetzt wird. Wie das OP dieser Frage installiert diese Methode alle Upgrades, nicht nur Sicherheitsupgrades. Wenn ich die apt-get- und aptitude-man-Seiten lese, glaube ich nicht, dass das Argument --target-release sogar dazu dient, Upgrades auf die Sicherheit zu beschränken, obwohl ich mir nicht sicher bin, was genau ist zum. - mac9416