<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Netz - Rettung - Recht (Artikel mit Tag debian)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Aus dem Leben eines Szlauszafs</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Fri, 03 Sep 2021 06:31:30 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Aus dem Leben eines Szlauszafs</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Von Debian Stretch zu Buster - Teil 2</title>
    <link>https://netz-rettung-recht.de/archives/2309-Von-Debian-Stretch-zu-Buster-Teil-2.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2309-Von-Debian-Stretch-zu-Buster-Teil-2.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2309</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2309</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;&lt;a href=&quot;https://netz-rettung-recht.de/archives/2250-Von-Debian-Stretch-zu-Buster.html&quot; title=&quot;&quot;&gt;Vor rund einem Jahr&lt;/a&gt; habe ich meinen größten Server auf Debian &lt;em&gt;Buster&lt;/em&gt; geupgradet; über Ostern habe ich die restlichen vier Maschinen nachgezogen, so dass nur noch mein Homeserver und ein Altfall bleiben.&lt;/p&gt;

&lt;p&gt;Wesentlich neues hat sich dabei nicht ergeben; ich kann im Prinzip auf den vorherigen Eintrag Bezug nehmen. Insgesamt liefen die Upgrades erfreulich glatt.&lt;/p&gt;

&lt;p&gt;&lt;!-- s9ymdb:835 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;1920&quot; height=&quot;1080&quot;  src=&quot;https://netz-rettung-recht.de/uploads/articles/2020/debian-buster-loginscreen.png&quot; title=&quot;Debian Buster: login screen&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;h3 id=&quot;notwendige-nderungen-caveats&quot;&gt;Notwendige Änderungen / Caveats&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;phpMyAdmin&lt;/strong&gt; ist in Debian &lt;em&gt;Buster&lt;/em&gt; nicht enthalten, kann aber aus den Backports installiert bzw. geupdatet werden, das ist also kein Problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bei &lt;strong&gt;Spamassassin&lt;/strong&gt; ändert sich die Art und Weise der Aktivierung; das &lt;code&gt;ENABLED&lt;/code&gt;-Flag aus &lt;code&gt;/etc/default/spamassassin&lt;/code&gt; entfällt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;logrotate&lt;/strong&gt; wird nicht mehr als Cronjob, sondern als &lt;em&gt;systemd-Timer&lt;/em&gt; ausgeführt; ich habe mich (wie im verlinkten Beitrag beschrieben, ungeachtet der Vorschläge dort in den Kommentaren) erneut für eine Änderung der &lt;em&gt;Timer-Unit&lt;/em&gt; entschieden, so dass alle Maschinen auf demselben Stand sind.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PHP 7.3&lt;/strong&gt; ersetzt &lt;em&gt;PHP 7.0&lt;/em&gt;; dementsprechend sind, wie im verlinkten Beitrag beschrieben, die PHP-FPM-Konfigurationen anzupassen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wie immer möchte &lt;strong&gt;debsecan&lt;/strong&gt; per &lt;code&gt;dpkg-reconfigure debsecan&lt;/code&gt; das aktuell installierte Release beigebogen bekommen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;su&lt;/code&gt; behält nunmehr das Environment des bisherigen Users, insbesondere &lt;code&gt;PATH&lt;/code&gt;, bei, hat also standardmäßig bspw. &lt;code&gt;/usr/sbin/&lt;/code&gt; nicht mehr im Pfad. Der Aufruf mit &lt;code&gt;su -l&lt;/code&gt; hilft.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mit dem angeblich zu der Version aus &lt;em&gt;Stretch&lt;/em&gt; nicht kompatiblen &lt;strong&gt;duply&lt;/strong&gt; und den in den Hinweise hervorgehobenen Änderungen an &lt;em&gt;gnupg2&lt;/em&gt;, &lt;em&gt;OpenSSH&lt;/em&gt; und &lt;em&gt;OpenSSL&lt;/em&gt; hatte ich keine Schwierigkeiten.&lt;/p&gt;

&lt;h3 id=&quot;notwendige-nderungen-an-konfigurationsdateien&quot;&gt;Notwendige Änderungen an Konfigurationsdateien&lt;/h3&gt;

&lt;p&gt;Insbesondere folgende Konfigurationsdateien waren bei mir von Änderungen betroffen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/conf.d/10-mail.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/conf.d/10-ssl.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/mysql/mariadb.conf.d/50-server.cnf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/munin/plugin-conf.d/munin-node&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/news/inn.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/news/incoming.conf&lt;/code&gt; (nur Kommentare)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/oidentd.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/systemd/timesyncd.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Das ist natürlich eine sehr spezifische Aufzählung, hängt sie doch von der installierten Software und von vorgenommenen Änderungen an deren Konfiguration ab. Erfreulicherweise war aber wenig zu tun.&lt;/p&gt;

&lt;p&gt;Auch sonst sind mir bislang keine Schwierigkeiten aufgefallen.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Nachträglich veröffentlicht im September 2021]&lt;/em&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/0b150e2bc8b24c17a98a2c7be47bffee&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 07 Apr 2021 14:45:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2309-guid.html</guid>
    <category>buster</category>
<category>debian</category>

</item>
<item>
    <title>Von Debian Stretch zu Buster</title>
    <link>https://netz-rettung-recht.de/archives/2250-Von-Debian-Stretch-zu-Buster.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2250-Von-Debian-Stretch-zu-Buster.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2250</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2250</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Hatte ich &lt;a href=&quot;https://netz-rettung-recht.de/archives/2245-Von-Jessie-zu-Stretch-erneut.html&quot; title=&quot;&quot;&gt;demletzt&lt;/a&gt; noch von diversen Updates von Debian &lt;em&gt;Oldoldstable&lt;/em&gt; auf Debian &lt;em&gt;Oldstable&lt;/em&gt; berichtet, habe ich nunmehr meinen Hauptserver auf das aktuelle Debian 10&amp;#160;&lt;em&gt;Buster&lt;/em&gt; geupdatet. Das lief weitgehend problemlos; der dennoch entstandene Aufwand hatte mit den Betriebssystemupdate nichts zu tun.&lt;/p&gt;

&lt;p&gt;&lt;a  class=&quot;serendipity_image_link&quot; title=&quot;Debian Buster: login screen&quot;  rel=&#039;lightbox[2250]&#039; href=&#039;https://netz-rettung-recht.de/uploads/articles/2020/debian-buster-loginscreen.png&#039;&gt;&lt;!-- s9ymdb:835 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;400&quot; height=&quot;225&quot;  src=&quot;https://netz-rettung-recht.de/uploads/articles/2020/debian-buster-loginscreen.serendipityThumb.png&quot; title=&quot;Debian Buster: login screen&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;hinweise-zu-bestimmten-softwarepaketen&quot;&gt;Hinweise zu bestimmten Softwarepaketen&lt;/h3&gt;

&lt;p&gt;Ein paar Notizen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;phpMyAdmin&lt;/strong&gt; ist in Debian &lt;em&gt;Buster&lt;/em&gt; nicht enthalten, kann aber aus den Backports installiert bzw. geupdatet werden, das ist also kein Problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bei &lt;strong&gt;Spamassassin&lt;/strong&gt; ändert sich die Art und Weise der Aktivierung; das &lt;code&gt;ENABLED&lt;/code&gt;-Flag aus &lt;code&gt;/etc/default/spamassassin&lt;/code&gt; entfällt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dovecot&lt;/strong&gt; bekommt per Default ein selbstsigniertes SSL-Zertifikat; wenn man schon selbst eines hat, will man diese Änderung natürlich nicht.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Angeblich soll &lt;strong&gt;duply&lt;/strong&gt; zu der Version aus &lt;em&gt;Stretch&lt;/em&gt; nicht kompatibel sein, da haben sich bei mir aber keine Probleme ergeben.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wie immer möchte &lt;strong&gt;debsecan&lt;/strong&gt; per &lt;code&gt;dpkg-reconfigure debsecan&lt;/code&gt; das aktuell installierte Release beigebogen bekommen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;su&lt;/code&gt; behält nunmehr das Environment des bisherigen Users, insbesondere &lt;code&gt;PATH&lt;/code&gt;, bei, hat also standardmäßig bspw. &lt;code&gt;/usr/sbin/&lt;/code&gt; nicht mehr im Pfad. Der Aufruf mit &lt;code&gt;su -&lt;/code&gt; hilft.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Die in den NEWs hervorgehobenen Änderungen an &lt;em&gt;gnupg2&lt;/em&gt;, &lt;em&gt;OpenSSH&lt;/em&gt; und &lt;em&gt;OpenSSL&lt;/em&gt; haben mich nicht betroffen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;-logrotate-nicht-mehr-als-cronjob-sondern-als-systemd-timer-&quot;&gt;&lt;em&gt;logrotate&lt;/em&gt; nicht mehr als Cronjob, sondern als &lt;em&gt;systemd-Timer&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Wenn man &lt;em&gt;Exim&lt;/em&gt; als MTA verwendet und weiterhin über den bei Debian inkludierten Cronjob den dort generierten täglichen Report erhalten will, muss man dessen Erzeugung auf den Zeitpunkt der Logrotation abstellen. Bei &lt;em&gt;Stretch&lt;/em&gt; - und zuvor - ist das kein Problem, weil sowohl die Erzeugung des Reports als auch die Logrotation über Cronjobs in &lt;code&gt;/etc/cron.daily&lt;/code&gt; erfolgen, die in alphabetischer Reihenfolge ausgeführt werden, und da kommt &lt;code&gt;exim4-base&lt;/code&gt; vor &lt;code&gt;logrotate&lt;/code&gt;. Debian &lt;em&gt;Buster&lt;/em&gt; aber setzt bei Logrotate stattdessen auf einen &lt;em&gt;systemd-Timer&lt;/em&gt;; ist &lt;em&gt;systemd&lt;/em&gt; auf dem System aktiv, wird der Cronjob deaktiviert:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
    exit 0
fi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Die &lt;em&gt;Timer-Unit&lt;/em&gt; für &lt;em&gt;logrotate&lt;/em&gt; findet sich in &lt;code&gt;/lib/systemd/system/logrotate.timer&lt;/code&gt; und wird täglich ausgeführt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
AccuracySec=12h
Persistent=true

[Install]
WantedBy=timers.target
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Bedauerlicherweise läuft &lt;code&gt;cron.daily&lt;/code&gt; bei Debian standardmäßig um 06.30 Uhr, und der &lt;em&gt;systemd-Timer&lt;/em&gt; bereits um Mitternacht. Daher enthält der &lt;em&gt;Exim&lt;/em&gt;-Report nur noch sechseinhalb von vierundzwanzig Stunden, und zudem die eher wenig aktiven Nachtzeiten.&lt;/p&gt;

&lt;p&gt;Für dieses Problem gibt es verschiedene Lösungen; man kann den Zeitpunkt von &lt;code&gt;cron.daily&lt;/code&gt; verlegen, den &lt;em&gt;Exim&lt;/em&gt;-Cronjob auslagern und auf einen eigenen Zeitpunkt verlegen und was der Dinge mehr sind. Ich habe mich stattdessen dazu entschieden, den Zeitpunkt der Logrotation zu verlegen, und zwar &amp;#8220;hinter&amp;#8221; &lt;code&gt;cron.daily&lt;/code&gt;. Das erscheint mir aus verschiedenen Gründen vorzugswürdig: der Eingriff betrifft nur ein Element (&lt;em&gt;logrotate&lt;/em&gt;) und nicht den Zeitpunkt zur Ausführung zentraler Systemdienste, er verschiebt keine bei Debian mitgelieferten Dateien an einen anderen Ort, und der Gedanke ist nicht fernliegend, dass auch andere tägliche Cronjobs möglicherweise damit rechnen, dass ihnen die Logs nicht vor der Nase wegrotiert werden.&lt;/p&gt;

