{"id":7051,"date":"2020-12-26T19:54:37","date_gmt":"2020-12-26T17:54:37","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=7051"},"modified":"2023-07-29T11:20:37","modified_gmt":"2023-07-29T09:20:37","slug":"sicherheitsaktualisierungen-automatisch-einspielen-lassen-auf-dem-raspberry-pi","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/sicherheitsaktualisierungen-automatisch-einspielen-lassen-auf-dem-raspberry-pi\/","title":{"rendered":"Sicherheitsaktualisierungen automatisch einspielen lassen auf dem Raspberry Pi"},"content":{"rendered":"<p>Sicherheitsupdates einzuspielen ist wichtiger denn je. Auch heutzutage wird noch eine Vielzahl der kompromittierten Systeme durch Sicherheitsl\u00fccken angegriffen, die l\u00e4ngst in einem Update behoben wurden. Was trivial klingt, ist teilweise jedoch ein ernstes Problem. Gerade im Bereich der IOT-Ger\u00e4te wird oft propriet\u00e4re Software eingesetzt. Hier ist der Kunde also vollst\u00e4ndig vom Hersteller abh\u00e4ngig. Liefert der Hersteller die Sicherheitsaktualisierungen erst versp\u00e4tet oder \u00fcberhaupt nicht, stellt das Ger\u00e4t eine Gefahr dar &#8211; und der Anwender ist ziemlich machtlos. Gerade bei g\u00fcnstigeren Ger\u00e4ten sind Aktualisierungen vom Hersteller jedoch oft gar nicht vorgesehen, um bei der Preisschlacht mitbieten zu k\u00f6nnen.<\/p>\n<p>Auf einem freien Linux-System wie dem Raspberry Pi haben wir diese Probleme nicht: Man kann ihn selbst aktualisieren, ohne vom Hersteller abh\u00e4ngig zu sein. Sicherheitstechnisch macht es Sinn, entsprechende Updates automatisch zu installieren. Sp\u00e4testens wenn mehrere Raspberrys im Einsatz sind, ist die zeitnahe Installation der Patches sonst nicht mehr zu gew\u00e4hrleisten. Im folgenden Artikel schauen wir uns an, wie dies unter Raspbian realisiert werden kann. Analog ist dies nat\u00fcrlich auch auf jedem Debian-Server m\u00f6glich, sowie dessen zahlreicher Derivaten wie Ubuntu.<\/p>\n<h2 class=\"wp-block-heading\">Autmatische Aktualisierungen mit Unattended-Upgrades<\/h2>\n<p>F\u00fcr dieses verbreitete Problem gibt es bereits eine L\u00f6sung: Das Paket <strong>unattended-upgrades<\/strong> pr\u00fcft automatisch regelm\u00e4\u00dfig auf Aktualisierungen und kann diese automatisch installieren. Zun\u00e4chst m\u00fcssen wir das Paket daher \u00fcber die Paketverwaltung installieren:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo apt-get install unattended-upgrades<\/code><\/pre>\n<p>Nach der Installation gilt es auszuw\u00e4hlen, <em>welche<\/em> Aktualisierungen automatisch installiert werden sollen. Auf Wunsch lassen sich auch alle Updates ohne zutun einspielen. Hier ist allerdings abzuw\u00e4gen, ob dieser Mehrwert den m\u00f6glichen Problemen \u00fcberwiegt. Das Beschr\u00e4nken auf Sicherheitsupdates ist meiner Meinung nach ein sinnvoller Kompromiss. Funktionelle Updates kann man dann von Zeit zu Zeit h\u00e4ndisch installieren. Die automatischen Sicherheitsaktualisierungen aktivieren wir mit folgendem Befehl:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo dpkg-reconfigure -plow unattended-upgrades<\/code><\/pre>\n<p>Kurz darauf \u00f6ffnet sich ein Dialogfenster, welches mit <strong>Ja<\/strong> zu best\u00e4tigen ist:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"381\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13-1024x381.png\" alt=\"\" class=\"wp-image-7052\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13-1024x381.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13-300x112.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13-768x286.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13-70x26.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2020\/12\/grafik-13.png 1050w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<h2 class=\"wp-block-heading\">Konfiguration: Was passiert im Hintergrund?<\/h2>\n<p>Die Konfigurationsdateien liegen in <strong>\/etc\/apt\/apt.conf.d\/<\/strong>. Durch das Aktivieren der automatischen Updates wurden dort bestimmte Konfigurationsdateien angepasst. In der Datei <strong>\/etc\/apt\/apt.conf.d\/20auto-upgrades <\/strong>wird das Programm grunds\u00e4tzlich aktiviert:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ cat \/etc\/apt\/apt.conf.d\/20auto-upgrades\nAPT::Periodic::Update-Package-Lists &quot;1&quot;;\nAPT::Periodic::Unattended-Upgrade &quot;1&quot;;<\/code><\/pre>\n<p><strong>Update-Package-Lists<\/strong> aktualisiert die Paketlisten, wie man es h\u00e4ndisch mit dem Befehl <strong>apt-get update<\/strong> durchf\u00fchren w\u00fcrde. <strong>Unattended-Upgrade<\/strong> steht f\u00fcr die tats\u00e4chliche Aktualisierung der Pakete mit <strong>apt-get upgrade<\/strong>. Die Werte geben jeweils den Intervall in Tagen an. Standardm\u00e4\u00dfig wird also t\u00e4glich auf neue Pakete gepr\u00fcft und m\u00f6glicherweise existierende Updates installiert.<\/p>\n<h2 class=\"wp-block-heading\">Nur Sicherheitsupdates automatisch einspielen<\/h2>\n<p>Doch was genau wird aktualisiert? Dies l\u00e4sst sich in <strong>\/etc\/apt\/apt.conf.d\/50unattended-upgrades<\/strong> festlegen. <strong>Unattended-Upgrade::Origins-Pattern<\/strong> filtert die Pakete, welche vom Programm automatisch geupdated werden. Standardm\u00e4\u00dfig enth\u00e4lt sie zwei Eintr\u00e4ge:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">&quot;origin=Debian,codename=${distro_codename},label=Debian&quot;;\n&quot;origin=Debian,codename=${distro_codename},label=Debian-Security&quot;;<\/code><\/pre>\n<p>Dies bezieht also auch <em>normale<strong> <\/strong><\/em>Pakete mit ein. Um nur Sicherheitsupdates automatisiert einzuspielen, m\u00fcssen wir alle Zeilen au\u00dfer <strong>Debian-Security<\/strong> auskommentieren. Im hier vorliegenden Stand also die oberste Zeile. Auskommentiert wird mit zwei \/\/. Damit haben wir die minimale Konfiguration abgeschlossen, um t\u00e4glich nach Sicherheitsaktualisierungen zu suchen und diese bei Vorhandensein automatisch zu installieren.<\/p>\n<h2 class=\"wp-block-heading\">Weitere sinnvolle Einstellungsm\u00f6glichkeiten<\/h2>\n<p>Das Tool beherrscht aber noch mehr n\u00fctzliche Funktionen. Es empfiehlt sich, die auskommentierten Beispiele in der Datei <strong>\/etc\/apt\/apt.conf.d\/50unattended-upgrades<\/strong> anzusehen. Im folgenden ein Auszug.<\/p>\n<p><strong>Unattended-Upgrade::InstallOnShutdown &#8222;true&#8220;;<\/strong><\/p>\n<p>Setzt man dies auf true, werden die Updates nicht sofort installiert. Sondern beim n\u00e4chsten Neustart. Dies kann sinnvoll sein um zu verhindern, dass bei einem h\u00e4ndischen Neustart eine ggf. laufende Installation unterbrochen wird.<\/p>\n<p>Bei Aktivierung wird Empfohlen, die maximiale Wartezeit in der Datei \/etc\/systemd\/logind.conf zu erh\u00f6hen. Die Direktive lautet <strong>InhibitDelayMaxSec<\/strong>, sie kann z.B. auf 15 Min gesetzt werden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">InhibitDelayMaxSec=900<\/code><\/pre>\n<p><strong>Unattended-Upgrade::Remove-Unused-Dependencies &#8222;true&#8220;;<\/strong>\r\n<strong>Unattended-Upgrade::Remove-New-Unused-Dependencies &#8222;true&#8220;;<\/strong><\/p>\n<p>F\u00fchrt Aufr\u00e4umarbeiten aus, nachdem eine Aktualisierung erfolgt ist. Dies entspricht der Ausf\u00fchrung von apt-get autoremove.<\/p>\n<p><strong>Unattended-Upgrade::Automatic-Reboot &#8222;true&#8220;;\r\nUnattended-Upgrade::Automatic-Reboot-Time &#8222;02:00&#8220;;<\/strong><\/p>\n<p>Teilweise ist ein Neustart erforderlich, damit Updates angewendet werden k\u00f6nnen. Beispielsweise bei Kernel-Updates. Im Falle von Sicherheitsupdates macht es Sinn, das System automatisch neu zu starten. In diesem Falle sollte man jedoch unbedingt eine Zeit festlegen. Ansonsten startet das System sofort neu, was u.u. dann tags\u00fcber w\u00e4hrend der Verwendung geschieht.<\/p>\n<p><strong>Unattended-Upgrade::Mail &#8222;root&#8220;;<\/strong><\/p>\n<p>Sendet eine E-Mail an den angegebenen Benutzer, falls es bei einer Aktualisierung zu Problemen kommt. Daf\u00fcr muss ein lokaler Mailhandler installiert sein. Raspbian liefert hierf\u00fcr automatisch Postfix aus.<\/p>\n<h2 class=\"wp-block-heading\">Testlauf<\/h2>\n<p>Wir k\u00f6nnen den Durchlauf mit folgendem Befehl simulieren:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo unattended-upgrades --dry-run<\/code><\/pre>\n<p>Durch den Probelauf (<strong>&#8211;dry-run<\/strong>) werden m\u00f6glicherweise gefundene Updates nicht installiert. Wir erhalten diese aber angezeigt. Falls keine ausstehenden Aktualisierungen verf\u00fcgbar sind, erfolgt keine Ausgabe. In der Logdatei <strong>\/var\/log\/unattended-upgrades\/unattended-upgrades.log<\/strong> k\u00f6nnen wir die Infolog sehen.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">2020-12-26 16:54:22,789 INFO Checking if system is running on battery is skipped. Please install powermgmt-base package to check power status and skip installing updates when the system is running on battery.\n2020-12-26 16:54:22,821 INFO Initial blacklist :\n2020-12-26 16:54:22,822 INFO Initial whitelist:\n2020-12-26 16:54:22,823 INFO Skript f\u00fcr automatische Systemaktualisierung wird gestartet\n2020-12-26 16:54:22,824 INFO Erlaubte Urspr\u00fcnge sind: origin=Debian,codename=buster,label=Debian-Security\n2020-12-26 16:54:29,127 INFO Es wurden keine Pakete gefunden, von denen eine automatische Systemaktualisierung durchgef\u00fchrt werden kann und kein ausstehendes automatisches Entfernen.<\/code><\/pre>\n<p>Um die korrekte Funktion sicherzustellen, empfiehlt es sich, die Logdatei einige Zeit sp\u00e4ter aufzurufen. Im besten Falle wird sie regelm\u00e4\u00dfig gepr\u00fcft. Zu Testzwecken und der Fehlersuche kann es hilfreich sein, die Parameter <strong>&#8211;verbose<\/strong> f\u00fcr ausf\u00fchrlichere Protokolle sowie ggf. <strong>&#8211;debug<\/strong> f\u00fcr Debug-Meldungen (noch ausf\u00fchrlicher) zu verwenden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo unattended-upgrades --dry-run --debug --verbose<\/code><\/pre>\n<p>Je nach aktivierten Funktionen und verf\u00fcgbaren Aktualisierungen existieren bis zu drei Logdateien im<strong> \/var\/log\/unattended-upgrades<\/strong> Ordner:<\/p>\n<ul class=\"wp-block-list\">\n<li><em>unattended-upgrades-dpkg.log<\/em>: Protokoll f\u00fcr DPKG-Pakete<\/li>\n<li><em>unattended-upgrades.log<\/em>: Zeigt aktualisierte Pakete und Fehlermeldungen, falls Probleme aufgetreten sind<\/li>\n<li><em>unattended-upgrades-shutdown.log<\/em>: Infos zum automatisierten Neustart, falls ein Neustart notwendig war und dies aktiviert ist.<\/li>\n<\/ul>\n<p>Bildicon: Freepik von Flaticon.com<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sicherheitsupdates einzuspielen ist wichtiger denn je. Auch heutzutage wird noch eine Vielzahl der kompromittierten Systeme durch Sicherheitsl\u00fccken angegriffen, die l\u00e4ngst in einem Update behoben wurden. Was trivial klingt, ist teilweise jedoch ein ernstes Problem. Gerade im Bereich der IOT-Ger\u00e4te wird oft propriet\u00e4re Software eingesetzt. Hier ist der Kunde also vollst\u00e4ndig vom Hersteller abh\u00e4ngig. Liefert der &#8230;<\/p>\n","protected":false},"author":5,"featured_media":7054,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[391,671],"tags":[843,56,387],"class_list":["post-7051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-server","category-raspberry-pi","tag-aktualisierungen","tag-sicherheit","tag-update"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=7051"}],"version-history":[{"count":3,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7051\/revisions"}],"predecessor-version":[{"id":10779,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7051\/revisions\/10779"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/7054"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=7051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=7051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=7051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}