&lt;p&gt;Technisch ist das minimalinvasiv machbar: &lt;em&gt;systemd-Units&lt;/em&gt; in &lt;code&gt;/etc/systemd&lt;/code&gt; haben Vorrang vor denen in &lt;code&gt;/lib/systemd&lt;/code&gt;; es genügt also, einen &lt;code&gt;/etc/systemd/system/logrotate.timer&lt;/code&gt; mit angepasstem Inhalt zu erstellen, indem man &lt;code&gt;/lib/systemd/system/logrotate.timer&lt;/code&gt; nach dort kopiert und die Zeile &lt;code&gt;OnCalendar&lt;/code&gt; anpasst:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;OnCalendar=*-*-* 06:35:00
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das führt die Logrotation nunmehr täglich um 06.35 Uhr, also fünf Minuten nach &lt;code&gt;cron.daily&lt;/code&gt;, aus. Mit &lt;code&gt;systemctl reenable logrotate.timer&lt;/code&gt; wird die Änderung übernommen (d.h. der Symlink der &lt;em&gt;Timer-Unit&lt;/em&gt; gelöscht und - auf die neue, vorrangige Einheit - neu erstellt, mit &lt;code&gt;systemctl list-timers&lt;/code&gt; kann man sich den richtigen Zeitpunkt der Timer-Ausführung bestätigen lassen.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-an-konfigurationsdateien&quot;&gt;Änderungen an Konfigurationsdateien&lt;/h3&gt;

&lt;p&gt;Insbesondere folgende Konfigurationsdateien waren bei mir von Änderungen betroffen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/conf.d/10-mail.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/conf.d/10-ssl.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/mysql/mariadb.conf.d/50-server.cnf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/munin/plugin-conf.d/munin-node&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Das ist natürlich eine sehr spezifische Aufzählung, hängt sie doch von der installierten Software und von vorgenommenen Änderungen an deren Konfiguration ab. Sie ist aber m.E. erfreulich übersichtlich; es gab praktisch nichts zu tun.&lt;/p&gt;

&lt;h4 id=&quot;umstellung-von-php-7-0-auf-php-7-3&quot;&gt;Umstellung von PHP 7.0 auf PHP 7.3&lt;/h4&gt;

&lt;p&gt;Mit &lt;em&gt;Buster&lt;/em&gt; kommt PHP 7.3; man will also ggf. zum einen PHP 7.0 runterwerfen und muss in jedem Fall die &lt;em&gt;PHP-FPM&lt;/em&gt;-Konfiguration mal wieder anpassen, weil die Konfigurationsdateien für PHP 7.3 &amp;#8220;natürlich&amp;#8221; in einem anderen Verzeichnis als die von PHP 7.0 liegen. Andererseits hat das den Vorteil, dass man PHP 7.0 zunächst auch weiterbetreiben kann, wenn man das möchte, oder beide Versionen parallel betrieben werden können.&lt;/p&gt;

&lt;p&gt;Für die notwendigen Änderungen für den Wechsel kann ich auf meinen Beitrag zum Update auf Debia &lt;em&gt;Stretch&lt;/em&gt; verweisen; es sind dieselben Schritte zu gehen wie beim Update von PHP 5.&lt;/p&gt;

&lt;p&gt;Der größte Aufwand waren dann tatsächlich Umstellungen an PHP-Scripts - und der Kampf mit der aktuellen Version von &lt;em&gt;nanoc&lt;/em&gt;, meinem &lt;em&gt;static site compiler&lt;/em&gt;. (&amp;#8220;Kampf&amp;#8221; ist vielleicht etwas zuviel gesagt; ich habe primär einen Fehler beim Updaten der Ruby-Gems gemacht und hatte dann noch einige Anpassungen in eher speziellen Modulen vorzunehmen. Der Aufwand war v.a. deshalb größer, weil dieses Ökosystem für mich noch unvertraut ist.)&lt;/p&gt;

&lt;h3 id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h3&gt;

&lt;p&gt;Jedenfalls bei diesem Host war das Update unter dem Strich wirklich ereignislos. Möglicherweise sieht das anderswo noch anders aus, wenn bspw. INN und Mailman betroffen sind. Andererseits erlaubt &lt;em&gt;Buster&lt;/em&gt; es, einmal &lt;em&gt;Mailman 3&lt;/em&gt; auszuprobieren &amp;#8230;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/3a25f2f03d2444f0bed5bffec2edfe9e&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 19 May 2020 06:00:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2250-guid.html</guid>
    <category>buster</category>
<category>debian</category>

</item>
<item>
    <title>Von Jessie zu Stretch - erneut</title>
    <link>https://netz-rettung-recht.de/archives/2245-Von-Jessie-zu-Stretch-erneut.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2245-Von-Jessie-zu-Stretch-erneut.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2245</wfw:comment>

    <slash:comments>15</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2245</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ja, ich bin spät dran - bereits Mitte letzten Jahres wurde Debian 10&amp;#160;&lt;em&gt;Buster&lt;/em&gt; veröffentlicht, aber die meisten meiner Server liefen noch unter Debian 8&amp;#160;&lt;em&gt;Jessie&lt;/em&gt;, mit Ausnahme des neuesten Zugangs, der bereits unter &lt;em&gt;Stretch&lt;/em&gt; installiert wurde, und meines heimischen Servers, den ich bereits vor zweieinhalb Jahren (!) &lt;a href=&quot;https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html&quot; title=&quot;&quot;&gt;geupdatet&lt;/a&gt; hatte (dass das so lange her ist und die anderen Updates schon so lange auf meiner Todo-Liste stehen, war mir gar nicht mehr bewusst).&lt;/p&gt;

&lt;p&gt;Ich hatte mir im Prinzip für jede Maschine einen (halben) Tag reserviert, aber der Aufwand hielt sich in erstaunlichen, sehr angenehmen Grenzen. Meine Hinweise, die ich bereits vor zweieinhalb Jahren im Blog notiert hatte, kann ich demnach recht kurz ergänzen.&lt;/p&gt;

&lt;p&gt;&lt;a  class=&quot;serendipity_image_link&quot; title=&quot;Debian Stretch&quot;  rel=&#039;lightbox[2245]&#039; href=&#039;https://netz-rettung-recht.de/uploads/articles/2020/debian-stretch-loginscreen.png&#039;&gt;&lt;!-- s9ymdb:833 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;1920&quot; height=&quot;1080&quot;  src=&quot;https://netz-rettung-recht.de/uploads/articles/2020/debian-stretch-loginscreen.png&quot; title=&quot;Debian Stretch&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;konkrete-einzelfallprobleme&quot;&gt;Konkrete Einzelfallprobleme&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Wie schon damals geschildert gab es Probleme beim Upgrade von &lt;strong&gt;fail2ban&lt;/strong&gt;, weil sich die Bezeichnungen einiger Filter geändert haben, die noch unter der alten Bezeichnung in &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; eingebunden waren. Dadurch endete das &lt;code&gt;dist-upgrade&lt;/code&gt; später mit einem Fehlercode und musste neu gestartet werden, um die restlichen Pakete zu initialisieren. Nach dem ersten Durchlauf habe ich das dadurch behoben, dass ich schon vor dem Upgrade statt des Filters &lt;code&gt;ssh&lt;/code&gt; den Filter &lt;code&gt;sshd&lt;/code&gt; und statt &lt;code&gt;apache&lt;/code&gt; den &lt;code&gt;apache-auth&lt;/code&gt; eingebunden habe.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auch das Upgrade von &lt;strong&gt;phpMyAdmin&lt;/strong&gt; verlief nicht störungsfrei; das Update der Datenbanken lief in einen Fehler (die Datenbankdateien seien korrumpiert) und ein entsprechendes debconf-Prompt. Es stellte sich heraus, dass ein Aufruf von &lt;code&gt;/usr/bin/mysql_upgrade&lt;/code&gt; notwendig war, den ich dann in einem anderen Terminal vorgenommen habe; danach lief das Upgrade durch. Bei den anderen Servern habe ich dann schon beim ersten Prompt wegen des Updates der &lt;em&gt;phpMyAdmin&lt;/em&gt;-Datenbanken in einem anderen Terminal &lt;code&gt;/usr/bin/mysql_upgrade&lt;/code&gt; gestartet; das Upgrade lief dann problemlos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In manchen Fällen wurde der mySQL-Server nach dem Upgrade nicht richtig neu gestartet. Ein &lt;code&gt;service mysql restart&lt;/code&gt; behebt das, wenn man nicht ohnehin zeitnah rebootet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solche Probleme sind bei Debian-Updates ungewöhnlich, waren aber gut managebar; dafür lief an der Configfile-Front alles sehr schön, es waren diesmal kaum Änderungen vorzunehmen.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-an-konfigurationsdateien&quot;&gt;Änderungen an Konfigurationsdateien&lt;/h3&gt;

&lt;p&gt;Bei mir bekamen u.a. folgende Konfigurationsdateien größere und kleinere Änderungen mit, die ich dann mit eigenen Änderungen zu konsolidieren hatte (was aber wegen des geringen Umfangs sehr einfach und flott ging):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/apache2/mods-available/userdir.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/dhcp/dhclient.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/munin/plugin-conf.d/munin-node&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/news/inn.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/news/innfeed.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/vim/vimrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/phpmyadmin/apache.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Das ist natürlich eine sehr spezifische Aufzählung, hängt sie doch von der installierten Software und von vorgenommenen Änderungen an deren Konfiguration ab. Sie ist aber m.E. erfreulich übersichtlich; so wenig Nacharbeit hatte ich selten.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-f-r-bestimmte-softwarepakete&quot;&gt;Änderungen für bestimmte Softwarepakete&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Der Account &lt;strong&gt;news&lt;/strong&gt; bekam &lt;code&gt;/usr/sbin/nologin&lt;/code&gt; als Shell verpasst; das mag ich nicht, ich arbeite damit häufiger und setze die Shell daher auf die Bash. Das ist im Hinblick auf externe Logins kein Problem, weil ich die passwortbasierte Anmeldung per SSH deaktiviert habe und der User &lt;em&gt;news&lt;/em&gt; keine &lt;code&gt;authorized_keys&lt;/code&gt; hat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;duply&lt;/strong&gt; und &lt;strong&gt;duplicity&lt;/strong&gt; benötigen, wie schon damals geschildert, &lt;code&gt;GPG_OPTS=&#039;--pinentry-mode loopback&#039;&lt;/code&gt;. Wer - wie ich - damit &lt;a href=&quot;https://netz-rettung-recht.de/archives/1699-Backups-in-die-Cloud-duply-und-S3.html&quot; title=&quot;&quot;&gt;in die Amazon-Cloud (S3) sichert&lt;/a&gt;, muss zudem ggf. &lt;code&gt;TARGET_USER&lt;/code&gt; in der Konfiguration durch &lt;code&gt;export AWS_ACCESS_KEY_ID&lt;/code&gt; und &lt;code&gt;TARGET_PASS&lt;/code&gt; durch &lt;code&gt;export AWS_SECRET_ACCESS_KEY&lt;/code&gt; ersetzen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ggf. braucht &lt;strong&gt;phpMyAdmin&lt;/strong&gt; ein längeres &lt;code&gt;blowfish_secret&lt;/code&gt; als früher, das man in &lt;code&gt;/var/lib/phpmyadmin/blowfish_secret.inc.php&lt;/code&gt; setzen kann.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wie immer möchte &lt;strong&gt;debsecan&lt;/strong&gt; per &lt;code&gt;dpkg-reconfigure debsecan&lt;/code&gt; das aktuell installierte Release beigebogen bekommen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;neue-software-und-ge-nderte-defaults&quot;&gt;Neue Software und geänderte Defaults&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;vim&lt;/strong&gt; hat diese furchtbare Maussteuerung bekommen, die man - wie schon beschrieben - aufgrund der Reihenfolge, in der die Konfigurationsdateien geladen werden, nicht so einfach deaktivieren kann, wie man das denken sollte. Entweder braucht jeder Nutzer (!) eine (leere) &lt;code&gt;~/.vimrc&lt;/code&gt;, oder man klemmt das Laden der &lt;code&gt;defaults.vim&lt;/code&gt; in &lt;code&gt;/etc/vim/vimrc&lt;/code&gt; in der dort beschriebenen Weise ab. Ich tat letzteres.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Der &lt;strong&gt;INN&lt;/strong&gt; setzt jetzt statt &lt;em&gt;NNTP-Posting-Host&lt;/em&gt;, &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; und &lt;em&gt;X-Trace&lt;/em&gt; die Header &lt;em&gt;Injection-Info&lt;/em&gt; und ggf. auch &lt;em&gt;Injection-Date&lt;/em&gt;; ich habe die damit verbundenen Änderungen bereits 2017&amp;#160;&lt;a href=&quot;https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html&quot; title=&quot;&quot;&gt;beschrieben&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wer seinen &lt;strong&gt;INN&lt;/strong&gt; von einer anderen Maschine aus bspw. per &lt;em&gt;nntpsend&lt;/em&gt; füttert, muss darauf achten, dass die Gegenstelle (also quasi der Client) in der &lt;code&gt;passwd.nntp&lt;/code&gt; nunmehr zwingend einen Usernamen gesetzt haben muss, auch wenn der gar nicht ausgewertet wird; dies entspricht der Doku. Aus &lt;code&gt;news.szaf.org::SECRETPASS&lt;/code&gt; muss also &lt;code&gt;news.szaf.org:blafasel:SECRETPASS&lt;/code&gt; werden, sonst kann der &amp;#8220;Client&amp;#8221; sich nicht mehr anmelden,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mit Debian &lt;em&gt;Stretch&lt;/em&gt; kommt &lt;em&gt;PHP7&lt;/em&gt;; ich habe daher auch direkt komplett von &lt;em&gt;PHP5&lt;/em&gt; auf &lt;em&gt;PHP7&lt;/em&gt; umgestellt.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;umstellung-von-php-5-auf-php-7&quot;&gt;Umstellung von PHP 5 auf PHP 7&lt;/h4&gt;

&lt;p&gt;In &lt;a href=&quot;https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html&quot; title=&quot;&quot;&gt;meiner Konfiguration&lt;/a&gt; waren dafür folgende Änderungen erforderlich:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt install php7.0-fpm
cp /etc/apache2/conf-available/php5-fpm.conf /etc/apache2/conf-available/php7.0-fpm.conf
vim /etc/apache2/conf-available/php7.0-fpm.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dort wird dann die Zeile&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;Proxy &quot;unix:/var/run/php5-fpm.sock|fcgi://php-fpm&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;geändert auf&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;Proxy &quot;unix:/run/php/php7.0-fpm.sock|fcgi://php-fpm&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Weiter geht es mit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a2disconf php5-fpm
a2enconf php7.0-fpm
service apache2 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ggf. sind auch benutzerbezogene Konfigurationen anzupassen.&lt;/p&gt;

&lt;p&gt;Schließlich kann man &lt;em&gt;PHP5&lt;/em&gt; abräumen, bspw. mit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt remove php5-fpm php5 php5-gd php5-mysql php5-mcrypt php5-imagick php5-curl; apt autoremove
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das hängt natürlich davon ab, was man so alles installiert hatte.&lt;/p&gt;

&lt;p&gt;Und dann kommt ggf. der größte Aufwand: alte PHP-Scripts so anzupassen, dass sie mit &lt;em&gt;PHP7&lt;/em&gt; laufen &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h3&gt;

&lt;p&gt;Echte Arbeit ist ggf. die Umstellung vorhandener PHP-Scripts von &lt;em&gt;PHP5&lt;/em&gt; auf &lt;em&gt;PHP7&lt;/em&gt; (die man aber nicht zwingend zusammen mit dem Upgrade durchziehen muss); ansonsten ist der Aufwand sehr überschaubar. Es gibt m.E. einen echten Fehler (das Upgrade von &lt;strong&gt;phpMyAdmin&lt;/strong&gt; und einen vermutlich häufigeren Stolperstein (die geänderten Filterbezeichnungen von &lt;strong&gt;fail2ban&lt;/strong&gt;); alle übrigen Anpassungen sind konfigurationsspezifisch. Die Änderungen an Conffiles fielen diesmal angenehm überschaubar aus.&lt;/p&gt;

&lt;p&gt;Alles in allem ein überschaubarer Aufwand, insbesondere, wenn man beim zweiten Durchgang (und allen weiteren) den Großteil der Fallstricke bereits kennt. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/a1b39f94fde84011be4381859cea908d&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 12 May 2020 06:10:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2245-guid.html</guid>
    <category>debian</category>
<category>stretch</category>

</item>
<item>
    <title>Der Injection-Date:-Header</title>
    <link>https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2037</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2037</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Das Usenet ist zunehmend in die Bedeutungslosigkeit zurückgefallen - ironischerweise sind die zugrundeliegenden Formate und Protokolle heutzutage aber klarer spezifiziert als das zu seinen Hochzeiten der Fall war. &lt;em&gt;NNTP&lt;/em&gt;, das Übermittlungsprotokoll mit der größten Verbreitung, war recht gut definiert, erst in &lt;a href=&quot;https://www.eyrie.org/~eagle/nntp/rfcs/rfc977.txt&quot; title=&quot;&quot;&gt;RFC 977&lt;/a&gt; von 1986 und dann zwanzig Jahre später in &lt;a href=&quot;https://www.eyrie.org/~eagle/nntp/rfcs/rfc3977.txt&quot; title=&quot;&quot;&gt;RFC 3977&lt;/a&gt;; außerdem kann man den &lt;em&gt;INN&lt;/em&gt; wohl als eine Referenzimplementation betrachten.&lt;/p&gt;

&lt;p&gt;Mit dem Nachrichtenformat war es da schon schwieriger: Auf &lt;a href=&quot;https://www.ietf.org/rfc/rfc850.txt&quot; title=&quot;&quot;&gt;RFC 850&lt;/a&gt; von 1983 folgte &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc1036.txt&quot; title=&quot;&quot;&gt;RFC 1036&lt;/a&gt; von 1987, der während der Blütezeit des Usenets niemals aktualisiert wurde, obschon es bereits 1993 einen Entwurf für einen Nachfolger gab, den sog. &amp;#8220;Son-of-1036&amp;#8221; (der erst 2010 als historisches Dokument in Form von &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc1849.txt&quot; title=&quot;&quot;&gt;RFC 1849&lt;/a&gt; veröffentlicht wurde). Der De-Facto-Standard war dann letztlich &amp;#8220;Son-of-1036&amp;#8221; mit weitgehend ungeschriebenen Modifikationen aus der Implementierungspraxis, während die &lt;em&gt;USEFOR working group&lt;/em&gt; der &lt;em&gt;IETF&lt;/em&gt; sich unendlich lange vergeblich mit der Erstellung einer Spezifikation abmühte. Als Ende 2009 dann endlich &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc5536.txt&quot; title=&quot;&quot;&gt;RFC 5536&lt;/a&gt; &amp;#8220;Netnews Article Format&amp;#8221; veröffentlicht wurde (der zusammen mit &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc5537.txt&quot; title=&quot;&quot;&gt;RFC 5537&lt;/a&gt; &amp;#8220;Netnews Architecture and Protocols&amp;#8221; ein umfassendes Kompendium zur Implementation von Newsservern, -readern und allen möglichen anderen Tools rund um das Usenet bzw. Netnews darstellt), waren die großen Zeiten des Usenets bereits Vergangenheit.&lt;/p&gt;

&lt;h3 id=&quot;implementation-von-rfc-5536&quot;&gt;Implementation von RFC 5536&lt;/h3&gt;

&lt;p&gt;Es dauerte dementsprechend auch seine Zeit, bis die Theorie der RFCs allmählich in die Praxis einzusickern begann. Die ersten Neuerungen fanden sich schon in &lt;em&gt;INN 2.5.0&lt;/em&gt; (von 2009), aber neue Header wie &lt;em&gt;Injection-Info&lt;/em&gt; oder &lt;em&gt;Injection-Date&lt;/em&gt; wurden erst ab &lt;em&gt;INN 2.5.3&lt;/em&gt; (2012) tatsächlich beachtet und erst ab &lt;em&gt;INN 2.6.0&lt;/em&gt; (2015!) erzeugt.&lt;/p&gt;

&lt;p&gt;Damit wurden dann die bisherigen, nie offiziell standardisierten Header &lt;em&gt;NNTP-Posting-Host&lt;/em&gt;, &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; und &lt;em&gt;X-Trace&lt;/em&gt; durch eine klarere Definition des &lt;em&gt;Path&lt;/em&gt;-Headers und die neuen Header &lt;em&gt;Injection-Info&lt;/em&gt; und &lt;em&gt;Injection-Date&lt;/em&gt; ersetzt. Dabei ersetzt &lt;em&gt;Injection-Date&lt;/em&gt; das &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; (also den Zeitstempel der Einspeisung ins Netz per &lt;kbd&gt;POST&lt;/kbd&gt;), wohingegen im Header &lt;em&gt;Injection-Info&lt;/em&gt; alle Daten über das einspeisende System enthalten sind; dieser Header ersetzt also neben &lt;em&gt;NNTP-Posting-Host&lt;/em&gt; vor allem &lt;em&gt;X-Trace&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Wer als Newsserver-Betreiber diese Tracking-Header zu Zwecken der Anonymisierung oder Pseudonymisierung seiner Nutzer bisher entfernt oder modifiziert hat, muss beim Update auf &lt;em&gt;INN 2.6.0&lt;/em&gt; (und damit beim Update auf &lt;em&gt;Debian Stretch&lt;/em&gt;) entsprechend &lt;a href=&quot;https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html#c4649&quot; title=&quot;&quot;&gt;aufpassen und nacharbeiten&lt;/a&gt;. Dasselbe gilt auch für denjenigen, der Postings aus seinem &lt;em&gt;INN&lt;/em&gt; heraus per &lt;em&gt;suck&lt;/em&gt; erneut ins Netz einspeist: auch der Header &lt;em&gt;Injection-Info&lt;/em&gt; muss vor dem Repost entfernt werden.&lt;/p&gt;

&lt;h3 id=&quot;-injection-date-als-ersatz-f-r-nntp-posting-date-&quot;&gt;&lt;em&gt;Injection-Date&lt;/em&gt; als Ersatz für &lt;em&gt;NNTP-Posting-Date&lt;/em&gt;?&lt;/h3&gt;

&lt;p&gt;So weit, so gut - eines sollte man aber dabei nicht aus den Augen verlieren: &lt;em&gt;Injection-Date&lt;/em&gt; ist &lt;strong&gt;nicht&lt;/strong&gt; dasselbe wie &lt;em&gt;NNTP-Posting-Date&lt;/em&gt;, obschon das eine der Ersatz des anderen sein soll (RFC 5536, 3.2.7):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;This header field is intended to replace the currently used but
undocumented &quot;NNTP-Posting-Date&quot; header field, whose use is now
deprecated.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;NNTP-Posting-Date&lt;/em&gt; wurde nämlich - wenn konfiguriert - immer gesetzt, um den Zeitpunkt der tatsächlichen Einspeisungs ins Netz anzugeben, der durchaus Stunden oder Tage nach der Erstellung des Artikels liegen kann. &lt;em&gt;Injection-Date&lt;/em&gt; hat zwar denselben Zweck - um aber zu vermeiden, dass ansonsten identische Artikel mit verschiedenen &lt;em&gt;Injection-Date&lt;/em&gt;-Headern verbreitet werden, &lt;strong&gt;darf&lt;/strong&gt; &lt;em&gt;Injection-Date&lt;/em&gt; nicht gesetzt werden, wenn der eingelieferte Artikel bereits sowohl einen &lt;em&gt;Date:&lt;/em&gt;- als auch einen &lt;em&gt;Message-ID:&lt;/em&gt;-Header hat:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;                                     If the proto-article had
both a Message-ID header field and a Date header field, an
Injection-Date header field MUST NOT be added, since the proto-
article may have been multiply injected by a posting agent that
predates this standard.  Otherwise, the injecting agent MUST add
an Injection-Date header field containing the current date and
time.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sinnigerweise findet man das nicht in RFC 5536, sondern in RFC 5537 (3.6, Ziffer 11). Der Hintergrund für diese Regelung ist etwas komplex: Die Verbreitung von Duplikaten bereits vorhandener Artikel wird verhindert, indem jeder Newsserver nur solche Artikel annimmt, deren &lt;em&gt;Message-ID&lt;/em&gt; er noch nicht kennt. Um nun diese Liste bekannter &lt;em&gt;Message-IDs&lt;/em&gt; (die sog. &lt;em&gt;History&lt;/em&gt;) nicht ins Unendliche wachsen zu lassen, speichert jeder Newsserver die ihm bekannte &lt;em&gt;Message-IDs&lt;/em&gt; nur für einen begrenzten Zeitraum (bspw. 14 Tage) und nimmt ältere Artikel schlicht nicht an. Für die Bestimmung des Alters eines Artikels soll aber auf den &lt;em&gt;Injection-Date&lt;/em&gt;-Header abgestellt werden, nicht auf &amp;#8220;Date&amp;#8221;; schließlich mag ein Artikel vor seiner Einspeisung länger auf Halde gelegen haben. Wenn nun aber ein Artikel (mit &lt;em&gt;Date&lt;/em&gt; und &lt;em&gt;Message-ID&lt;/em&gt;) einmal heute und dann nochmals drei Wochen später eingespeist würde und beide Male ein aktuelles &lt;em&gt;Injection-Date&lt;/em&gt; bekäme, dann würde ein Newsserver, der seine &lt;em&gt;History&lt;/em&gt; nur 14 Tage hält, den zweiten Artikel annehmen (lt. &lt;em&gt;Injection-Date&lt;/em&gt; ist er ja ganz frisch) und duplizieren (weil er nicht mehr weiß, dass derselbe Artikel vor drei Wochen schonmal vorbeikam).&lt;/p&gt;

&lt;p&gt;Nun ist es alles andere als ungewöhnlich, dass ein einzuspeisender Artikel bereits über &lt;em&gt;Date&lt;/em&gt; und &lt;em&gt;Message-ID&lt;/em&gt; verfügt; das Datum wird ohnehin regelmäßig gesetzt, und die Message-ID setzten viele (die meisten?) Newsreader auch. Das bedeutet dann aber im Umkehrschluss, dass &lt;em&gt;Injection-Date&lt;/em&gt; in sehr vielen Situationen eben kein Ersatz für &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; ist.&lt;/p&gt;

&lt;p&gt;Mir fiel das auf, als ich mal wieder einen Stapel noch auf meinem Laptop herumliegender Artikel mit ungefähr einer Woche Verspätung gepostet hatte: nach dem Update meines lokalen Newsservers auf &lt;em&gt;Debian Stretch&lt;/em&gt; war nicht mehr erkennbar, dass diese Postings verspätet eingespeist worden waren, weil es keinen &lt;em&gt;Injection-Date&lt;/em&gt;-Header gab. Die Ursache dieses scheinbaren Fehlers musste ich mir dann erst von &lt;em&gt;Russ Allbery&lt;/em&gt; persönlich erklären lassen &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;-x-nntp-posting-date-&quot;&gt;&lt;em&gt;X-NNTP-Posting-Date&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Ich habe mir dann kurzerhand einen Ersatz geschaffen und setze nunmehr über den Perl-Filter (&lt;code&gt;filter_nnrpd.pl&lt;/code&gt;) einen &lt;em&gt;X-NNTP-Posting-Date&lt;/em&gt;-Header:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Add X-NNTP-Posting-Date header
$hdr{&#039;X-NNTP-Posting-Date&#039;} = strftime(&quot;%a, %d %b %Y %H:%M:%S %z&quot;, localtime);
&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/757823ebb3e148a6b238b1627c04ff19&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Fri, 06 Oct 2017 06:05:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2037-guid.html</guid>
    <category>debian</category>
<category>inn</category>
<category>perl</category>
<category>stretch</category>
<category>usenet</category>

</item>
<item>
    <title>phpMyAdmin nur für einen vhost einbinden</title>
    <link>https://netz-rettung-recht.de/archives/2020-phpMyAdmin-nur-fuer-einen-vhost-einbinden.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2020-phpMyAdmin-nur-fuer-einen-vhost-einbinden.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2020</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2020</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;&lt;a href=&quot;https://www.phpmyadmin.net/&quot; title=&quot;phpMyAdmin&quot;&gt;&lt;em&gt;phpMyAdmin&lt;/em&gt;&lt;/a&gt; verwende ich seit über einem Jahrzehnt, um bequem auf die Datenbanken auf meinen verschiedenen Webspaces zugreifen zu können (und diesen Zugriff ggf. auch anderen Nutzern zu ermöglichen). Dabei nutze ich der Einfachheit halber das jeweilige Debian-Paket - je mehr Webapplikationen nicht gesondert aktualisiert werden müssen, desto besser.&lt;/p&gt;

&lt;p&gt;Die Standardinstallation hat - aus meiner Sicht - allerdings einen Nachteil: sie macht &lt;em&gt;phpMyAdmin&lt;/em&gt; für alle &lt;em&gt;vhosts&lt;/em&gt; verfügbar, d.h. unter allen auf dem Server gehosteten &amp;#8220;Domains&amp;#8221; aufrufbar. Manchmal mag das praktisch sein, wenn man bspw. so für jeden Kunden scheinbar &amp;#8220;sein&amp;#8221; &lt;em&gt;phpMyAdmin&lt;/em&gt; mitliefert; mir gefällt das aber nicht so gut, und sei es nur, weil &lt;em&gt;phpMyAdmin&lt;/em&gt; (wie jede verbreitete Webapplikation) regelmäßig &amp;#8220;angegriffen&amp;#8221; wird (sprich: Bots rufen die URL auf und suchen nach Schwachstellen oder versuchen, das Passwort zu erraten). Lieber würde ich &lt;em&gt;phpMyAdmin&lt;/em&gt; nur unter einer &amp;#8220;Domain&amp;#8221; - einem &lt;em&gt;vhost&lt;/em&gt; aufrufbar machen.&lt;/p&gt;

&lt;p&gt;Glücklicherweise lässt sich das ohne großen Aufwand machen.&lt;/p&gt;

&lt;p&gt;Standardmäßig legt Debian (Stretch) bei der Installation des Pakets eine entsprechende Konfiguration unter &lt;code&gt;/etc/apache2/conf-available/phpmyadmin.conf&lt;/code&gt; an und aktiviert sie durch einen Symlink in &lt;code&gt;/etc/apache2/conf-enabled/&lt;/code&gt;. Diese Datei hat folgenden Inhalt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

&amp;lt;Directory /usr/share/phpmyadmin&amp;gt;
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    &amp;lt;IfModule mod_php5.c&amp;gt;
        &amp;lt;IfModule mod_mime.c&amp;gt;
            AddType application/x-httpd-php .php
        &amp;lt;/IfModule&amp;gt;
        &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
            SetHandler application/x-httpd-php
        &amp;lt;/FilesMatch&amp;gt;

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    &amp;lt;/IfModule&amp;gt;
    &amp;lt;IfModule mod_php.c&amp;gt;
        &amp;lt;IfModule mod_mime.c&amp;gt;
            AddType application/x-httpd-php .php
        &amp;lt;/IfModule&amp;gt;
        &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
            SetHandler application/x-httpd-php
        &amp;lt;/FilesMatch&amp;gt;

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    &amp;lt;/IfModule&amp;gt;

&amp;lt;/Directory&amp;gt;

# Authorize for setup
&amp;lt;Directory /usr/share/phpmyadmin/setup&amp;gt;
    &amp;lt;IfModule mod_authz_core.c&amp;gt;
        &amp;lt;IfModule mod_authn_file.c&amp;gt;
            AuthType Basic
            AuthName &quot;phpMyAdmin Setup&quot;
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        &amp;lt;/IfModule&amp;gt;
        Require valid-user
    &amp;lt;/IfModule&amp;gt;
&amp;lt;/Directory&amp;gt;

# Disallow web access to directories that don&#039;t need it
&amp;lt;Directory /usr/share/phpmyadmin/templates&amp;gt;
    Require all denied
&amp;lt;/Directory&amp;gt;
&amp;lt;Directory /usr/share/phpmyadmin/libraries&amp;gt;
    Require all denied
&amp;lt;/Directory&amp;gt;
&amp;lt;Directory /usr/share/phpmyadmin/setup/lib&amp;gt;
    Require all denied
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Entscheidend ist dabei die Zeile &lt;code&gt;Alias /phpmyadmin /usr/share/phpmyadmin&lt;/code&gt; - sie legt (global, da in der Serverkonfiguration eingebunden) für jeden &lt;em&gt;vhost&lt;/em&gt; einen Alias an, der beim Aufruf von &lt;code&gt;http://meine-domain.example/phpmyadmin/&lt;/code&gt; nun eben &lt;em&gt;phpMyAdmin&lt;/em&gt; anzeigt.&lt;/p&gt;

&lt;p&gt;Will man diese Funktionalität auf einen &lt;em&gt;vhost&lt;/em&gt; beschränken, genügt, es, die globale Konfiguration mit &lt;kbd&gt;a2disconf phpmyadmin&lt;/kbd&gt; abzuschalten und sie danach stattdessen in einen &lt;em&gt;vhost&lt;/em&gt; (oder auch mehrere) einzubinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost ${APACHE_IP4}:80 ${APACHE_IP6}:80&amp;gt;
    ServerName mein-vhost.example
    DocumentRoot /var/www/mein-vhost.example

    Include /etc/apache2/conf-available/phpmyadmin.conf
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sinnvoll mag es zudem sein, die Konfiguration nur für einen &lt;em&gt;vhost&lt;/em&gt; einzubinden, bei dem SSL aktiviert ist.&lt;/p&gt;

&lt;p&gt;Dann noch ein &lt;kbd&gt;service apache2 reload&lt;/kbd&gt; (oder &lt;kbd&gt;systemctl reload apache2&lt;/kbd&gt;, oder &lt;kbd&gt;apache2ctl graceful&lt;/kbd&gt;), und jetzt ist &lt;em&gt;phpMyAdmin&lt;/em&gt; nur noch unter &lt;code&gt;http://mein-vhost.example/phpmyadmin/&lt;/code&gt; abrufbar - und nirgendwo sonst.&lt;/p&gt;

&lt;p&gt;Wer ganz andere Lösungen umsetzen möchte als der Debian-Default es vorsieht (bspw. ein Aufruf über &lt;code&gt;https://phpmyadmin.mein-vhost.example/&lt;/code&gt;), der kann die Debian-Konfiguration schlicht als Ausgangspunkt nehmen und die entscheidenden Teile in einen passenden &lt;em&gt;vhost&lt;/em&gt; kopieren.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/bce22a9244b348fe870c8a469fce92fe&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Fri, 08 Sep 2017 06:50:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2020-guid.html</guid>
    <category>apache</category>
<category>debian</category>
<category>phpmyadmin</category>
<category>stretch</category>

</item>
<item>
    <title>Von Jessie zu Stretch</title>
    <link>https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2032</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2032</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ein Jahr nach dem &lt;a href=&quot;https://netz-rettung-recht.de/archives/1931-Von-Wheezy-zu-Jessie.html&quot; title=&quot;&quot;&gt;letzten Distributions-Upgrade&lt;/a&gt; stand für meinen heimischen Server das Upgrade auf &lt;em&gt;Debian Stretch&lt;/em&gt; an, das (wie immer) allein durch Download und Installation einige Zeit in Anspruch nahm, diesmal aber auch ungewohnt viele manuelle Eingriffe erforderte.&lt;/p&gt;

&lt;p&gt;Erneut war ich positiv über die geringe Zahl von Änderungen in &lt;em&gt;conffiles&lt;/em&gt; überrascht; insgesamt verlief das Upgrade auch grundsätzlich problemlos. Es &amp;#8220;hakte&amp;#8221; dann aber im Vergleich zu früheren Upgrades doch ungewohnt oft - jedenfalls für Debian, das normalerweise nach meiner Erfahrung einen nahezu hindernisfreien Upgrade-Pfad bietet.&lt;/p&gt;

&lt;h3 id=&quot;konkrete-einzelfallprobleme&quot;&gt;Konkrete Einzelfallprobleme&lt;/h3&gt;

&lt;p&gt;Es begann damit, dass das initiale Upgrade und das folgende Dist-Upgrade nicht ohne Schwierigkeiten durchliefen, sondern abbrachen und mehrfach neu gestartet werden mussten; ohne längere Suche im Log kann ich den Grund dafür gar nicht benennen, was letztlich aber auch egal ist - solange am Ende das Upgrade durchläuft, soll&amp;#8217;s mir recht sein.&lt;/p&gt;

&lt;p&gt;Ganz tat es das allerdings nicht; die Datenbank-Upgrades von phpMyAdmin und Roundcube scheiterten, weil der Datenbank-Server nicht richtig lief. Das wiederum lag darum, dass das Upgrade / die Umstellung von mySQL auf MariaDB nicht vollständig funktioniert hatte:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysqld_safe[6933]: 2017-09-01 13:52:40 139724014662208 [Note] Using unique option prefix &#039;key_buffer&#039; is error-prone and can break in the future. Please use the full name &#039;key_buffer_size&#039; instead.
mysqld_safe[6933]: 2017-09-01 13:52:40 139724014662208 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process 6959 ...
mysqld_safe[6933]: 
mysqld_safe[6933]: Installation of system tables failed!  Examine the logs in
mysqld_safe[6933]: /var/lib/mysql for more information.
mysqld_safe[6933]: 
mysqld_safe[6933]: The problem could be conflicting information in an external
mysqld_safe[6933]: my.cnf files. You can ignore these by doing:
mysqld_safe[6933]: 
mysqld_safe[6933]:     shell&amp;gt; /usr/scripts/scripts/mysql_install_db --defaults-file=~/.my.cnf
mysqld_safe[6933]: 
mysqld_safe[6933]: You can also try to start the mysqld daemon with:
mysqld_safe[6933]: 
mysqld_safe[6933]:     shell&amp;gt; /usr/sbin/mysqld --skip-grant --general-log &amp;amp;
mysqld_safe[6933]: 
mysqld_safe[6933]: and use the command line tool /usr/bin/mysql
mysqld_safe[6933]: to connect to the mysql database and look at the grant tables:
mysqld_safe[6933]: 
mysqld_safe[6933]:     shell&amp;gt; /usr/bin/mysql -u root mysql
mysqld_safe[6933]:     mysql&amp;gt; show tables;
mysqld_safe[6933]: 
mysqld_safe[6933]: Try &#039;mysqld --help&#039; if you have problems with paths.  Using
mysqld_safe[6933]: --general-log gives you a log in /var/lib/mysql that may be helpful.
mysqld_safe[6933]: 
mysqld_safe[6933]: The latest information about mysql_install_db is available at
mysqld_safe[6933]: https://mariadb.com/kb/en/installing-system-tables-mysql_install_db
mysqld_safe[6933]: MariaDB is hosted on launchpad; You can find the latest source and
mysqld_safe[6933]: email lists at http://launchpad.net/maria
mysqld_safe[6933]: 
mysqld_safe[6933]: Please check all of the above before submitting a bug report
mysqld_safe[6933]: at http://mariadb.org/jira
mysqld_safe[6933]: 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ich mutmaße, dass die Rechte in &lt;code&gt;/var/lib/mysql&lt;/code&gt; nicht ganz stimmten - was auch immer. Mehrere Versuche mit &lt;kbd&gt;mysql_upgrade&lt;/kbd&gt; und &lt;kbd&gt;/usr/bin/mysql_install_db --defaults-file=~/.my.cnf&lt;/kbd&gt; waren jedenfalls schlussendlich erfolgreich; die Einzelheiten habe ich nicht debugt.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-f-r-bestimmte-softwarepakete&quot;&gt;Änderungen für bestimmte Softwarepakete&lt;/h3&gt;

&lt;p&gt;Abgesehen von dem vorstehend geschilderten Einzelfallproblem ergeben sich einige generelle Merkpunkte, die ich auch beim Upgrade meiner anderen Maschinen im Blick behalten werde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Der Account &lt;strong&gt;uucp&lt;/strong&gt; bekam - wie beim Upgrade auf &lt;em&gt;Jessie&lt;/em&gt; - wieder &lt;code&gt;/usr/sbin/nologin&lt;/code&gt; als Shell verpasst.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;fail2ban&lt;/strong&gt; startete nicht mehr, weil in der &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; ein nicht mehr existenter Filter aktiviert wurde. Nach Berichtigung der Konfiguration ließ sich der Dienst problemlos starten.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Der &lt;strong&gt;isc-dhcp-server&lt;/strong&gt; startet jetzt per Default für &lt;em&gt;ipv4&lt;/em&gt; und &lt;em&gt;ipv6&lt;/em&gt;; jedenfalls bei mir fehlte ihm aber für letzteres die passende Konfiguration, so dass er mit einer Fehlermeldung stehenblieb. Das bisherige Verhalten lässt sich wiederhestellen, indem man in &lt;code&gt;/etc/default/isc-dhcp-server&lt;/code&gt; folgendes setzt: &lt;code&gt;INTERFACES=&quot;eth0&quot;&lt;/code&gt;. Da aber &lt;code&gt;INTERFACES&lt;/code&gt; offenbar demnächst wegfällt, kann man es auch direkt richtig machen und stattdessen &lt;code&gt;INTERFACESv4=&quot;eth0&quot;&lt;/code&gt; setzen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wer &lt;strong&gt;duply&lt;/strong&gt; und &lt;em&gt;duplicity&lt;/em&gt; für sein Backup nutzt, muss aufgrund der neuen Version von &lt;code&gt;gpg&lt;/code&gt; die Konfiguration anpassen: in der &lt;code&gt;conf&lt;/code&gt;-Datei ist zu setzen: &lt;code&gt;GPG_OPTS=&#039;--pinentry-mode loopback&#039;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;offlineimap&lt;/strong&gt; verifiziert jetzt TLS-Zertifikate, will also immer dann, wenn &lt;code&gt;ssl = yes&lt;/code&gt; in der Konfiguration gesetzt ist (aber wohl auch dann, wen SSL jedenfalls möglich wäre), entweder den Pfad zu den Root-Zertifikaten angegeben haben (wenn die Gegenstelle ein Zertifikat einer anerkannten &lt;em&gt;CA&lt;/em&gt; hat) oder den &lt;em&gt;Fingerprint&lt;/em&gt; des Zertifikats (wenn es sich um ein selbst-signiertes handelt). Zum jeweiligen &lt;code&gt;remotehost&lt;/code&gt; gehört also entweder &lt;code&gt;sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;/code&gt; oder &lt;code&gt;cert_fingerprint = ...&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Außerdem müssen bei &lt;strong&gt;offlineimap&lt;/strong&gt; Sonderzeichen in Passworten - konkret hier &lt;code&gt;%&lt;/code&gt; - teilweise gequoted werden (konkret hier als &lt;code&gt;%%&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jedenfalls wenn bei &lt;strong&gt;offlineimap&lt;/strong&gt; das Feature &lt;em&gt;Name translation&lt;/em&gt; genutzt wird, muss überdies die Konfiguration auch insoweit angepasst werden - &lt;em&gt;offlineimap&lt;/em&gt; synchronisiert Folder jetzt beidseits, was beim Umschreiben von Foldernamen zum Chaos führen kann, weil externe Folder lokal anders heißen und dann ggf. unter ihrem lokalen Namen neu auf den entfernten IMAP-Server synchronisiert würden. Die &lt;em&gt;Name translation&lt;/em&gt; muss daher beidseits erfolgen, daher auch für das lokale &amp;#8220;Repository&amp;#8221; (&amp;#8220;&lt;a href=&quot;http://www.offlineimap.org/doc/nametrans.html#reverse-nametrans&quot; title=&quot;301 Moved Permanently&quot;&gt;Reverse namentrans&lt;/a&gt;&amp;#8221;). Der Aufruf von &lt;kbd&gt;offlineimap --info&lt;/kbd&gt; kann beim Debugging hier sehr hilfreich sein.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wer &lt;strong&gt;gitolite&lt;/strong&gt; genutzt hat und nun auf &lt;em&gt;gitolite3&lt;/em&gt; umstellen will, wird jedenfalls die bisherige Konfiguration übernehmen bzw. anpassen müssen und muss auf den Clients im Auge behalten, dass der lokale Benutzer auf dem Server jetzt nicht mehr &lt;code&gt;gitolite&lt;/code&gt;, sondern &lt;code&gt;gitolite3&lt;/code&gt; heißt. (Ob es einen automatisierten Upgrade-Pfad gibt, wenn man &lt;em&gt;gitolite3&lt;/em&gt; nachinstalliert, kann ich nicht sagen, weil ich so &amp;#8220;klug&amp;#8221; war, erst das &lt;em&gt;gitolite&lt;/em&gt;-Paket zu entfernen und dann &lt;em&gt;gitolite3&lt;/em&gt; zu installieren &amp;#8230;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hinweis:&lt;/strong&gt; In den Kommentaren finden sich noch Ergänzungen, auf die ich später gestoßen bin. So muss man als Nutzer von &lt;strong&gt;suck&lt;/strong&gt; daran denken, den &lt;code&gt;Injection-Info:&lt;/code&gt;-Header auszufiltern, und wer noch &lt;em&gt;DSS&lt;/em&gt;-Keys für (automatisierte) &lt;strong&gt;SSH&lt;/strong&gt;-Verbindungen nutzt, sollte im Blick haben, dass &lt;code&gt;ssh-dss&lt;/code&gt; nicht mehr zu den &lt;code&gt;PubkeyAcceptedKeyTypes&lt;/code&gt; gehört.&lt;/p&gt;

&lt;h3 id=&quot;neue-software-und-ge-nderte-defaults&quot;&gt;Neue Software und geänderte Defaults&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;vim&lt;/strong&gt; hat per Default ärgerlicherweise eine aktivierte Maussteuerung verpasst bekommen, die sich zudem (aufgrund der Reihenfolge, mit der die Konfigurationsdateien eingelesen werden) nicht systemweit deaktivieren lässt, sondern zumindest eine leere &lt;code&gt;~/.vimrc&lt;/code&gt; für jeden Nutzer erfordert (weil sonst stattdessen &lt;code&gt;/usr/share/vim/vim80/defaults.vim&lt;/code&gt; geladen wird, und zwar zur selben Zeit wie sonst die &lt;code&gt;.vimrc&lt;/code&gt; und damit &lt;em&gt;nach&lt;/em&gt; &lt;code&gt;/etc/vim/vimrc.local&lt;/code&gt;). Alternativ kann man das Laden der &lt;code&gt;defaults.vim&lt;/code&gt; in &lt;code&gt;/etc/vim/vimrc&lt;/code&gt; deaktivieren (wenn man dieses &lt;em&gt;conffile&lt;/em&gt; um den entsprechenden, auskommentierten Inhalt ergänzt hat, wie beim Upgrade vorgeschlagen). Für die Einzelheiten sehr informativ ist hier der entsprechende &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074&quot; title=&quot;#864074 - vim: &amp;#39;set mouse=&amp;#39; in /etc/vim/vimrc.local is ignored unless ~/.vimrc exists - Debian Bug report logs&quot;&gt;Bugreport&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mit &lt;em&gt;Debian Stretch&lt;/em&gt; kommt &lt;em&gt;PHP7&lt;/em&gt;; es mag sich daher empfehlen, &lt;em&gt;PHP5&lt;/em&gt; zu deinstallieren. Außerdem wird man im Zweifel spätetens jetzt auf &lt;em&gt;php-fpm&lt;/em&gt; umstellen wollen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h3&gt;

&lt;p&gt;Das Upgrade verlief - in einer Gesamtbetrachtung - ohne echte (reproduzierbare) Fehler, erforderte aber ungewöhnlich viel manuellen Nacharbeit. Andererseits wurden zumindest manche Punkte vermutlich im jeweiligen &lt;code&gt;NEWS&lt;/code&gt;-Eintrag angesprochen (ich muss gestehen, ich lese die Upgrade-Anleitung immer sehr genau, aber &lt;code&gt;NEWS&lt;/code&gt; habe ich bisher allenfalls überflogen - keine gute Idee), und meine Konfiguration hier zuhause ist eher komplex und historisch gewachsen; eine schlechte Kombination.&lt;/p&gt;

&lt;p&gt;Weitere Hinweise zum Upgrade gibt es auch in &lt;a href=&quot;https://www.earth.li/~noodles/blog/2017/08/notes-on-stretch.html&quot; title=&quot;Notes on upgrading from Jessie to Stretch | Noodles’ Emptiness&quot;&gt;Jonathan McDowell&amp;#8217;s Blog&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/67e6f32e5a054d04ae2282ca1fcb265f&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 06 Sep 2017 05:45:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2032-guid.html</guid>
    <category>debian</category>
<category>stretch</category>

</item>
<item>
    <title>Webserver-Tuning</title>
    <link>https://netz-rettung-recht.de/archives/2021-Webserver-Tuning.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2021-Webserver-Tuning.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2021</wfw:comment>

    <slash:comments>11</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2021</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Alle paar Monate wieder turnt ein - weniger rücksichtsvoller - Crawler vorbei und spidert sich zügig durch alle Einträge meines Blogs. Damit brachte er meinen bisherigen Server gerne an den Rand seiner Leistungsfähigkeit, durfte dieser doch für jeden Link einen &lt;code&gt;php-cgi&lt;/code&gt;-Prozess starten. Man merkte das recht schnell an den steigenden Antwortzeiten, und auch interaktiv auf der Shell machte sich die steigende &lt;em&gt;load&lt;/em&gt; bemerkbar. Am Ende blieben meist einige &lt;code&gt;php-cgi&lt;/code&gt;-Prozesse übrig, die man dann manuell mittels &lt;code&gt;kill&lt;/code&gt; entsorgen durfte. (Vielleicht lag auch hier das eigentliche Problem, dass nämlich die genutzten Ressourcen nicht wieder freigegeben wurden. Hinter die Einzelheiten bin ich nie so recht gekommen.)&lt;/p&gt;

&lt;p&gt;Die brandneue Maschine hingegen sollte durch &lt;em&gt;FastCGI&lt;/em&gt; und massenhaft RAM sowie schnelle SSDs einem solchen Ansturm (auch bei weiterer Verwendung des doch eher schwergewichtigen Apachen) besser gewachsen sein - dachte ich mir. Bis eines Freitagmorgens die E-Mails des Monitoring-System eingingen, die mir mitteilten, dass der Webserver nicht mehr auf Anfragen reagiert. Gar nicht mehr.&lt;/p&gt;

&lt;p&gt;Der Grund dafür fand sich schnell im Log:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[mpm_event:error] [pid 1365:tid 139856442496192] AH00484: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Alle Threads des Webservers waren mit Anfragen ausgelastet (und offensichtlich wurden sie auch nicht mehr freigegeben - oder der Apache hatte sich &amp;#8220;verschluckt&amp;#8221;). Ein &lt;kbd&gt;service apache2 restart&lt;/kbd&gt; löste daher das Problem; Zeit aber für einen Blick in die Konfiguration - vielleicht sollte man etwas an den Limits drehen (&amp;#8220;consider raising the MaxRequestWorkers setting
&amp;#8220;).&lt;/p&gt;

&lt;h3 id=&quot;apache-event-mpm&quot;&gt;Apache Event-MPM&lt;/h3&gt;

&lt;p&gt;Für das verwendete &lt;em&gt;MPM&lt;/em&gt; findet sich die entsprechende Konfiguration (unter Debian) in &lt;code&gt;/etc/apache2/mods-enabled/mpm_event.conf&lt;/code&gt;; sie sieht per default so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# event MPM
# StartServers: initial number of server processes to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestWorkers: maximum number of worker threads
# MaxConnectionsPerChild: maximum number of requests a server process serves
&amp;lt;IfModule mpm_event_module&amp;gt;
       StartServers              2
       MinSpareThreads          25
       MaxSpareThreads          75
       ThreadLimit              64
       ThreadsPerChild          25
       MaxRequestWorkers       150
       MaxConnectionsPerChild    0
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Es werden also standardmäßig zwei Serverprozesse (&lt;code&gt;StartServers&lt;/code&gt;)gestartet; jeder hat 25 Threads (&lt;code&gt;ThreadsPerChild&lt;/code&gt;), also können 50 parallele Anfragen abgearbeitet werden. Sobald weniger als 25 freie Threads zur Verfügung stehen (&lt;code&gt;MinSpareThreads&lt;/code&gt;), werden weitere Serverprozesse gestartet, bis zum Maximum von 150 Threads (&lt;code&gt;MaxRequestWorkers&lt;/code&gt;) - das entspricht sechs Prozessen (mit je 25 Threads). Sobald mehr als 75 Threads unbeschäftigt sind (&lt;code&gt;MaxSpareThreads&lt;/code&gt;), werden Serverprozesse wieder zurückgefahren.&lt;/p&gt;

&lt;p&gt;150 Prozesse für eine Vielzahl von Webpräsenzen erschien mir wirklich nicht viel; ich habe (angesichts des zur Verfügung stehenden Speichers) daher etwas nachgelegt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mpm_event_module&amp;gt;
        ServerLimit               40
        StartServers               5
        MinSpareThreads          100
        MaxSpareThreads          250
        ThreadLimit               64     
        ThreadsPerChild           25
        MaxRequestWorkers       1000
        MaxConnectionsPerChild  1000
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wir fangen jetzt also mit mit 125 Threads an (fünf Server mit je 25 Threads) und halten minimal 100 Threads bereit, maximal 250 - eine Lastspitze kann daher besser abgefedert werden, weil von Anfang an mehr Ressourcen bereitstehen und schneller zusätzliche Ressourcen hochgefahren werden). Maximal können dann 1.000 Threads laufen (statt vorher 150) - zu diesem Zweck muss auch &lt;code&gt;ServerLimit&lt;/code&gt; erhöht werden, das per Default auf 16 steht - denn 1.000 Threads brauchen bei 25 Threads pro Prozess 40 Prozesse (mit dem Default von 16 Prozessen kommt man daher maximal auf 400 Threads).&lt;/p&gt;

&lt;p&gt;Außerdem lasse icn jeden Thread nach 1.000 beantworteten Anfragen neu starten (&lt;code&gt;MaxConnectionsPerChild&lt;/code&gt;); so können sich Speicherlecks nicht zu Problemen auswachsen.&lt;/p&gt;

&lt;p&gt;Seitdem war der Webserver jedenfalls nicht mehr komplett ausgelastet; schauen wir mal, ob das schon der richtige Mittelweg zwischen der Bereitstellung ausreichender Ressourcen und dem Schutz des Gesamtsystems vor Überlast war oder mir als nächstes die ganze Maschine in die Knie geht, wenn es mal richtig rundgeht &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;fpm-konfiguration&quot;&gt;FPM-Konfiguration&lt;/h3&gt;

&lt;p&gt;Für Webapplikationen in PHP ist die Apache-Konfiguration nicht das einzige limitierende Element - vielmehr muss jede Anfrage auch von einem &lt;em&gt;FastCGI&lt;/em&gt;-Prozess beantwortet werden, und auch die sind limitiert: per Default (bei Debian) auf 50 pro Pool, konfiguriert (unter Strech) in &lt;code&gt;/etc/php/7.0/fpm/pool.d/www.conf&lt;/code&gt;, wobei statt &lt;code&gt;www.conf&lt;/code&gt; eben der jeweilige Pool einzusetzen ist.&lt;/p&gt;

&lt;p&gt;Das erscheint mir ebenfalls nicht besonders viel; ich habe daher den Pool für mein Blog etwas nach oben angepasst:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pm.max_children = 250
pm.start_servers = 30
pm.min_spare_servers = 10
pm.max_spare_servers = 50
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Zu lesen ist das ähnlich wie oben beim Apachen: 30 Prozesse stehen von Anfang an zur Verfügung, 10&amp;#160;müssen mindestens immer arbeitslos sein, sonst werden Prozesse nachgelegt, bis zur Maximalzahl von 250. Ab 50 &amp;#8220;arbeitslosen&amp;#8221; Prozessen werden überzählige Prozesse gestoppt.&lt;/p&gt;

&lt;h3 id=&quot;erfahrungswerte&quot;&gt;Erfahrungswerte&lt;/h3&gt;

&lt;p&gt;Ich habe bisher, muss ich gestehen, nicht die geringste Erfahrung mit solchen &amp;#8220;Tuning-Aufgaben&amp;#8221;, und werde daher abwarten müssen, ob sich die Werte bewähren. Aus dem Log kann ich jedenfalls sehen, dass 50 Prozesse viel zu wenig waren und auch 150 mehrfach nicht ausreichten:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;WARNING: [pool blog] server reached pm.max_children setting (150), consider raising it
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Andererseits habe ich bisher zumindest aus &lt;em&gt;Munin&lt;/em&gt; - das allerdings nicht sehr fein auflöst - keine Hinweise für Lastspitzen (CPU-Nutzung, RAM-Nutzung und Load); da scheint im Tagesverlauf überall noch viel, viel Luft nach oben zu sein.&lt;/p&gt;

&lt;p&gt;Hat jemand aus der werten Leserschaft Erfahrungen und Tips, die er gerne teilen möchte? Sonst berichte ich, wenn das nächste Mal etwas danebengeht. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/87d9555e0645490ebf5eee951e24a9ff&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 22 Aug 2017 05:40:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2021-guid.html</guid>
    <category>apache</category>
<category>debian</category>
<category>followerpower</category>
<category>php</category>
<category>stretch</category>

</item>
<item>
    <title>systemd-Unit für srsd unter Debian </title>
    <link>https://netz-rettung-recht.de/archives/2016-systemd-Unit-fuer-srsd-unter-Debian.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2016-systemd-Unit-fuer-srsd-unter-Debian.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2016</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2016</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ich fürchte, das wird einer dieser Beiträge, bei dem die notwendige Vorrede bald länger wird als der Beitrag selbst &amp;#8230;&lt;/p&gt;

&lt;p&gt;Aber fangen wir einfach einmal vorne an: Der Kampf gegen unerwünschte E-Mails, die einen mit &lt;em&gt;Malware&lt;/em&gt; oder Angeboten für die Verlängerung oder Vergrößung verschiedenster Körperteile (neuerdings auch - noch sachnah - gerne für den Wechsel der Krankenkasse) beglücken, heutzutage meist als &lt;em&gt;Spam&lt;/em&gt; bezeichnet, tobt seit Jahrzehnten. Nach den verschiedensten Filtern entstanden auch mehrere Ansätze, die gar nicht so sehr den Spam an sich bekämpfen, sondern weiter vorne - oder auch parallel - ansetzen und die (meist mit Spam verbundene) Fälschung von Absenderadressen verhindern bzw. umgekehrt eine (begrenzte) Garantie für die Echtheit des Absenders übernehmen wollen.&lt;/p&gt;

&lt;h3 id=&quot;-spf-und-dkim-&quot;&gt;&lt;em&gt;SPF&lt;/em&gt; und &lt;em&gt;DKIM&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Dazu gehören &lt;strong&gt;SPF&lt;/strong&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Sender_Policy_Framework&quot; title=&quot;&quot;&gt;&lt;em&gt;Sender Policy Framework&lt;/em&gt;&lt;/a&gt;, früher: &lt;em&gt;sender permitted from&lt;/em&gt;) und &lt;strong&gt;DKIM&lt;/strong&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot; title=&quot;&quot;&gt;&lt;em&gt;DomainKeys Identified Mail&lt;/em&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Bei &lt;strong&gt;SPF&lt;/strong&gt; nutzt der Verantwortliche für eine Domain (meist ein Provider) das &lt;em&gt;DNS&lt;/em&gt; (&lt;em&gt;Domain Name System&lt;/em&gt;), um dort bekanntzugeben, von welchen Servern (welchen IP-Adressen) &amp;#8220;echte&amp;#8221; Mail mit einem Absender aus dieser Domain stammen dürfen. So kann bspw. &lt;em&gt;GMX&lt;/em&gt; festlegen, dass legitime Mail mit einem Absender &lt;code&gt;@gmx.net&lt;/code&gt; (also bspw. &lt;code&gt;irgendwer@gmx.net&lt;/code&gt;) nur von einem ihrer Mailserver ausgehen dürfen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;thh@thangorodrim:~$ host -t txt gmx.net 
gmx.net descriptive text &quot;v=spf1 ip4:213.165.64.0/23 ip4:74.208.5.64/26 ip4:212.227.126.128/25 ip4:212.227.15.0/25 ip4:212.227.17.0/27 ip4:74.208.4.192/26 ip4:82.165.159.0/24 ip4:217.72.207.0/27 -all&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(Da sieht man dann auch direkt das erste Problem: wer als Kunde von &lt;em&gt;GMX&lt;/em&gt; eine E-Mail mit seiner &lt;em&gt;GMX&lt;/em&gt;-Adresse über einen anderen Mailserver versenden will, steht vor Schwierigkeiten.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; funktioniert besonders gut zusammen mit &lt;strong&gt;DNSEC&lt;/strong&gt;, also digital signierten &lt;em&gt;DNS&lt;/em&gt;-Einträgen, deren Echtheit sich prüfen lässt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DKIM&lt;/strong&gt; geht einen Schritt weiter und publiziert nicht (nur) eine (sich ggf. oft ändernde) Liste legitimer Absender-Server für eine Domain, sondern veröffentlicht im &lt;em&gt;DNS&lt;/em&gt; einen digitalen Signaturschlüssel, mit dem dann die wesentlichen Teile der Header (&amp;#8220;Kopfzeilen&amp;#8221;) einer jeden ausgehenden Mail digital signiert werden. Auch hier steht natürlich vor Problemen, wer nicht den Server des Anbieters zum Mailversand nutzt, denn nur der kann entsprechend digital signieren.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; und auch &lt;strong&gt;DKIM&lt;/strong&gt; werden aber vor allem dann zum Problem, wenn man E-Mails weiterleiten möchte - also eine Mailingliste betreibt, oder auch nur einen einfachen Mailverteiler, oder eine Mailweiterleitung von einem Postfach auf ein anderes eingerichtet hat. In allen Fällen geht dann nämlich die E-Mail mit dem (im Beispiel) &lt;em&gt;GMX&lt;/em&gt;-Absender bei der Mailingliste (oder dem Mailverteiler, oder dem ersten eigenen Postfach) ein und wird von da weiterversandt (an die Teilnehmer der Mailingliste, den Verteiler ode das Weiterleitungsziel, also das andere eigene Postfach). Dort aber kommt die E-Mail mit einem &lt;em&gt;GMX&lt;/em&gt;-Absender, aber von einem falschen Server aus an! (Nämlich von dem Mailinglistenserver, dem Mailverteiler-Server oder dem Server, der zum ersten eigenen Postfach gehört.) Das führt zu einer fehlschlagenden &lt;em&gt;SPF&lt;/em&gt;-Prüfung, und wenn bei der Weiterleitung (gerade bei einer Mailingliste!) Header eingefügt oder geändert wurden, dann schlägt auch die &lt;em&gt;DKIM&lt;/em&gt;-Signaturprüfung fehl.&lt;/p&gt;

&lt;h3 id=&quot;-srs-&quot;&gt;&lt;em&gt;SRS&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Das &lt;strong&gt;SPF&lt;/strong&gt;-Problem für Weiterleitungen lösen will &lt;strong&gt;SRS&lt;/strong&gt;, das &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme&quot; title=&quot;&quot;&gt;Sender Rewriting Scheme&lt;/a&gt;&lt;/em&gt;: der technische Absender der Mail (der Envelope-From) wird geändert, so dass die E-Mail nicht mehr von (im Beispiel) &lt;em&gt;GMX&lt;/em&gt; kommt, sondern vom Weiterleitungsserver.&lt;/p&gt;

&lt;p&gt;Die E-Mail von &lt;code&gt;irgendwer@gmx.net&lt;/code&gt; wird also vom Server &lt;code&gt;postfach.provider.example&lt;/code&gt; mit einem Absender wie &lt;code&gt;weiterleitung@postfach.provider.example&lt;/code&gt; weitergeschickt. Jetzt kommt die Mail für den letztendlichen Empfänger vom &amp;#8220;richtigen&amp;#8221; Server, nämlich &lt;code&gt;postfach.provider.example&lt;/code&gt; (sie hat ja keinen &lt;em&gt;GMX&lt;/em&gt;-Absender mehr!).&lt;/p&gt;

&lt;p&gt;Das allerdings ist nur der erste Schritt: Fehlermeldungen (wie zum Beispiel über ein volles Postfach) sollen ja nicht beim Weiterleitungsserver landen, sondern an den ursprünglichen Absender zurückgehen. Dieser muss sich also aus der neu erzeugten Absenderadresse rekonstruieren lassen. Da hilft so etwas wie &lt;strong&gt;VERP&lt;/strong&gt; (&lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Variable_envelope_return_path&quot; title=&quot;&quot;&gt;Variable envelope return path&lt;/a&gt;&lt;/em&gt;); statt &lt;code&gt;weiterleitung@postfach.provider.example&lt;/code&gt; nehmen wir also &lt;code&gt;weiterleitung+irgendwer=gmx.netg@postfach.provider.example&lt;/code&gt;. Da steckt die alte Adresse drin; wir wissen also, wo wir Fehlermeldungen an diese Adresse hinschicken müssen.&lt;/p&gt;

&lt;p&gt;Auch das genügt aber noch nicht; denn nur echte Fehlermeldungen sollen an den Absender zurückgehen, nicht aber möglicher Spam, der mit leerem Absender (wie eine Fehlermeldung) an die durch den Weiterleitungsserver erzeugte Absenderadresse geht. Was hinderte einen Spammer, seine unerwünschten Nachrichten an &lt;code&gt;weiterleitung+irgendwer=gmx.netg@postfach.provider.example&lt;/code&gt; zu schicken? Und dann senden wir den Mist auch noch an &lt;code&gt;irgendwer@gmx.net&lt;/code&gt; weiter! Die von uns erzeugten neuen Absenderadressen müssen also kryptographisch gesichert werden, damit nur wir sie erzeugen können, ein Dritter sie aber nicht erraten kann.&lt;/p&gt;

&lt;h3 id=&quot;-systemd-unit-file-f-r-srds-&quot;&gt;&lt;em&gt;systemd unit file&lt;/em&gt; für &lt;em&gt;srds&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Und &amp;#8220;schon&amp;#8221; sind wir beim eigentlichen Thema dieses Eintrags angekommen! &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Eine Software, die solche kryptographisch sicheren Absenderadressen erzeugen kann, ist &lt;em&gt;&lt;a href=&quot;http://search.cpan.org/dist/Mail-SRS/srsd&quot; title=&quot;&quot;&gt;srsd&lt;/a&gt;&lt;/em&gt;, der auch in &lt;em&gt;Debian&lt;/em&gt; als &lt;a href=&quot;https://packages.debian.org/stretch/srs&quot; title=&quot;&quot;&gt;Paket verfügbar&lt;/a&gt; ist. Auf meinem alten Server hatte ich das vor Jahren einmal kurzfristig aufsetzen müssen, weil Weiterleitungen (ein simpler Mailverteiler) scheiterten, und diese Lösung wollte ich nunmehr auch auf dem neuen Server haben.&lt;/p&gt;

&lt;p&gt;Eine Anleitung für die Konfiguration von &lt;em&gt;Exim 4&lt;/em&gt; mit &lt;em&gt;srsd&lt;/em&gt; hat &lt;a href=&quot;https://ente.limmat.ch/kb/exim/exim_v4_srs.html&quot; title=&quot;Exim v4 and srs daemon&quot;&gt;Adrian Zaugg&lt;/a&gt; geschrieben; sie setzt allerdings auf ein altes &lt;em&gt;sysvinit&lt;/em&gt;-Startup-Script. &lt;em&gt;systemd&lt;/em&gt; kann zwar auch damit umgehen; ich hätte aber lieber ein &amp;#8220;natives&amp;#8221; &lt;em&gt;unit file&lt;/em&gt; für &lt;em&gt;systemd&lt;/em&gt; gehabt.&lt;/p&gt;

&lt;p&gt;Also habe ich mich ein wenig belesen und bin bei folgender Lösung gelandet, die als &lt;code&gt;/lib/systemd/system/srsd.service&lt;/code&gt; zu speichern ist:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[Unit]
Description=&#039;srsd - SRS daemon&#039;
After=syslog.target

[Service]
Type=simple
User=Debian-exim
Restart=on-failure

ExecStart=/usr/bin/srsd --secretfile /etc/exim4/srsd.secret
ExecStopPost=/bin/rm /tmp/srsd

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dann noch das kryptographische Geheimnis erzeugen (bspw. mit &lt;code&gt;openssl rand -base64 12 &amp;gt; /etc/exim4/srsd.secret&lt;/code&gt;), und dann kann es mit &lt;code&gt;systemctl enable srsd&lt;/code&gt; und &lt;code&gt;systemctl start srsd&lt;/code&gt; losgehen.&lt;/p&gt;

&lt;p&gt;Meine Variante der Anbindung an &lt;em&gt;Exim&lt;/em&gt; kann ich dann gelegentlich[tm] mal nachliefern.&lt;/p&gt;

&lt;h3 id=&quot;was-meint-die-werte-leserschaft-&quot;&gt;Was meint die werte Leserschaft?&lt;/h3&gt;

&lt;p&gt;Ich bin sicher, es geht besser - das war mein erstes &lt;em&gt;unit file&lt;/em&gt;, und vieles daran ist aus &lt;em&gt;copy &amp;amp; paste&lt;/em&gt; mit nachfolgendem Ausprobieren entstanden. Vielleicht (nein, sogar sicher!) kann ich ja noch etwas von meinen Lesern lernen? &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/f5da590ad528487cb263d6a11041d1cc&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 14 Aug 2017 05:10:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2016-guid.html</guid>
    <category>debian</category>
<category>e-mail</category>
<category>exim</category>
<category>spam</category>
<category>stretch</category>
<category>systemd</category>

</item>
<item>
    <title>Verzögerungen beim SSH-Login</title>
    <link>https://netz-rettung-recht.de/archives/2004-Verzoegerungen-beim-SSH-Login.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2004-Verzoegerungen-beim-SSH-Login.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2004</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2004</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Manchmal dauert der SSH-Login auf einem meiner Server etwas länger. Dann ist entweder dort die Load zu hoch oder es gibt Probleme mit der DNS-Auflösung meiner IP-Adresse oder das Netz ist dicht - meistens das heimische WLAN. Dieser Tage aber dauerte es nicht nur &amp;#8220;etwas&amp;#8221; länger - vielmehr hatte ich regelmäßige Verzögerungen im Bereich von etlichen Sekunden beim Login, immer auf denselben Maschinen (eine davon in meinem heimischen Netz!) und nach (!) dem Anzeigen des Login-Banners. Die Load war in Ordnung, die DNS-Auflösung sollte jedenfalls im lokalen Netz funktionieren, und ständig überlastet kann die Netzanbindung eigentlich auch nicht sein, jedenfalls nicht immer zu denselben beiden Maschinen.&lt;/p&gt;

&lt;p&gt;Eigenartig.&lt;/p&gt;

&lt;p&gt;Nachdem ich mich - wie üblich - zunächst einmal einfach nur geärgert und darauf gehofft hatte, dass das Problem sich von selbst lösen möge, sah ich mich dann doch gezwungen, zum Äußersten zu greifen und ins Logfile zu schauen. Dort fanden sich dann Einträge dieser Art:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Jul  3 21:11:02 myhost dbus[23288]: [system] Activating via systemd: service name=&#039;org.freedesktop.login1&#039; unit=&#039;dbus-org.freedesktop.login1.service&#039;
Jul  3 21:11:02 myhost systemd[1]: Started Login Service.
Jul  3 21:11:27 myhost dbus[23288]: [system] Failed to activate service &#039;org.freedesktop.login1&#039;: timed out
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ein Timeout - das würde ja passen! &amp;#8212; Aber warum?&lt;/p&gt;

&lt;p&gt;Die einfachste Lösung ist in solchen Fällen oft - und gerade bei absoluter Ahnungslosigkeit - ein gezielte Suche bei Google oder einer anderen Suchmaschine des jeweiligen Vertrauens. Mich brachte das in diesem Fall zu einem &lt;a href=&quot;https://unix.stackexchange.com/questions/239489/dbus-system-failed-to-activate-service-org-freedesktop-login1-timed-out&quot; title=&quot;Forbidden - Stack Exchange&quot;&gt;Stackexchange&lt;/a&gt;-Eintrag, der genau auf mein Problem passte: Dieser &amp;#8220;Hänger&amp;#8221; geschieht, wenn &lt;em&gt;dbus&lt;/em&gt; neu gestartet wurde - und genau das hatte ich nach dem Einspielen von Updates getan!&lt;/p&gt;

&lt;p&gt;Die Lösung soll sein, danach auch &lt;em&gt;logind&lt;/em&gt; wieder zu starten. Und tatsächlich: &lt;code&gt;service systemd-logind restart&lt;/code&gt;, und schon war wieder alles paletti.&lt;/p&gt;

&lt;p&gt;(Vielleicht hilft das dem einen oder anderen, der - namentlich unter &lt;em&gt;Debian Jessie&lt;/em&gt; - vor demselben Problem steht.)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/15597e98d0594ec89fe4de13bfa807fb&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 05 Jul 2017 06:05:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2004-guid.html</guid>
    <category>debian</category>
<category>jessie</category>
<category>systemd</category>

</item>
<item>
    <title>letsencrypt jenseits des Webservers</title>
    <link>https://netz-rettung-recht.de/archives/1943-letsencrypt-jenseits-des-Webservers.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1943-letsencrypt-jenseits-des-Webservers.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1943</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1943</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Vor einigen Monaten hatte ich über &lt;em&gt;letsencrypt&lt;/em&gt;, die neue Zertifizierungsstelle für TLS-Zertifikate, &lt;a href=&quot;https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt; und demletzt meine guten Erfahrungen damit &lt;a href=&quot;https://netz-rettung-recht.de/archives/1916-Lets-Encrypt-Updates.html&quot; title=&quot;&quot;&gt;dargestellt&lt;/a&gt;. Doch &lt;em&gt;HTTP&lt;/em&gt; ist ja nicht das einzige Protokoll, das einer Absicherung bedarf. Wie sieht es mit TLS-Zertifikaten für Mail (&lt;em&gt;SMTP&lt;/em&gt; und &lt;em&gt;POP3&lt;/em&gt; oder &lt;em&gt;IMAP&lt;/em&gt;) und News (&lt;em&gt;NNTP&lt;/em&gt;) oder noch andere Dienste aus?&lt;/p&gt;

&lt;p&gt;Grundsätzlich ist das kein Problem: vorhandene Zertifikate mit dem (oder den) passenden Hostnamen müssen nur eingebunden werden.&lt;/p&gt;

&lt;p&gt;In der Folge stelle ich die Vorgehensweise ausgehend von einem &lt;em&gt;Debian&lt;/em&gt;-&lt;em&gt;Jessie&lt;/em&gt;-System aus vor.&lt;/p&gt;

&lt;h3 id=&quot;erhalt-des-zertifikats&quot;&gt;Erhalt des Zertifikats&lt;/h3&gt;

&lt;p&gt;Am einfachsten ist das, wenn unter jedem Hostnamen auch ein Webserver erreichbar ist; dann kann nämlich einfach das &lt;code&gt;webroot&lt;/code&gt;-&lt;a href=&quot;https://certbot.eff.org/docs/using.html#webroot&quot; title=&quot;&quot;&gt;Plugin&lt;/a&gt; verwendet werden. Ist das nicht der Fall, kommen bspw. das &lt;code&gt;manual&lt;/code&gt;-&lt;a href=&quot;https://certbot.eff.org/docs/using.html#manual&quot; title=&quot;&quot;&gt;Plugin&lt;/a&gt; oder das &lt;code&gt;external&lt;/code&gt;-&lt;a href=&quot;https://github.com/marcan/certbot-external&quot; title=&quot;GitHub - marcan/certbot-external: Certbot plugin that uses an external shell script for domain validation · GitHub&quot;&gt;Plugin&lt;/a&gt; in Betracht.&lt;/p&gt;

&lt;h3 id=&quot;installation-des-zertifikats&quot;&gt;Installation des Zertifikats&lt;/h3&gt;

&lt;p&gt;Das bereits - für den Webserver - vorhandene oder neu erhaltene Zertifikat und der zugehörige Schlüssel (
&lt;em&gt;Key&lt;/em&gt;), die üblicherweise im Verzeichnis &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; liegen, können nun eingebunden werden - entweder das Zertifikat und die ganze Zertifikatskette mit allen Zwischenzertifikaten zusammen in einer Datei (&lt;code&gt;fullchain.pem&lt;/code&gt;), oder das Zertifikat (&lt;code&gt;cert.pem&lt;/code&gt;) und die Zwischenzertifikate (&lt;code&gt;chain.pem&lt;/code&gt;) getrennt, je nachdem, was die Applikation unterstützt.&lt;/p&gt;

&lt;p&gt;Nicht immer ist es aber ohne weiteres möglich, unmittelbar auf die Dateien in &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; zuzugreifen, die &lt;code&gt;root:root&lt;/code&gt; gehören und aufgrund der Verzeichnisrechte auch nur für &lt;code&gt;root&lt;/code&gt; lesbar sind. Manche Programme (bspw. der Mailserver &lt;em&gt;Exim&lt;/em&gt;) greifen nämlich auf die Zertifikate zu einem Zeitpunkt zu, zu dem sie bereits keine Root-Rechte mehr haben; und es erscheint wenig tunlich, sie in die Gruppe &lt;code&gt;root&lt;/code&gt; aufzunehmen oder gar Zertifikat und Key weltweit lesbar zu machen. Andere Programme wiederum haben ausgesprochen strikte Vorstellungen darüber, welchem Benutzer und/oder welcher Gruppe die Dateien &amp;#8220;gehören&amp;#8221; müssen und wie die Zugriffsrechte auszusehen haben (so z.B. der Newsserver &lt;em&gt;INN&lt;/em&gt;, der erwartet, dass der Key ausschließlich für den User &lt;code&gt;news&lt;/code&gt; lesbar ist). In diesen Fällen wird es m.E. unausweichlich sein, Kopien der Zertifikate und des Keys mit den passenden Rechten anzulegen.&lt;/p&gt;

&lt;h4 id=&quot;-dovecot-&quot;&gt;&lt;em&gt;Dovecot&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Der &lt;em&gt;POP3&lt;/em&gt;- und &lt;em&gt;IMAP&lt;/em&gt;-Server &lt;em&gt;Dovecot&lt;/em&gt; greift als &lt;code&gt;root&lt;/code&gt; auf die Zertifikate zu und kann - jedenfalls in seiner in &lt;em&gt;Debian Jessie&lt;/em&gt; enthaltenen Version &lt;em&gt;2.2.13&lt;/em&gt; - die Zertifikatskette (&lt;code&gt;fullchain.pem&lt;/code&gt;) verarbeiten. Es genügt also, Zertifikat und Key einzubinden und die Serverkonfiguration neu einzulesen (&lt;code&gt;service dovecot reload&lt;/code&gt;).&lt;/p&gt;

&lt;h4 id=&quot;-exim-&quot;&gt;&lt;em&gt;Exim&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Anders sieht es mit dem &lt;em&gt;SMTP&lt;/em&gt;-Server &lt;em&gt;Exim&lt;/em&gt; aus. Dieser gibt seine Root-Rechte auf, bevor er auf die TLS-Zertifikate zugreift. Immerhin kommt auch er mit &lt;code&gt;fullchain.pem&lt;/code&gt; klar.&lt;/p&gt;

&lt;p&gt;Eine Möglichkeit ist es, Zertifikat und Key in ein passendes Verzeichnis zu kopieren und dann Eigentümer und Rechte (&lt;code&gt;644&lt;/code&gt;!) anzupassen, bspw. so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/exim4
mkdir certs 
cp /etc/letsencrypt/live/domain.example/fullchain.pem /etc/exim4/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/exim4/certs/
service exim4 restart
chown Debian-exim:Debian-exim /etc/exim4/certs/
chown Debian-exim:Debian-exim /etc/exim4/certs/*
chmod 644 /etc/exim4/certs/*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ein solches Vorgehen wird dann auch bei jeder Erneuerung der Zertifikate erforderlich (s.u.)!&lt;/p&gt;

&lt;p&gt;Danach genügt es, die Serverkonfiguration neu zu laden (&lt;code&gt;service exim4 reload&lt;/code&gt;) und sich dann zu Testzwecken auf Port 25 zu verbinden und nach dem &lt;code&gt;EHLO&lt;/code&gt; ein &lt;code&gt;STARTTLS&lt;/code&gt; abzusetzen.&lt;/p&gt;

&lt;h4 id=&quot;-inn-&quot;&gt;&lt;em&gt;INN&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;INN&lt;/em&gt; stellt - jedenfalls in der in &lt;em&gt;Debian Jessie&lt;/em&gt; enthaltenen Version &lt;em&gt;2.5.4&lt;/em&gt; - ganz besondere Ansprüche: jedenfalls der Key muss für den Benutzer &lt;code&gt;news&lt;/code&gt; lesbar sein, und er benötigt &lt;code&gt;cert.pem&lt;/code&gt; und &lt;code&gt;chain.pem&lt;/code&gt; getrennt.&lt;/p&gt;

&lt;p&gt;Umsetzen könnte man das bspw. so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/news
mkdir certs 
cp /etc/letsencrypt/live/domain.example/cert.pem /etc/news/certs/
cp /etc/letsencrypt/live/domain.example/chain.pem /etc/news/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/news/certs/
chown news:news /etc/news/certs/*
chmod 600 /etc/news/certs/*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auch hier muss man dieses Vorgehen für eine Erneuerung der Zertifikate im Blick behalten (s.u.).&lt;/p&gt;

&lt;p&gt;Ein Einlesen der &lt;code&gt;inn.conf&lt;/code&gt; später (&lt;code&gt;service inn2 restart&lt;/code&gt;) sollte dann alles funktionieren wie geplant.&lt;/p&gt;

&lt;h3 id=&quot;zertifikat-updates&quot;&gt;Zertifikat-Updates&lt;/h3&gt;

&lt;p&gt;Die nunmehr im Dateisystem verstreuten Zertifikatskopien müssen nach jeder Erneuerung des Zertifikats gleichfalls erneuert werden, damit nicht ein ungültiges Zertifikat ausgeliefert wird. Sinnvollerweise geschieht das ebenso automatisiert wie die Erneuerung des Zertifikats; hilfreich dabei die Möglichkeit, &lt;code&gt;letsencrypt&lt;/code&gt; (bzw. &lt;code&gt;certbot&lt;/code&gt;) mittels &lt;code&gt;--post-hook&lt;/code&gt; nach einem Zertifikatsaustausch ein Script ablaufen zu lassen.&lt;/p&gt;

&lt;h4 id=&quot;-exim-&quot;&gt;&lt;em&gt;Exim&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Man könnte sich daher bspw. eine Datei &lt;code&gt;/usr/local/bin/certbot-exim4-renew.sh&lt;/code&gt; mit folgendem Inhalt anlegen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/dash
cp /etc/letsencrypt/live/domain.example/fullchain.pem /etc/exim4/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/exim4/certs/
service exim4 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dazu passt dann ein &lt;em&gt;Cron&lt;/em&gt;-Eintrag der folgenden Art:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;certbot certonly --quiet -n --webroot -w /var/www/domain.example -d domain.example --keep-until-expiring --post-hook /usr/local/bin/certbot-exim4-renew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Damit wird versucht, das Zertifikat für diesen Hostnamen (&lt;code&gt;domain.example&lt;/code&gt;) zu erneuern, jedoch nur, wenn es der Erneuerung bedürftig ist.&lt;/p&gt;

&lt;p&gt;Der Aufruf sollte in der &lt;em&gt;Crontab&lt;/em&gt; zeitlich &lt;em&gt;vor&lt;/em&gt; dem allgemeinen Aufruf &lt;code&gt;certbot renew --quiet&lt;/code&gt; erfolgen, damit erst das spezielle Zertifikat aktualisiert (und ggf. umkopiert) wird und danach die übrigen.&lt;/p&gt;

&lt;h4 id=&quot;-inn-&quot;&gt;&lt;em&gt;INN&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Für den &lt;em&gt;INN&lt;/em&gt; sähe diese Lösung analog mit einer Datei &lt;code&gt;/usr/local/bin/certbot-inn2-renew.sh&lt;/code&gt; so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/dash
cp /etc/letsencrypt/live/domain.example/cert.pem /etc/news/certs
cp /etc/letsencrypt/live/domain.example/chain.pem /etc/news/certs
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/news/certs
cd /etc/news/certs
chown news:news *.pem
chmod 600 *.pem
service inn2 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der &lt;em&gt;Cron&lt;/em&gt;-Eintrag wäre dann entsprechend:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;certbot certonly --quiet -n --webroot -w /var/www/domain.example -d domain.example --keep-until-expiring --post-hook /usr/local/bin/certbot-inn2-renew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auch dieser Eintrag muss zeitlich &lt;em&gt;vor&lt;/em&gt; dem allgemeinen Aufruf &lt;code&gt;certbot renew --quiet&lt;/code&gt; liegen.&lt;/p&gt;

&lt;h3 id=&quot;und-ihr-&quot;&gt;Und ihr?&lt;/h3&gt;

&lt;p&gt;So richtig optimal erscheinen mir diese Lösungen noch nicht. Gibt es bessere Ideen? Andere Erfahrungen?&lt;/p&gt;

&lt;p&gt;Nutzt ihr &lt;em&gt;letsencrypt&lt;/em&gt; noch für andere Dienste als die oben genannten?&lt;/p&gt;

&lt;p&gt;An Euren Erfahrungen und Lösungen wäre ich interessiert und freue mich daher über Kommentare, Hinweise und Ergänzungen.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/ab58b7fdf4c749689ad4f6dde41d970a&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 30 Aug 2016 14:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1943-guid.html</guid>
    <category>anleitung</category>
<category>debian</category>
<category>dovecot</category>
<category>exim</category>
<category>followerpower</category>
<category>inn</category>
<category>jessie</category>
<category>ssl</category>

</item>
<item>
    <title>Von Wheezy zu Jessie</title>
    <link>https://netz-rettung-recht.de/archives/1931-Von-Wheezy-zu-Jessie.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1931-Von-Wheezy-zu-Jessie.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1931</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1931</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Heute bin ich - fast 16 Monate nach dem Release - endlich dazu gekommen, den heimischen Server von &lt;em&gt;Debian Wheezy&lt;/em&gt; nach &lt;em&gt;Jessie&lt;/em&gt; (&lt;em&gt;Debian 8.0&lt;/em&gt;) zu aktualisieren. Wie üblich nahm das Distributions-Upgrade - schon durch den Download der aktualisierten Pakete und dann durch deren Installation - einige Zeit in Anspruch, verlief aber weitgehend problemlos.
Erfreulich vor allem, dass der Wechsel auf &lt;em&gt;systemd&lt;/em&gt; keine erkennbaren Schwierigkeiten mit sich brachte. Endlich ist jetzt auch zuhause &lt;code&gt;service [whatever] status&lt;/code&gt; gesprächiger.&lt;/p&gt;

&lt;p&gt;Größere Schwierigkeiten ergaben sich nicht; teilweise waren durch den Wechsel von &lt;em&gt;Apache 2.2&lt;/em&gt; auf &lt;em&gt;Apache 2.4&lt;/em&gt; Änderungen an der &lt;em&gt;Apache&lt;/em&gt;-Konfiguration erforderlich, aber da ich kaum Webpräsenzen konfiguriert habe, hielt sich das im Rahmen. Dem Account &lt;em&gt;uucp&lt;/em&gt; musste ich statt &lt;code&gt;/usr/sbin/nologin&lt;/code&gt; wieder eine Shell verpassen, damit die Cronjobs laufen - darauf wurde aber eigentlich in den Release-Notes hingewiesen -, und die &lt;em&gt;Dovecot&lt;/em&gt;-Konfiguration brauchte mehrfache Eingriffe, bis wieder alles lief; ich meine, dass dort ohne Rückfrage einfach aktualisierte Konfigurationsdateien eingespielt wurden, so dass Änderungen teilweise überschrieben wurden, möglicherweise weil die Konfigurationsdateien nicht korrekt als &lt;code&gt;conffiles&lt;/code&gt; markiert waren. Das ließ sich aber schnell wieder beheben.&lt;/p&gt;

&lt;p&gt;Glücklicherweise hielten sich diesmal auch die nachzuführenden Änderungen in &lt;code&gt;conffiles&lt;/code&gt;, die sich in der Distribution geändert haben, aber auch von mir editiert worden waren, in Grenzen; das ist sonst erfahrungsgemäß der bei weitem größte Aufwand bei einem Upgrade.&lt;/p&gt;

&lt;p&gt;Nun bin ich zuversichtlich, dass zumindest alle wesentlichen Dienste wieder laufen - jetzt in der jeweils aktuellsten (Debian-)Version. Also steht kein Zeitdruck zu befürchten, wenn der LTS-Support für &lt;em&gt;Wheezy&lt;/em&gt; ausläuft oder &lt;em&gt;Stretch&lt;/em&gt; released wird.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/296ab7a08e6a4f52b2dc642f083710a1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 15 Aug 2016 18:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1931-guid.html</guid>
    <category>debian</category>
<category>jessie</category>

</item>
<item>
    <title>PHP-FPM - jetzt mit mod_proxy_fcgi</title>
    <link>https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1909</wfw:comment>

    <slash:comments>7</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1909</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Vergangene Woche hatte ich darüber &lt;a href=&quot;https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt;, wie man - unter &lt;em&gt;Debian Jessie&lt;/em&gt; - &lt;em&gt;PHP-FPM&lt;/em&gt; mit &lt;code&gt;mod_fastcgi&lt;/code&gt; installieren kann. In den &lt;a href=&quot;https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html#c4081&quot; title=&quot;&quot;&gt;Kommentaren&lt;/a&gt; hatte &lt;a href=&quot;https://www.svenhartge.de/&quot; title=&quot;&quot;&gt;Sven&lt;/a&gt; mir dann nachfolgend erläutert, wie sich die Einbindung einfacher und besser über &lt;code&gt;mod_proxy_fcgi&lt;/code&gt; lösen lässt, vorausgesetzt, man hat (wie in &lt;em&gt;Debian Jessie&lt;/em&gt;) einen &lt;em&gt;Apache 2.4&lt;/em&gt; vor sich.&lt;/p&gt;

&lt;p&gt;Da mir das ebenfalls vorzugswürdig erscheint, beschreiben ich in der Folge nunmehr diese Variante.&lt;/p&gt;

&lt;h3 id=&quot;-php-fpm-und-mod-proxy-fcgi-installieren&quot;&gt;&lt;em&gt;PHP-FPM&lt;/em&gt; und &lt;code&gt;mod_proxy_fcgi&lt;/code&gt; installieren&lt;/h3&gt;

&lt;p&gt;Unter &lt;em&gt;Debian Jessie&lt;/em&gt; ist die Installation der Pakete hinreichend einfach:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get install php5-fpm php5
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;Debian&lt;/em&gt; hinterlegt dabei die &lt;code&gt;php.ini&lt;/code&gt; für die &lt;em&gt;FastCGI&lt;/em&gt;-Prozesse unter &lt;code&gt;/etc/php5/fpm/php.ini&lt;/code&gt; und die Konfiguration für &lt;em&gt;FPM&lt;/em&gt; unter &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt;, ergänzt u.a. um die Konfiguration installierter Module in &lt;code&gt;/etc/php5/fpm/conf.d/&lt;/code&gt;, wie man das so kennt.&lt;/p&gt;

&lt;p&gt;Im Verzeichnis &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; sind dann die einzelnen Pools definiert, die ebenfalls in die &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt; inkludiert werden, standardmäßig nur der Pool des Benutzers &lt;code&gt;www-data&lt;/code&gt;, unter dem der Webserver läuft.&lt;/p&gt;

&lt;h3 id=&quot;-mod-proxy-fcgi-f-r-php-fpm-konfigurieren&quot;&gt;&lt;code&gt;mod_proxy_fcgi&lt;/code&gt; für &lt;em&gt;PHP-FPM&lt;/em&gt; konfigurieren&lt;/h3&gt;

&lt;p&gt;Serverweit lässt sich &lt;em&gt;PHP-FPM&lt;/em&gt; dann wie folgt in einer neuen Datei &lt;code&gt;/etc/apache2/conf-available/php5-fpm.conf&lt;/code&gt; konfigurieren:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_proxy_fcgi.c&amp;gt;
    &amp;lt;Proxy &quot;unix:/var/run/php5-fpm.sock|fcgi://php-fpm&quot;&amp;gt;
        # we must declare a (any) parameter in here 
        # or it won&#039;t register the proxy ahead of time
        ProxySet disablereuse=off
    &amp;lt;/Proxy&amp;gt;
    &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
        SetHandler proxy:fcgi://php-fpm
    &amp;lt;/FilesMatch&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auf diese Weise werden auf &lt;code&gt;.php&lt;/code&gt; endende Dateien an den darüber definierten Prxoy durchgereicht. Wer will, kann stattdessen bspw. auch &lt;code&gt;&amp;lt;FilesMatch &quot;.+\.ph(p[345]?|t|tml)$&quot;&amp;gt;&lt;/code&gt; verwenden, wie Sven das empfohlen hat; das deckt auch alle anderen gebräuchlichen Endungen für &lt;em&gt;PHP&lt;/em&gt;-Scripts ab.&lt;/p&gt;

&lt;p&gt;Standardmäßig sorgt Debian übrigens dafür, dass das - mitinstallierte - Modul &lt;code&gt;mod_proxy&lt;/code&gt; &lt;em&gt;nicht&lt;/em&gt; als &lt;em&gt;forward proxy&lt;/em&gt; arbeitet; das ist in der Datei &lt;code&gt;/etc/apache2/mods-available/proxy.conf&lt;/code&gt; konfiguriert und stellt also kein Problem dar.&lt;/p&gt;

&lt;p&gt;Nach Aktivieren des Moduls und der Konfiguration vermittels &lt;code&gt;a2enmod proxy_fcgi&lt;/code&gt; und &lt;code&gt;a2enconf php5-fpm&lt;/code&gt; sowie einem Restart des Webservers (&lt;code&gt;service apache2 restart&lt;/code&gt;) sollte PHP nun zur Verfügung stehen.&lt;/p&gt;

&lt;h3 id=&quot;pools-f-r-einzelne-benutzer-einrichten&quot;&gt;Pools für einzelne Benutzer einrichten&lt;/h3&gt;

&lt;p&gt;Um nun verschiedene Pools für verschiedene Benutzer einzurichten, bedarf es neben einer passenden Konfiguration des jeweiligen Pools in &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; und eines geänderten Aufrufs in jedem &lt;em&gt;virtual host&lt;/em&gt;, der diesem Benutzer zugeordnet ist.&lt;/p&gt;

&lt;p&gt;Am einfachsten kopiert man sich die bestehende Konfiguration für den Pool &lt;code&gt;www&lt;/code&gt; und wandelt sie ab:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/php5/fpm/pool.d
cp www.conf user1.conf
vim user1.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Folgende Teile der Konfiguration müssen ersetzt werden: der Name des Pools, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;group&lt;/code&gt; und &lt;code&gt;listen&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;; Start a new pool named &#039;user1&#039;.
; the variable $pool can we used in any directive and will be replaced by the
; pool name (&#039;user1&#039; here)
[user1]

[...]

user = user1
group = users

[...]

listen = /var/run/php5-fpm-user1.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Selbstverständlich können auch andere, für diesen Pool spezifische Änderungen vorgenommen werden&lt;/p&gt;

&lt;p&gt;Und danach bekommt der bspw. in &lt;code&gt;/etc/apache2/sites-available/user1-domain.example&lt;/code&gt; konfigurierte &lt;em&gt;virtual host&lt;/em&gt; noch folgende Ergänzung (zwischen &lt;code&gt;&amp;lt;VirtualHost ...&amp;gt;&lt;/code&gt; und &lt;code&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_proxy_fcgi.c&amp;gt;
    &amp;lt;Proxy &quot;unix:/var/run/php5-fpm-user1.sock|fcgi://php-fpm-user1&quot;&amp;gt;
        # we must declare a (any) parameter in here 
        # or it won&#039;t register the proxy ahead of time
        ProxySet disablereuse=off
    &amp;lt;/Proxy&amp;gt;
    &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
        SetHandler proxy:fcgi://php-fpm-user1
    &amp;lt;/FilesMatch&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In diesem &lt;em&gt;virtual host&lt;/em&gt; kommuniziert der &lt;em&gt;Apache&lt;/em&gt; also nicht mit dem &lt;em&gt;FastCGI&lt;/em&gt;-Server über &lt;code&gt;/var/run/php5-fpm.sock&lt;/code&gt;, sondern über &lt;code&gt;/var/run/php5-fpm-user1.sock&lt;/code&gt;, und den haben wir ja anders konfiguriert. Ein &lt;code&gt;service apache2 restart&lt;/code&gt; bzw. &lt;code&gt;service php5-fpm restart&lt;/code&gt; später sollte die geänderte Konfiguration zur Verfügung stehen.&lt;/p&gt;

&lt;p&gt;Soll PHP in mehreren &lt;em&gt;virtual hosts&lt;/em&gt; unter derselben Benutzerkennung laufen, empfiehlt es sich, die o.g. Konfiguration in eine eigene Datei (bspw. &lt;code&gt;/etc/apache2/sites-available/user1.fcgi&lt;/code&gt;) auszulagern und diese Datei dann in die &lt;em&gt;virtual host&lt;/em&gt;-Konfiguration einzubinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Include /etc/apache2/sites-available/user1.fcg
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das spart nicht nur Tipparbeit, sondern erleichtert auch spätere Änderungen sehr.&lt;/p&gt;

&lt;h3 id=&quot;die-installation-testen&quot;&gt;Die Installation testen&lt;/h3&gt;

&lt;p&gt;Am einfachsten gestaltet sich der Test, wenn man im Webroot des Servers (&lt;em&gt;Debian Jessie&lt;/em&gt;: &lt;code&gt;/var/www/html/&lt;/code&gt;)
und der einzelnen &lt;em&gt;virtual hosts&lt;/em&gt; jeweils eine Datei &lt;code&gt;test.php&lt;/code&gt; speichert, die nur &lt;code&gt;phpinfo()&lt;/code&gt; aufruft:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In der Ausgabe von &lt;code&gt;phpinfo()&lt;/code&gt; wird angezeigt, unter welchem Benutzer das Script ausgeführt wird.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vielen Dank an Sven für den hilfreichen Tip!&lt;/em&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/486e1796375b4333b55dd718167e842b&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 26 Apr 2016 05:50:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1909-guid.html</guid>
    <category>anleitung</category>
<category>debian</category>
<category>jessie</category>
<category>php</category>

</item>
<item>
    <title>PHP-FPM mit Debian Jessie</title>
    <link>https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1905</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1905</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Statische Webseiten sind nett (und durchaus wieder &lt;a href=&quot;https://netz-rettung-recht.de/archives/1755-Generatoren-fuer-statische-Websites.html&quot; title=&quot;&quot;&gt;im Kommen&lt;/a&gt;), aber zumindest für manche Zwecke sind dynamisch generierte Seiten und die auf diese Weise ermöglichte Interaktivität doch dann besser oder gar notwendig. Facebook, bspw., würde sich als statische Seite dann doch eher schwierig gestalten.&lt;/p&gt;

&lt;h3 id=&quot;die-welt-dynamischer-webseiten&quot;&gt;Die Welt dynamischer Webseiten&lt;/h3&gt;

&lt;h4 id=&quot;scriptsprachen&quot;&gt;Scriptsprachen&lt;/h4&gt;

&lt;p&gt;Dynamisch generierte Seiten bedingen, dass beim Aufruf einer Webseite nicht nur eine auf dem Server abgelegte Datei angezeigt wird, sondern dass ein Programm dort läuft, das die Ausgabe mehr oder weniger live generiert. Das hat ganz andere Implikationen für die Sicherheit des Servers, denn nunmehr läuft dort von außen erreichbarer Code, der schlimmstenfalls noch durch die Nutzer selbst aufgespielt werden kann. Nicht jeder, der seine ersten Gehversuche mit Scripts macht, hat dabei auch Fragen der IT-Sicherheit ausreichend im Blick - um das Problem einmal stark verharmlosend zu beschreiben. Gerade PHP hat nicht den Ruf, zumindest in den ersten Jahren seiner Entwicklung großes Gewicht auf das Fördern oder gar Erzwingen sicherer Praktiken gelegt zu haben, und viele lern(t)en es vor allem als eine Art Templating-Sprache kennen, die man irgendwie in seine HTML-Seiten einbettet, um ihnen damit eine erweiterte Funktionalität zu verleihen, ohne dabei groß an Konsequenzen zu denken (schuldig, euer Ehren!).&lt;/p&gt;

&lt;h4 id=&quot;rechteprobleme&quot;&gt;Rechteprobleme&lt;/h4&gt;

&lt;p&gt;Besondere Schwierigkeiten kommen hinzu, wenn mehr als ein Benutzer auf dem Server Scripts nutzen will. Denn wenn der Webserver bzw. der von diesem gestartete Interpreter das Script ausführen will, muss er es lesen können. Dann muss er aber - logischerweise - auch die Scripts aller anderen nutzer lesen können, was bedeutet, dass Nutzer A ein Sript schreiben kann, mit dem er sich die Scripts von Benutzer B anzeigen lassen kann, samt aller dort gespeicherten Informationen (Datenbankpassworte usw.), ebenso wie Dateien, die Benutzer B anlegt. Und wenn das Script irgendwelche Dateien anlegt (man denke an hochgeladene Bilder), dann werden diese Dateien unter der Nutzerkennung des Webservers angelegt, so dass der Benutzer dann keinen vollen Zugriff darauf hat. Das ist alles etwas unschön, weshalb man schon bald die Möglichkeit geschaffen hat, Scripts (sei es Perl, sei es Python, sei es PHP) unter der Benutzerkennung des jeweiligen Nutzers laufen zu lassen, dem das Script &amp;#8220;gehört&amp;#8221;.&lt;/p&gt;

&lt;h4 id=&quot;-suexec-und-suphp-&quot;&gt;&lt;em&gt;suexec&lt;/em&gt; und &lt;em&gt;suphp&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Das schafft zwar andere Probleme, insbesondere im Bereich der Performance, denn nun kann ein Webserverprozess nicht mehr beliebig viele Scripts in parallelen Threads abarbeiten, weil diese ja vielleicht verschiedenen Nutzern gehören, so dass für jedes Script ein neuer Interpreter-Prozess gestartet werden muss, aber es ist doch in der Regel vorzugswürdig.&lt;/p&gt;

&lt;p&gt;Für Scripts, die über die &lt;em&gt;CGI&lt;/em&gt;-Schnittstelle (ja, ich weiß, das &amp;#8220;I&amp;#8221; steht schon für &amp;#8220;Interface&amp;#8221;) gestartet werden, stellt &lt;em&gt;suexec&lt;/em&gt; die entsprechende Funktionalität bereit. Für PHP tat das traditionell &lt;em&gt;suphp&lt;/em&gt;. &lt;em&gt;suphp&lt;/em&gt; gibt es aber in &lt;em&gt;Debian Jessie&lt;/em&gt; nicht mehr. Was also tun?&lt;/p&gt;

&lt;p&gt;Als Lösung bietet sich &lt;strong&gt;&lt;a href=&quot;http://php-fpm.org/&quot; title=&quot;&quot;&gt;PHP-FPM&lt;/a&gt;&lt;/strong&gt; an.&lt;/p&gt;

&lt;h3 id=&quot;-php-fpm-&quot;&gt;&lt;em&gt;PHP-FPM&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;FPM&lt;/em&gt; steht dabei für &lt;em&gt;FastCGI Process Manager&lt;/em&gt; und ist eine sehr angenehme Lösung, um PHP als &lt;em&gt;FastCGI&lt;/em&gt; einzubinden. &lt;em&gt;FastCGI&lt;/em&gt; ist ein Mittelding zwischen der Einbindung per &lt;em&gt;mod_php&lt;/em&gt;, also als Modul im Webserver, und als &lt;em&gt;CGI&lt;/em&gt;, so dass für jeden Aufruf eines PHP-Scripts ein eigener Prozess gestartet werden muss: es werden einige &lt;em&gt;FastCGI&lt;/em&gt;-Prozesse gestartet, die in einem Pool vorgehalten werden, und wenn ein PHP-Script aufgerufen wird, wird der Aufruf vom Webserver an den schon laufenden Prozess weitergereicht. Das erspart den sonst für jeden Aufruf notwendigen Start des Interpreters - und es bietet die Möglichkeit, pro Pool festzulegen, unter welcher Benutzerkennung die Prozesse dieses Pools laufen sollen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hinweis&lt;/strong&gt;: Der folgende Vorschlag ist nicht der einzige Weg, &lt;em&gt;PHP-FPM&lt;/em&gt; zu installieren. Eine &lt;strong&gt;bessere Lösung&lt;/strong&gt; unter Verwendung von &lt;em&gt;mod&amp;#95;proxy&amp;#95;fcgi&lt;/em&gt;, auf die ich in den Kommentaren hingewiesen wurde, habe ich mittlerweile &lt;a href=&quot;https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html&quot; title=&quot;&quot;&gt;auch beschrieben&lt;/a&gt;. Dieser andere Weg setzt &lt;em&gt;Apache 2.4.x&lt;/em&gt; voraus, benötigt aber kein Paket aus dem nicht-freien &lt;em&gt;Debian&lt;/em&gt;-Repository. &lt;strong&gt;Insgesamt erscheint mir dieser andere Weg vorzugswürdig.&lt;/strong&gt;&lt;/p&gt;

&lt;h4 id=&quot;-php-fpm-installieren&quot;&gt;&lt;em&gt;PHP-FPM&lt;/em&gt; installieren&lt;/h4&gt;

&lt;p&gt;Unter &lt;em&gt;Debian Jessie&lt;/em&gt; ist die Installation der Pakete hinreichend einfach:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get install libapache2-mod-fastcgi php5-fpm php5
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;libapache2-mod-fastcgi&lt;/code&gt; kommt hier aus dem &lt;code&gt;non-free&lt;/code&gt;-Repository, das dementsprechend eingebunden sein muss.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Debian&lt;/em&gt; hinterlegt dabei die &lt;code&gt;php.ini&lt;/code&gt; für die &lt;em&gt;FastCGI&lt;/em&gt;-Prozesse unter &lt;code&gt;/etc/php5/fpm/php.ini&lt;/code&gt; und die Konfiguration für &lt;em&gt;FPM&lt;/em&gt; unter &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt;, ergänzt u.a. um die Konfiguration installierter Module in &lt;code&gt;/etc/php5/fpm/conf.d/&lt;/code&gt;, wie man das so kennt.&lt;/p&gt;

&lt;p&gt;Im Verzeichnis &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; sind dann die einzelnen Pools definiert, die ebenfalls in die &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt; inkludiert werden, standardmäßig nur der Pool des Benutzers &lt;code&gt;www-data&lt;/code&gt;, unter dem der Webserver läuft.&lt;/p&gt;

&lt;h4 id=&quot;-fastcgi-f-r-php-fpm-konfigurieren&quot;&gt;&lt;em&gt;FastCGI&lt;/em&gt; für &lt;em&gt;PHP-FPM&lt;/em&gt; konfigurieren&lt;/h4&gt;

&lt;p&gt;Wenn man möchte, kann man die bestehende Konfigurationsdatei sichern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cp /etc/apache2/mods-available/fastcgi.conf /etc/apache2/mods-available/fastcgi.conf.backup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;und danach sie danach mittels &lt;code&gt;vim /etc/apache2/mods-available/fastcgi.conf&lt;/code&gt; neu befüllen wie folgt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_fastcgi.c&amp;gt;
    AddType application/x-httpd-fastphp5 .php
    Action application/x-httpd-fastphp5 /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
    &amp;lt;Directory /usr/lib/cgi-bin&amp;gt;
        Require all granted
    &amp;lt;/Directory&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auf diese Weise bekommen auf &lt;code&gt;.php&lt;/code&gt; endende Dateien den Typ &lt;code&gt;x-httpd-fastphp5&lt;/code&gt; zugewiesen, der über den Handler /&lt;code&gt;php5-fcgi&lt;/code&gt; aufgerufen wird, der wiederum auf &lt;code&gt;/usr/lib/cgi-bin/php5-fcgi&lt;/code&gt; zeigt, was aber ebenfalls nicht existiert, so dass &lt;em&gt;Apache&lt;/em&gt; stattdessen alles dem externen &lt;em&gt;FastCGI&lt;/em&gt;-Server zuwirft, der über den Socket &lt;code&gt;/var/run/php5-fpm.sock&lt;/code&gt; kommuniziert.&lt;/p&gt;

&lt;p&gt;Nach Aktivieren der notwendigen Module mittels &lt;code&gt;a2enmod fastcgi actions alias&lt;/code&gt; und einem Restart des Webservers (&lt;code&gt;service apache2 restart&lt;/code&gt;) sollte PHP zur Verfügung stehen.&lt;/p&gt;

&lt;h4 id=&quot;pools-f-r-einzelne-benutzer-einrichten&quot;&gt;Pools für einzelne Benutzer einrichten&lt;/h4&gt;

&lt;p&gt;Um nun verschiedene Pools für verschiedene Benutzer einzurichten, bedarf es neben einer passenden Konfiguration des jeweiligen Pools in &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; und eines geänderten Aufrufs in jedem &lt;em&gt;virtual host&lt;/em&gt;, der diesem Benutzer zugeordnet ist.&lt;/p&gt;

&lt;p&gt;Am einfachsten kopiert man sich die bestehende Konfiguration für den Pool &lt;code&gt;www&lt;/code&gt; und wandelt sie ab:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/php5/fpm/pool.d
cp www.conf user1.conf
vim user1.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Folgende Teile der Konfiguration müssen ersetzt werden: der Name des Pools, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;group&lt;/code&gt; und &lt;code&gt;listen&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;; Start a new pool named &#039;user1&#039;.
; the variable $pool can we used in any directive and will be replaced by the
; pool name (&#039;user1&#039; here)
[user1]

[...]

user = user1
group = users

[...]

listen = /var/run/php5-fpm-user1.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Selbstverständlich können auch andere, für diesen Pool spezifische Änderungen vorgenommen werden&lt;/p&gt;

&lt;p&gt;Und danach bekommt der bspw. in &lt;code&gt;/etc/apache2/sites-available/user1-domain.example&lt;/code&gt; konfigurierte &lt;em&gt;virtual host&lt;/em&gt; noch folgende Ergänzung (zwischen &lt;code&gt;&amp;lt;VirtualHost ...&amp;gt;&lt;/code&gt; und &lt;code&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_fastcgi.c&amp;gt;
    AddType application/x-httpd-fastphp5 .php
    Action application/x-httpd-fastphp5 /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi-user1
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-user1 -socket /var/run/php5-fpm-user1.sock -pass-header Authorization
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In diesem &lt;em&gt;virtual host&lt;/em&gt; kommuniziert der &lt;em&gt;Apache&lt;/em&gt; also nicht mit dem &lt;em&gt;FastCGI&lt;/em&gt;-Server über &lt;code&gt;/var/run/php5-fpm.sock&lt;/code&gt;, sondern über &lt;code&gt;/var/run/php5-fpm-user1.sock&lt;/code&gt;, und den haben wir ja anders konfiguriert. Ein &lt;code&gt;service apache2 restart&lt;/code&gt; bzw. &lt;code&gt;service php5-fpm restart&lt;/code&gt; später sollte die geänderte Konfiguration zur Verfügung stehen.&lt;/p&gt;

&lt;p&gt;Soll PHP in mehreren &lt;em&gt;virtual hosts&lt;/em&gt; unter derselben Benutzerkennung laufen, empfiehlt es sich, die o.g. Konfiguration in eine eigene Datei (bspw. &lt;code&gt;/etc/apache2/sites-available/user1.fcgi&lt;/code&gt;) auszulagern und diese Datei dann in die &lt;em&gt;virtual host&lt;/em&gt;-Konfiguration einzubinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Include /etc/apache2/sites-available/user1.fcg
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das spart nicht nur Tipparbeit, sondern erleichtert auch spätere Änderungen sehr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wichtig&lt;/strong&gt;: Der Eintrag &lt;code&gt;FastCgiExternalServer&lt;/code&gt; darf dabei nur einmal erfolgen, also nicht pro &lt;em&gt;vhost&lt;/em&gt; wiederholt werden.&lt;/p&gt;

&lt;h4 id=&quot;die-installation-testen&quot;&gt;Die Installation testen&lt;/h4&gt;

&lt;p&gt;Am einfachsten gestaltet sich der Test, wenn man im Webroot des Servers (&lt;em&gt;Debian Jessie&lt;/em&gt;: &lt;code&gt;/var/www/html/&lt;/code&gt;)
und der einzelnen &lt;em&gt;virtual hosts&lt;/em&gt; jeweils eine Datei &lt;code&gt;test.php&lt;/code&gt; speichert, die nur &lt;code&gt;phpinfo()&lt;/code&gt; aufruft:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In der Ausgabe von &lt;code&gt;phpinfo()&lt;/code&gt; wird angezeigt, unter welchem Benutzer das Script ausgeführt wird.&lt;/p&gt;

&lt;h3 id=&quot;weiterer-lesestoff&quot;&gt;Weiterer Lesestoff&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Alex Fornuto&lt;/em&gt; bei &lt;em&gt;linode&lt;/em&gt;: &lt;a href=&quot;https://www.linode.com/docs/websites/apache/install-php-fpm-and-apache-on-debian-8&quot; title=&quot;403 Forbidden&quot;&gt;Install PHP-FPM and Apache on Debian 8 (Jessie)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Apache httpd&lt;/em&gt; Wiki: &lt;a href=&quot;http://wiki.apache.org/httpd/PHP-FPM&quot; title=&quot;301 Moved Permanently&quot;&gt;High-performance PHP on apache httpd 2.4.x using mod&amp;#95;proxy&amp;#95;fcgi and php-fpm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/9bcac885cb2d41e483ab77fc7acff8b2&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 18 Apr 2016 06:45:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1905-guid.html</guid>
    <category>debian</category>
<category>jessie</category>
<category>php</category>

</item>
<item>
    <title>SSL/TLS mit Let's Encrypt</title>
    <link>https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1903</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1903</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Bereits &lt;a href=&quot;https://netz-rettung-recht.de/archives/1901-Der-eigene-Webserver-mit-SSLTLS.html&quot; title=&quot;&quot;&gt;vergangene Woche&lt;/a&gt; berichtete ich von meinen Irrungen und Wirrungen des letzten Jahrzehnts mit SSL/TLS im Web. Erst Ende 2015 hatte ich mich aufgerafft, über &lt;a href=&quot;https://www.startssl.com/&quot; title=&quot;Notice to all StartCom subscribers&quot;&gt;StartCom&lt;/a&gt; für einige Domains Zertifikate erstellen zu lassen, und parallel die Berichterstattung über &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; verfolgt.&lt;/p&gt;

&lt;p&gt;Der Workflow für die Erstellung und Pflege von HTTPS-Zertifikaten kann schnell komplex werden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Am Anfang steht die Erzeugung eines Schlüsselpaares, denn das spätere Zertifikat wird nur derjenige verwenden können, der auch den passenden privaten Schlüssel hat.&lt;/li&gt;
&lt;li&gt;Dann ist für jedes Zertifikat ein &lt;em&gt;Certificate Signing Request&lt;/em&gt; (&lt;em&gt;CSR&lt;/em&gt;) zu erstellen; das ist quasi die Roh-Form des späteren Zertifikats mit den notwendigen Informationen, die darin enthalten sein sollen.&lt;/li&gt;
&lt;li&gt;Dieser &lt;em&gt;CSR&lt;/em&gt; muss dann von der Zertifierungsstelle (Certificate Authority, &lt;em&gt;CA&lt;/em&gt;) digital signiert werden.&lt;/li&gt;
&lt;li&gt;Das so entstandene Zertifikat muss gespeichert und in die Webserver-Konfiguration eingebunden werden.&lt;/li&gt;
&lt;li&gt;Der ganze Ablauf ist nur zielführend, wenn die &lt;em&gt;CA&lt;/em&gt; von den verbreiteten Browsern anerkannt ist, den von ihr signierten Zertifikaten also vertraut wird. Dafür wollen die meisten &lt;em&gt;CAs&lt;/em&gt; Geld. Zudem müssen sie sich über einen mehr oder weniger aufwendigen Weg zumindest vergewissern, dass derjenige, der ein Zertifikat für einen bestimmten Hostnamen ausgestellt haben möchte, über diesen auch verfügen kann.&lt;/li&gt;
&lt;li&gt;Zertifikate werden in der Regel nur für einen begrenzten Zeitraum - meistens ein Jahr - ausgestellt. Danach müssen sie (rechtzeitig!) verlängert werden.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://letsencrypt.org/&quot; title=&quot; Let&amp;#39;s Encrypt&quot;&gt;Let&amp;#8217;s Encrypt&lt;/a&gt;&lt;/em&gt; ist angetreten, diese Abläufe weitestmöglich zu vereinfachen.&lt;/p&gt;

&lt;h3 id=&quot;-let-s-encrypt-die-prinzipien&quot;&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; - die Prinzipien&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; arbeitet kostenlos und veröffentlicht die verwendeten Schnittstellen. Es stellt eine &lt;em&gt;CA&lt;/em&gt; zur Verfügung, die automatisch Zertifikate ausstellt, nachdem sie überprüft hat, dass der Anfragende die administrative Kontrolle über den entsprechenden Hostnamen hat - beispielsweise, indem &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; verlangt, dass eine bestehende Datei auf dem Webserver unter diesem Hostnamen hinterlegt wird. Die erstellten Zertifikate werden öffentlich gemacht; es kann also jeder jederzeit nachvollziehen, wann &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; welche Zertifikate erstellt hat.&lt;/p&gt;

&lt;p&gt;Mittlerweile ist das Zwischenzertifikat von &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; nicht nur durch &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; selbst, sondern auch durch eine andere &lt;em&gt;CA&lt;/em&gt; (&lt;em&gt;IdenTrust&lt;/em&gt;) signiert und wird daher regelmäßig von den Browsern als vertrauenswürdig anerkannt. Von &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; ausgestellte Zertifikate werden also akzeptiert und führen nicht zu irgendwelchen Warnmeldungen. Sie gelten allerdings nur rund 90 Tage und müssen dann erneut werden.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; stellt Client-Software zur Verfügung, die den gesamten, einleitend dargestellten Workflow automatisiert, ermöglicht es aber auch, die notwendigen Schritte in beliebigem Umfang manuell nachzuvollziehen oder auch eigene Lösungen zu programmieren. Im vollautomatischen Modus erstellt &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; das notwendige Schlüsselpaar und den &lt;em&gt;CSR&lt;/em&gt;, überprüft, dass der Antragsteller den Hostnamen kontrolliert, stellt das Zertifikat aus und speichert es, passt die Webserver-Konfiguration an und bindet das Zertifikat ein und kann auf Wunsch rechtzeitig vor Ablauf ein neues Zertifikat erstellen.&lt;/p&gt;

&lt;h3 id=&quot;-let-s-encrypt-und-der-apache-webserver-unter-debian-jessie-&quot;&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; und der &lt;em&gt;Apache&lt;/em&gt;-Webserver unter &lt;em&gt;Debian Jessie&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Im Anschluss möchte ich einen weitgehend, aber nicht völlig automatisierten Ablauf zum Erstellen von SSL-Zertifikaten und deren Einbindung in einen &lt;em&gt;Apache&lt;/em&gt; unter &lt;em&gt;Debian Jessie&lt;/em&gt; darstellen. Es ist durchaus möglich, weit weniger auf Automatismen zu setzen; dann muss der Client auch nicht zwingend mit Root-Rechten laufen. &lt;em&gt;Matthias Gutjahr&lt;/em&gt; schildert in seinem Blog eine Möglichkeit dafür; &lt;em&gt;Dirk Deimeke&lt;/em&gt; hat eine weitere Alternative dargestellt. Beide Beiträge sind am Ende dieses Blogbeitrags verlinkt.&lt;/p&gt;

&lt;h4 id=&quot;installation&quot;&gt;Installation&lt;/h4&gt;

&lt;p&gt;Ab &lt;em&gt;Jessie&lt;/em&gt;, der derzeit stabilen &lt;em&gt;Debian&lt;/em&gt;-Version, steht &lt;code&gt;letsencrypt&lt;/code&gt; als Paket zur Verfügung, allerdings nur in den Backports. Wenn sich in der &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; also die Zeile &lt;code&gt;deb http://ftp.debian.org/debian jessie-backports main&lt;/code&gt; findet, ist die Installation daher denkbar einfach:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get -t jessie-backports install letsencrypt
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Die umfangreichen Abhängigkeiten werden mitinstalliert.&lt;/p&gt;

&lt;p&gt;Wer noch unter &lt;em&gt;Wheezy&lt;/em&gt; arbeitet, benötigt etwas mehr Vertrauen in die Macher von &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; - und Platz für ein umfangreicheres Software-Paket (&lt;code&gt;letsencrypt-auto&lt;/code&gt;), das u.a. eine komplette virtuelle &lt;em&gt;Python&lt;/em&gt;-Umgebung mit sich schleppt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /usr/local
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;letsencrypt-auto&lt;/code&gt; akzeptiert dann denselben Input wie &lt;code&gt;letsencrypt&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;zertifikat-erstellen-lassen&quot;&gt;Zertifikat erstellen lassen&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;letsencrypt&lt;/code&gt; bietet eine &lt;code&gt;ncurses&lt;/code&gt;-Oberfläche, die es ermöglicht, auf einige Kommandozeilen-Parameter zu verzichten und ggf. notwendige Abfragen im Dialog zu beantworten. Dazu gehört beim ersten Start u.a. die Angabe einer E-Mail-Adresse für eine mögliche Kontaktaufnahme und die Bestätigung der AGB, die erforderlich ist. Danach erstellt &lt;code&gt;letsencrypt&lt;/code&gt; automatisch einen Account samt Schlüsselpaar, so dass weitere Aufrufe in der Regel ohne Interaktion ablaufen können.&lt;/p&gt;

&lt;p&gt;Alle Daten werden standardmäßig unter &lt;code&gt;/etc/letsencrypt/&lt;/code&gt; abgelegt.&lt;/p&gt;

&lt;p&gt;Der folgende Aufruf fordert ein Zertifikat für die Hostnamen &lt;code&gt;domain.example&lt;/code&gt; und &lt;code&gt;www.domain.example&lt;/code&gt; an, deren Dateien auf der Platte im Verzeichnis &lt;code&gt;/var/www/domain.example&lt;/code&gt; (&lt;em&gt;Webroot&lt;/em&gt;) liegen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;letsencrypt certonly --webroot -w /var/www/domain.example/ -d domain.example -d www.domain.example
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Falls notwendig, werden Mailadresse und Zustimmung zu den AGB (&amp;#8220;Terms of Service&amp;#8221;, &amp;#8220;TOS&amp;#8221;) abgefragt und ein privater Schlüssel (bzw. das Schlüsselpaar) erstellt. Dann wird der &lt;em&gt;CSR&lt;/em&gt; an &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; geschickt, temporär eine unter &lt;code&gt;http://domain.example/&lt;/code&gt; abrufbare Datei im &lt;em&gt;Webroot&lt;/em&gt; erstellt und so geprüft, dass man wirklich die Kontrolle über diesen Hostnamen hat, das Zertifikat erstellt, unter &lt;code&gt;/etc/letsencrypt/archive/domain.example/&lt;/code&gt; gespeichert und ein Symlink von &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; nach dort erstellt.&lt;/p&gt;

&lt;p&gt;Soll das Zertifikat für weitere Hostnamen gelten, können beliebig viele Folgen von &lt;code&gt;-w webroot -d hostname&lt;/code&gt; angeschlossen werden. Es folgt jeweils auf das &lt;code&gt;-w webroot&lt;/code&gt; die Angabe der Hostnames, die zu diesem Webroot gehören.&lt;/p&gt;

&lt;h4 id=&quot;zertifikat-beim-apache-einbinden&quot;&gt;Zertifikat beim &lt;em&gt;Apache&lt;/em&gt; einbinden&lt;/h4&gt;

&lt;p&gt;Eine minimale Konfiguration für den &lt;em&gt;virtual host&lt;/em&gt; könnte im &lt;em&gt;Apache 2.4&lt;/em&gt; (&lt;em&gt;Debian Jessie&lt;/em&gt;) so aussehen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
    ServerName domain.example
    ServerAlias www.domain.example

    DocumentRoot /var/www/domain.example

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domain.example/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.example/privkey.pem
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der &lt;em&gt;Apache 2.2&lt;/em&gt;, der mit &lt;em&gt;Debian Wheezy&lt;/em&gt; ausgeliefert wird, muss Zertifikat und Zwischenzertifikat der &lt;em&gt;CA&lt;/em&gt; getrennt ausliefern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
    [...]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domain.example/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/domain.example/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.example/privkey.pem
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;zertifikate-erneuern&quot;&gt;Zertifikate erneuern&lt;/h4&gt;

&lt;p&gt;Folgender &lt;em&gt;Cronjob&lt;/em&gt; prüft täglich um 4 Uhr morgens, ob ein Zertifikat erneuert werden muss, und nimmt diese Erneuerung automatisch vor, wenn sich der Ablaufzeitpunkt nähert:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;00 4 * * * letsencrypt renew --keep-until-expiring
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;weiterer-lesestoff&quot;&gt;Weiterer Lesestoff&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt;: &lt;a href=&quot;https://letsencrypt.org/getting-started/&quot; title=&quot;Getting Started -  Let&amp;#39;s Encrypt&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wouter Verhelst im &lt;em&gt;WEBlog — Wouter’s Eclectic Blog&lt;/em&gt;: &lt;a href=&quot;http://grep.be/blog//en/computer/play/Playing_with_Letsencrypt/&quot; title=&quot;301 Moved Permanently&quot;&gt;Playing with Letsencrypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matthias Gutjahr im &lt;em&gt;Sperrobjekt Weblog&lt;/em&gt;: &lt;a href=&quot;http://blog.sperrobjekt.de/content/1000480-Lets-Encrypt-Zertifikate-manuell-erzeugen.html&quot; title=&quot;&quot;&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt;-Zertifikate manuell erzeugen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dirk Deimeke in &lt;em&gt;Dirks Logbuch&lt;/em&gt;: &lt;a href=&quot;http://www.deimeke.net/dirk/blog/index.php?/archives/3681-Lets-Encrypt-....html&quot; title=&quot;302 Found&quot;&gt;Let&amp;#8217;s Encrypt &amp;#8230;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/051a5cf219b94e51bbfd314bc7089125&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 11 Apr 2016 07:00:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1903-guid.html</guid>
    <category>anleitung</category>
<category>apache</category>
<category>debian</category>
<category>jessie</category>
<category>ssl</category>

</item>
<item>
    <title>Debian 8.0 &quot;Jessie&quot; released</title>
    <link>https://netz-rettung-recht.de/archives/1849-Debian-8.0-Jessie-released.html</link>
            <category>Netzleben</category>
    
    <comments>https://netz-rettung-recht.de/archives/1849-Debian-8.0-Jessie-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1849</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1849</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Am Wochenende wurde, wie &lt;a href=&quot;https://netz-rettung-recht.de/archives/1836-Debian-Jessie-Release-Ende-April-2015-geplant.html&quot; title=&quot;&quot;&gt;angekündigt&lt;/a&gt;, nach knapp zwei Jahren Entwicklungszeit die aktuelle stabile Version 8.0 der GNU/Linux-Distribution &lt;em&gt;Debian&lt;/em&gt; mit dem Codenamen &lt;em&gt;Jessie&lt;/em&gt; &lt;a href=&quot;https://www.debian.org/News/2015/20150426.en.html&quot; title=&quot;302 Found&quot;&gt;veröffentlicht&lt;/a&gt;. Voraussichtlich wird die bisherigen Version &lt;em&gt;Wheezy&lt;/em&gt; wiederum im Rahmen des &lt;em&gt;LTS&lt;/em&gt;-Projekts noch weitere drei Jahre mit Sicherheitsupdates versorgt werden.&lt;/p&gt;

&lt;p&gt;Mehr dazu bei:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.hommel-net.de/archives/338-Debian-8-erschienen.html&quot; title=&quot;301 Moved Permanently&quot;&gt;Mario&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.deimeke.net/dirk/blog/index.php?/archives/3549-Willkommen-Debian-Jessie-....html&quot; title=&quot;302 Found&quot;&gt;Dirk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
 
    </content:encoded>

    <pubDate>Mon, 27 Apr 2015 20:15:41 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1849-guid.html</guid>
    <category>debian</category>
<category>jessie</category>

</item>

</channel>
</rss>
