<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Behind the Asteroid]]></title><description><![CDATA[journalctrl -f]]></description><link>https://blog.uberspace.de/</link><image><url>https://blog.uberspace.de/favicon.png</url><title>Behind the Asteroid</title><link>https://blog.uberspace.de/</link></image><generator>Ghost 1.22</generator><lastBuildDate>Thu, 14 Jun 2018 10:38:03 GMT</lastBuildDate><atom:link href="https://blog.uberspace.de/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Firmware-Update durchs Schlüsselloch]]></title><description><![CDATA[Gestern haben wir uns daran begeben, zwei neue Router in Betrieb zu nehmen und standen vor einer Blockade. Aus der Ferne konnten wir nur per serieller Konsole auf die Geräte zugreifen, weil der der Netzwerkanschluss noch nicht funktionierte.]]></description><link>https://blog.uberspace.de/firmware-update-durchs-schlusselloch/</link><guid isPermaLink="false">5b22374ef58a00641973d008</guid><category><![CDATA[hardware]]></category><dc:creator><![CDATA[Mic]]></dc:creator><pubDate>Thu, 14 Jun 2018 10:15:03 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1487427076583-392ed176865e?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=e7988ea16849c9b851611e759cb153e5" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1487427076583-392ed176865e?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=e7988ea16849c9b851611e759cb153e5" alt="Firmware-Update durchs Schlüsselloch"><p>Gestern haben wir uns daran begeben, zwei neue Router in Betrieb zu nehmen und standen vor einer Blockade. Aus der Ferne konnten wir nur per serieller Konsole auf die Geräte zugreifen, weil der Netzwerkanschluss noch nicht funktionierte. Dafür sollte zuerst ein Firmware-Update eingespielt werden. Doch wie soll das klappen, wenn man keine Dateien auf das Gerät herunterladen kann? Ohne eine  funktionierende Netzwerkverbindung?</p>
<p>Es bleibt eine einzige Möglichkeit. Könnt ihr es erraten? Schließlich können wir ja Befehle eingeben und die Ausgaben lesen per Konsole. Kann man da nicht irgendwie die Datei quasi aus der Zwischenablage hinein kopieren? Ja, das geht!</p>
<p>Um Dateien per Konsole zu übertragen, muss man nur beachten, dass diese natürlich nur ASCII-Zeichen ohne weitere Interpretation überträgt. Jeder, der schon einmal <code>cat</code> ohne weiteres auf eine Binärdatei ausgeführt hat, kennt das Problem mit der zerschossenen Shell, die durch Interpretation von Bitmustern als Steuerzeichen in einen undefinierbaren Zustand gebracht wurde.</p>
<p>Dafür gibt es seit Urzeiten ein <a href="https://de.wikipedia.org/wiki/UUencode">Verfahren</a>: Mit <code>uuencode</code> lassen sich beliebige Binärdaten als Shell-sichere ASCII-Zeichen verpacken. Das Pendant dazu heißt <code>uudecode</code> und wandelt den Zeichensalat zuverlässig wieder in die ursprünglichen Binärdaten zurück.</p>
<p>Nun haben wir also uns auf dem Konsolen-Server per SSH eingeloggt und von dort aus weiter auf den seriellen Port des Routers. Um die Annahme der Datei vorzubereiten, muss die Shell dafür annahmebereit gemacht werden. Das geht recht simpel so:</p>
<p><code>uudecode &gt; /tmp/foo</code></p>
<p>Alles, was nun hier eingegeben wird dekodiert und landet in der Zieldatei, bis das Steuerzeichen End-of-File kommt. Das können wir manuell mit <code>CTRL+D</code> in die Shell eingeben, worauf hin diese die Datei schließt und zum Prompt (zur Eingabeaufforderung) zurückkehrt.</p>
<p>Bevor wir das tun, möchten wir natürlich die Datei in die Konsole kippen. Das machen wir von unserem Arbeitsrechner aus über den Konsolenserver. In unserem Fall ist der Router an einem USB-Port angeschlossen.</p>
<p><code>uuencode firmware.tar /dev/stdout | ssh admin@console &quot;cat &gt; /dev/ttyUSB0&quot;</code></p>
<p>Nun strömen die Daten sichtbar auf den Router hinein. Drückt jetzt bloß keine Taste in der noch offenen Shell, sonst geht die Datei kaputt weil zusätzliche Bits hinein geschrieben werden!</p>
<p>Da die serielle Konsole lange nicht so schnell ist wie ein Gigabit-Netzwerk, haben wir für die läppischen 85 MB der Firmware-Datei fast 4 Stunden gebraucht. Das erinnert an alte Zeiten, als wir noch Modems an unsere Telefonleitung angeschlossen haben und den Bildern beim Laden zugucken mussten.</p>
<p>Aber es hat geklappt. Das Upgrade konnte vom Router als valide erkannt und eingespielt werden. Nun steht dem Einrichten des Netzwerks nichts mehr im Wege.</p>
</div>]]></content:encoded></item><item><title><![CDATA[HTTPS-Ausfall von 4 Hosts am 6.6.2018]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Magie ist kompliziert - aber halt auch cool. Auf Uberspace 7 setzen wir auf <a href="https://github.com/GUI/lua-resty-auto-ssl">ein klein wenig Magie</a>, um Let's Encrypt Zertifikate für alle eure Domains zu holen. Das klappt auch voll gut! ... meistens.</p>
<p><em>tldr-intermezzo: HTTPS für User-Domains (also alle relevanten) ist vom 6.6.2018 4 bis circa 8</em></p></div>]]></description><link>https://blog.uberspace.de/06-06-2018-https-ausfall/</link><guid isPermaLink="false">5b17ac0af58a00641973d004</guid><dc:creator><![CDATA[luto]]></dc:creator><pubDate>Wed, 06 Jun 2018 12:52:01 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Magie ist kompliziert - aber halt auch cool. Auf Uberspace 7 setzen wir auf <a href="https://github.com/GUI/lua-resty-auto-ssl">ein klein wenig Magie</a>, um Let's Encrypt Zertifikate für alle eure Domains zu holen. Das klappt auch voll gut! ... meistens.</p>
<p><em>tldr-intermezzo: HTTPS für User-Domains (also alle relevanten) ist vom 6.6.2018 4 bis circa 8 Uhr auf 4 Hosts (whipple, taylor, kojima und klemola) ausgefallen. Es handelte sich dabei um einen einmaligen Fehler und kein generelles Problem. Fürs Warum und zukünftige Gegenmaßnahmen, einfach weiterlesen.</em></p>
<h2 id="errorngx_http_lua_modulerequiredoderbrwiewardasnochmalmitluaundnginx">&quot;error: ngx_http_lua_module required&quot; oder:<br>Wie war das nochmal mit Lua und nginx?</h2>
<p>Mit der eingangs erwähnten auto-ssl-Magie läuft in unserem nginx/<a href="https://openresty.org/en/">openresty</a> nicht nur Config, sondern auch Lua-Code. Dieser hat eine Hand voll Lua-Modulen als Dependencies. Wenn der nginx initial gestartet wird, landen all diese Module im RAM und verbleiben für die Laufzeit des Prozesses auch dort. Im Falle eines Reloads werden die Worker-Prozesse des nginx neugestartet, woraufhin sie sich die notwendigen Module neu laden. Der Master bleibt unangetastet, gibt aber natürlich Meta-Informationen an die Worker weiter.<br>
Wenn nun ein nginx-Update ausgerollt wird ändern sich ggf. die Module auf der Festplatte. Da sie aber in RAM liegen, ist das erstmal egal -- bis zu einem Reload. Dann laden die Worker ihre Module neu, sind verwirrt und krach-bumms-dependencysalat:</p>
<pre><code>2018/06/06 03:47:13 [error] 7586#7586: *5636697 lua entry thread aborted: runtime error: /usr/local/openresty/lualib/resty/core/base.lua:23: ngx_http_lua_module 0.10.13+ required
stack traceback:
coroutine 0:
        [C]: in function 'require'
        .../local/openresty/luajit/share/lua/5.1/resty/auto-ssl.lua:88: in function 'ssl_certificate'
        ssl_certificate_by_lua:2: in function &lt;ssl_certificate_by_lua:1&gt;, context: ssl_certificate_by_lua*, client: 2a00:d0c0:200:0:b9:1a:9c:57, server: [::]:443
</code></pre>
<p>Unschön, aber einfach durch einen einfachen Restart fixbar.</p>
<h2 id="updates">Updates!</h2>
<p>In eurem und unseren Sinne rollen wir regelmäßig OS-Updates aus. Da uns das oben geschilderte nginx-Problem bekannt ist, bekommen alle nginxe anschließend einen Restart: HTTPS da ➡️ ihr glücklich ➡️ wir glücklich. Genauso haben wir auch am Abend des 5.6. Updates gemacht.</p>
<p>Ein Kollege hat - ein paar Tage zuvor - einem Testhosts Updates verpasst, den nicht eintretenden Weltuntergang abgewartet und dann schließlich am 5.6. mit dem passenden Ansible-Playbook auf alle Hosts ausgerollt und wie beschrieben den nginx durchgetreten. Monitoring war still, Hosts wirkten gesund und Twitter hatte auch keine Beschwerden zu verzeichnen.</p>
<p>Durch ein unabhängiges Problem mit dem .NET-Repository von Microsoft haben es die Updates allerdings nur auf vier Hosts geschafft: whipple, taylor, kojima und klemola. Genau die vier Ausfallkandidaten.</p>
<h2 id="dertdlichereload">der tödliche Reload</h2>
<p>Aufmerksame Leserinnen können sich nach dem länglichen Intro schon denken, was passiert ist: der nginx-Restart wurde nicht wie geplant ausgeführt und irgendetwas(TM) hat einen Reload getriggert. Gemerkt hat das leider niemand sodass die vier Hosts einfach mal weitergelaufen sind -- bis um kurz vor vier Uhr früh.</p>
<p>Genau dann läuft das <code>cron.daily</code> und darin ein Logrotate was für einen -- Trommelwirbel -- nginx Reload sorgt:</p>
<pre><code>Jun 06 03:47:01 taylor.uberspace.de anacron[20891]: Job `cron.daily' started
Jun 06 03:47:01 taylor.uberspace.de run-parts(/etc/cron.daily)[7429]: starting logrotate
Jun 06 03:47:05 taylor.uberspace.de uberspace-generate-nginx-config[7542]: generating config for pumuckl
Jun 06 03:47:05 taylor.uberspace.de uberspace-generate-nginx-config[7542]: generating config for blargh
(...)
Jun 06 03:47:05 taylor.uberspace.de systemd[1]: Reloaded HTTPS-Frontend (NGINX HTTP and reverse proxy server).
</code></pre>
<p>Anschließend war der Webserver nicht mehr motiviert weitere Anfragen für User-Domains (nicht jedoch die taylor.uberspace.de-Domain!) zu beantworten. Da zufällig keiner unserer privaten Uberspaces betroffen war, haben wir das dann auch erst durch Useranfragen gemerkt und dann durch eine pauschale Runde nginx-Restarts behoben.</p>
<h2 id="aberhabtihrdennkeinmonitoring">aber habt ihr denn kein Monitoring?!</h2>
<p>Doch, doch, natürlich. Aber leider nur für die <code>taylor.uberspace.de</code>-Domain. Domains, die durch User hinzugefügt werden testen wir vor jedem Deployment und nach jedem Commit automatisiert in unserem GitLab; jedoch nicht mehr auf jedem einzelnen Produktivsystem. So wurden wir erst duch Useranfragen auf das Problem aufmerksam.</p>
<h2 id="diezukunfttm">Die Zukunft(TM)</h2>
<p>Dieser Fehler hat auf 4 Hosts für eine Downtime auf von circa 7 Stunden verursacht. Auch wenn diese Großteils vor in Europa üblichen Wachzeiten war, ist das natürlich inakzeptabel.</p>
<p>Wir haben initial mehrere Maßnahmen getroffen, um solche Fehler in Zukunft zu vermeiden oder zumindst schneller zu bemerken:</p>
<ol>
<li>Wir werden die technischen Hürden überkommen müssen und ein Monitoring für produktive User-Domains bauen. Dieses hätte uns in diesem Fall aufgeweckt, sodass die Downtime nur Minuten, statt Stunden, betragen hätte.</li>
<li>OS-Updates werden künftig wie normale Uberspace-Updates über GitLab ausgeführt. So ist sichergestellt, dass ein fehlgeschlagenes Update auffällt, klar ist wann Updates gelaufen sind und Logs bleiben nachvollziehbar.</li>
</ol>
<p>Einer unserer Leitsätze lautet: Haben wir etwas richtig gemacht oder haben wir etwas dazu gelernt? In diesem Fall bitten wir die betroffenen User um Entschuldigung und haben etwas dazu gelernt.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Über Auftragsverarbeitung]]></title><description><![CDATA[<div class="kg-card-markdown"><p>First things first: Es gibt nun einen fertigen Vertrag zur Auftragsverarbeitung, der den Segen unseres externen Datenschutzbeauftragen bekommen hat. Du findest ihn unter <a href="https://uberspace.de/dpa">https://uberspace.de/dpa</a> und wir haben alles vorbereitet, damit du ihn Anfang ab nächster Woche im Dashboard per Klick abschließen kannst. Du kannst ihn insofern bereits</p></div>]]></description><link>https://blog.uberspace.de/ueber-auftragsverarbeitung/</link><guid isPermaLink="false">5affb7e5f58a00641973cffa</guid><dc:creator><![CDATA[Jonas]]></dc:creator><pubDate>Sat, 19 May 2018 08:03:30 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>First things first: Es gibt nun einen fertigen Vertrag zur Auftragsverarbeitung, der den Segen unseres externen Datenschutzbeauftragen bekommen hat. Du findest ihn unter <a href="https://uberspace.de/dpa">https://uberspace.de/dpa</a> und wir haben alles vorbereitet, damit du ihn Anfang ab nächster Woche im Dashboard per Klick abschließen kannst. Du kannst ihn insofern bereits lesen und prüfen oder prüfen lassen, beispielsweise durch deinen Datenschutzbeauftragten, und dann nächste Woche deinen Klick setzen.</p>
<p>Was noch fehlt, ist die Abnahme unseres <a href="https://uberspace.de/static/tom.pdf">Entwurfs zur Dokumentation der technischen und organisatorischen Maßnahmen</a> durch unseren externen Datenschutzbeauftragten - dessen Workload, wie man sich vielleicht vorstellen kann, im Rahmen allgemeiner DSGVO-Panik gerade durch die Decke geht und der wundersamerweise dennoch Zeit findet, sich jedwedes Dokuments innerhalb von 2-3 Werktagen anzunehmen. Die vorige von uns gelieferte Fassung fand bereits Zuspruch und bedurfte nur noch geringer Änderungen an der Struktur des Dokuments, so dass die letzte Abnahme nur noch eine Formalität ist.</p>
<p>Aber mal einen Schritt zurückgetreten und durchgeatmet:</p>
<p><em>Was ist eigentlich diese Auftragsverarbeitung, von der alle reden?</em></p>
<p>Grundsätzlich ist erst einmal wichtig zu verstehen, dass der Dreh- und Angelpunkt die Frage ist, <strong>ob personenbezogene Daten im Spiel sind oder nicht</strong>, denn wenn nicht, kannst du im Grunde aufhören zu lesen. Im Rahmen von Webhosting wird hierbei gerne schnell auf das Thema Logging abgestellt. In diesem Punkt können wir dich beruhigen: Wenn ein access_log erstellt wird (unter U6 ist das der Fall, unter U7 ist es standardmäßig nicht der Fall, kann aber aktiviert werden), so sind darin grundsätzlich alle IP-Adressen gekürzt und gelten insofern nicht mehr als möglicherweise personenbezogene Daten. Es ist also unsererseits dafür gesorgt, dass nicht <em>allein</em> durch die Benutzung deines Uberspaces schon personenbezogene Daten anfielen. (Unter U6 gibt es mit dem error_log derzeit noch den Pferdefuß, dass darin vollständige IPs zu finden sind, was sich technisch auch nicht vermeiden lässt; wir werden dem in Kürze dafür mit deutlich reduzierter Aufbewahrungsdauer begegnen. Das error_log ist aber bei U6 wie bei U7 standardmäßig <em>aus</em>, und bei U7 haben wir eine saubere Lösung dafür gefunden, auch im error_log nur gekürzte IPs zu zeigen.)</p>
<p>Zeit also, um den Blick darauf zu lenken, wie du deinen Uberspace nutzt: Veröffentlichst du beispielsweise einen Blog ohne Kommentarfunktion (so wie dieser hier, den du gerade liest)? Dann sind nämlich keine personenbezogenen Daten im Spiel. Verwendest du eine Kommentarfunktion? Dann ist immer noch die Frage, ob du dort einen Klarnamen und/oder eine E-Mail-Adresse erfasst oder ob deine Besucher ohne diese Angaben anonym kommentieren können - und, ob du deren IP-Adresse speicherst oder nicht. Oder verwendest du einen externen Kommentarservice wie z.B. Disqus? Dann werden ggf. erfasste personenbezogene Daten eben nicht mehr bei uns verarbeitet, sondern bei Disqus, und die Frage der Auftragsverarbeitung verschiebt sich von uns zu denen.</p>
<p>Verwendest du E-Mail? Dann haben wir es auch hier mit Auftragsverarbeitung zu tun, denn wann immer du eine Mail an jemanden sendest oder von jemandem erhältst, gelangt ein personenbezogenes Datum - nämlich die Mailadresse des Gegenübers - auf unsere Systeme. Da hilft auch keine E-Mail-Verschlüsselung, denn die Mailadressen stehen ja als Metadaten sozusagen außen auf dem Briefumschlag, was für den Transport ja auch zwingend erforderlich ist.</p>
<p>Soll heißen: Um personenbezogene Daten geht es zwar nicht automatisch mit Nutzung deines Uberspaces für Webhosting - aber sie sind sehr schnell im Spiel. Die Frage, ob Auftragsverarbeitung vorliegt, hängt insofern davon ab, <em>wie</em> du deinen Uberspace nutzt, und das kannst nur du selbst beantworten.</p>
<p>Ein anderer wichtiger Dreh- und Angelpunkt ist aber auch die Frage, ob du deinen Uberspace zu unternehmerischen Zwecken nutzt oder <strong>nur zu persönlichen und familiären Zwecken</strong> - Artikel 2 (2) c DSGVO stellt nämlich klar, dass die Verordnung darauf <em>keine</em> Anwendung findet und dich insofern auch das Thema Auftragsverarbeitung nicht jucken muss.</p>
<p>Nur für den Fall, dass du jetzt sagst &quot;Ach sooo! Hättet ihr das nicht gleich sagen können?&quot; - Ja, hätten wir, aber es erschien uns dennoch sinnvoll, dich selbst wenn es deinen konkreten Nutzungsfall nicht betrifft, ein wenig mit in die Gedankenwelt der DSGVO zu nehmen. Und außerdem gilt zu beachten: Die genannten persönlichen und familiären Zwecke sind sehr eng gefasst, und du musst nicht erst ein Unternehmen gründen, um über die Schwelle zu hüpfen, ab der die DSGVO dann doch gilt. Die Rechtsprechung hat schon in der Vergangenheit gezeigt, dass bereits beim Einblenden von Werbeanzeigen oder der Bereitstellung von Affiliate-Links ein Blog als Einkommensquelle und damit nicht mehr als reine Privatsache angesehen wird, und es ist davon auszugehen, dass das auch in Bezug auf Datenschutzfragen ähnlich gehandhabt werden dürfte.</p>
<p>Wenn du dir nun ziemlich sicher bist, dass du deinen Uberspace vielleicht nicht zu 100% nur zu persönlichen oder familiären Zwecken verwendest, und dass auf deiner Website personenbezogene Daten verarbeitet werden, zum Beispiel mit einem Blog mit Kommentarfunktion mit Erfassung einer Mailadresse, dann heißt es: Hallo, Auftragsverarbeitung! Denn damit ziehst du uns als Dienstleister hinzu und verarbeitest die Daten nicht mehr ganz alleine. Der Begriff der &quot;Verarbeitung&quot; ist dabei sehr weit gefasst und erfordert überhaupt nicht, dass wir die Daten im wörtlichen Sinne auch verarbeiten, also tatsächlich irgendetwas damit <em>tun</em>. Vielmehr ist bereits der Umstand, dass nicht <em>sicher ausgeschlossen</em> werden kann, dass wir auf personenbezogene Daten, die du auf deinem Uberspace verarbeitest, zugreifen <em>können</em>. Ob wir das in Praxis auch <em>tun</em> oder nicht, ist dabei völlig unerheblich.</p>
<p>In diesen Fällen einen Vertrag zur Auftragsverarbeitung abzuschließen, entspringt insofern <em>deinem</em> Interesse und nicht originär unserem. <em>Unser</em> Interesse ist, dass du weiterhin - rechtskonform - bei uns hosten kannst, wozu wir dir den Abschluss eines Vertrags zur Auftragsverarbeitung anbieten müssen. Gegenüber denen, deren personenbezogene Daten du erfasst, bist nämlich du selbst verantwortlich, und das heißt, du musst bei der Auswahl der Unternehmen, die du hinzuziehst, um dir dabei zu helfen, die Daten zu verarbeiten (in unserem Fall also mit der Bereitstellung einer Hostingplattform, die dich davon entbindet, dir eigene Hardware kaufen zu müssen, in ein Rechenzentrum zu stellen, sie zu warten, sie auf korrekte Funktion zu überwachen etc.) entsprechend Sorgfalt walten lassen; das schuldest du denen, deren Daten du verarbeitest. Mit dem Abschluss eine Vertrags zur Auftragsverarbeitung stellst du klar, dass wir ausschließlich <em>weisungsgebunden</em> mit deinen Daten umgehen dürfen, also damit nicht einfach tun können, was wir wollen. Außerdem bekommst du durch die Dokumentation der technischen und organisatorischen Maßnahmen eine konkrete Zusammenstellung der Dinge, die wir zum Schutz deiner Daten unternehmen, und damit mehr als ein werbespruchhaftes &quot;Deine Daten sind bei uns sicher&quot;. Das bedeutet natürlich nicht, dass nicht dennoch etwas schiefgehen kann - aber die Verantwortlichkeiten dafür sind dann klar geregelt. Gegenüber denen, deren personenbezogene Daten du verarbeitest, stellt es ja einen qualitativen Unterschied dar, ob du denen sagst: Joah, ich hab da so EDV-Zeugs, da liegen die drauf; keine Ahnung, ob der Betreiber die aktuell hält oder eine Datensicherung macht - oder ob du denen sagst: Das EDV-Zeugs von den Ubernauten wird ordentlich gemacht; es gibt einen sauberen Vertrag, und wir wissen, welche konkreten Maßnahmen die in puncto Datenschutz unternehmen, und ich befinde diese Maßnahmen für ausreichend, um denen zuzutrauen, dass sie auch mit deinen Daten seriös umgehen, und das heißt auch: Ausschließlich gemäß meiner Weisungen.</p>
<p>Die technischen und organisatorischen Maßnahmen sind im Gegensatz zum eigentlichen AV-Vertrag volatil - sie liegen dem Vertrag insofern nur als Anlage bei. Insbesondere bei Technik ist es eben so, dass die durch schlichtes Nichtstun - im Verhältnis - schlechter wird, einfach weil die Welt drumherum sich fortentwickelt und Stillstand früher oder später nicht mehr dem entspricht, was man gemeinhin als &quot;Stand der Technik&quot; bezeichnet. Insofern entwickeln sich auch die Maßnahmen, die wir zum Schutz deiner Daten unternehmen, weiter. Die technischen und organisatorischen Maßnahmen können sich insofern jederzeit verändern - aber entsprechend nur in Richtung &quot;besser&quot; (&quot;sicherstellen, dass das Sicherheitsniveau der festgelegten Maßnahme nicht unterschritten wird&quot;, wie es dazu in Punkt 5.2.2 des AV-Vertrags heißt).</p>
<p>Mit der Bereitstellung des Vertrags zur Auftragsverarbeitung und der technischen organisatorischen Maßnahmen ist die Zielgerade der DSGVO-Konformität für uns dann in greifbarer Nähe (ein paar Kleinigkeiten fehlen noch, die aber auch schon vorbereitet sind). Aber auch wenn hier dann vermutlich erleichtert die Sektkorken knallen, im branchenübergreifenden Sprint zum 25.5. ein gutes Ziel erreicht zu haben, so geht der Weg danach weiter - nicht zuletzt deshalb, weil die DSGVO auch viele Fragezeichen mit sich bringt, die im Lauf von Monaten oder auch Jahren noch Gerichte beschäftigen werden, wie denn Dieses oder Jenes konkret auszulegen ist. Die Bestellung eines externen Datenschutzbeauftragten ist für uns das klare Bekenntnis, Datenschutz nicht als lästiges Übel, sondern als Selbstverständlichkeit zu betrachten, und wir haben damit einen Wegbegleiter, der uns - wie wir mit inzwischen zwei persönlichen Treffen zusätzlich zur überbordenden E-Mail-Kommunikation feststellen konnten - mit großer Begeisterung dabei hilft, besser zu werden. Darauf freuen wir uns mit euch.</p>
</div>]]></content:encoded></item><item><title><![CDATA[DSGVO, wir kommen!]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Die Datenschutzgrundverordnung (DSGVO), die vor knapp zwei Jahren eingeführt und europaweit ab dem 25.05.2018 anwendbar wird, hat bei uns wie auch bei vielen anderen zu Fragen und Unsicherheiten geführt. Nun sind wir aber langsam aber sicher auf der Zielgeraden, die nötigen Vorgaben fristgerecht umzusetzen. Dazu gehört neben diversen</p></div>]]></description><link>https://blog.uberspace.de/dsgvo-wir-kommen/</link><guid isPermaLink="false">5af1cde6f58a00641973cfeb</guid><dc:creator><![CDATA[Jonas]]></dc:creator><pubDate>Wed, 09 May 2018 07:08:27 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Die Datenschutzgrundverordnung (DSGVO), die vor knapp zwei Jahren eingeführt und europaweit ab dem 25.05.2018 anwendbar wird, hat bei uns wie auch bei vielen anderen zu Fragen und Unsicherheiten geführt. Nun sind wir aber langsam aber sicher auf der Zielgeraden, die nötigen Vorgaben fristgerecht umzusetzen. Dazu gehört neben diversen neuen Dokumentationspflichten insbesondere die Bereitstellung eines Vertrags zur Auftragsverarbeitung, der aktuell in Kooperation mit unserem externen Datenschutzbeauftragen finalisiert wird und mit dem voraussichtlich in der nächsten Woche gerechnet werden kann.</p>
<p>Apropos! Wir haben so einige Zeit gerätselt, ob wir gemäß der Anforderungen des Bundesdatenschutzgesetzes (BDSG) und/oder der DSGVO bereits die Kriterien erfüllen, um einen Datenschutzbeauftragten benennen zu müssen oder nicht: Was sind Personen, die &quot;regelmäßig mit automatisierter Datenverarbeitung (Erhebung und Nutzung) zu tun haben&quot;? Trifft das auf einen Supportmitarbeiter zu? Trifft es auf einen Mitarbeiter zu, der lediglich das Blech in ein Rack schraubt? Trifft es auf die Buchhalterin zu, die Kontoumsätze abfragt, aber auf Server keinen Zugriff hat? Wird bei der Verarbeitung von persönlichen Daten ein Detailgrad überschritten, der die Bestellung eines Datenschutzbeauftragten erforderlich macht? Ist Webhosting Auftragsdatenverarbeitung, wenn die Software, die vielleicht am Ende eine Lücke hat und persönliche Daten leakt, nicht von uns, sondern von unseren Usern installiert wird? Ist das Anfertigen von Backups Auftragsdatenverarbeitung, obwohl wir damit nur bestehende Sorgfaltspflichten erfüllen? Fragen über Fragen, und wer sich erst ins offene Feld der Jura-Foren bewegt, der versteht in der Regel hinterher eher weniger als mehr. Um dies ein wenig zu verdeutlichen - kleiner Rückblick:</p>
<p>Es war 2011 und damit im IT-Leben eine halbe Ewigkeit her, als <a href="http://www.internet-law.de/">IT-Fachanwalt Thomas Stadler</a> unter dem wunderbaren Titel <a href="http://www.internet-law.de/2011/02/aberwitziger-datenschutz-made-in-germany.html">Aberwitziger Datenschutz made in Germany</a> bloggte:</p>
<blockquote>
<p>Wenn man zudem das Hosting, wie es der Landesdatenschutzbeauftragte tut, als Auftragsdatenverarbeitung im Sinne von § 11 BDSG begreift, müssten damit eigentlich fast alle deutschen Websites vom Netz genommen werden und Massenhoster wie 1&amp;1 und Strato könnten ihr Geschäft sofort einstellen.  Denn wenn die Rechtsansicht der Datenschutzbehörde zutreffend wäre, würde dies bedeuten, dass  jeder Webseitenbetreiber mit seinem Host-Provider eine schriftliche Vereinbarung über eine Auftragsdatenverarbeitung abschließen müsste, die die äußerst strengen Anforderungen von § 11 Abs. 2 BDSG erfüllt. Die Haltung des niedersächsischen Landesbeauftragten kann man daher getrost als aberwitzig bezeichnen.</p>
</blockquote>
<p>Wir sind dieser Lesart offen gesagt ziemlich lange gefolgt, müssen aber anerkennen, dass sich spätestens im Kontext des DSGVO-Flächenbrands der Wind dahin gedreht hat, dass sich die Situation heute so darstellt, dass Herrn Stadlers als &quot;abwitzig&quot; beurteilte Einschätzung heute in großer Breite als Stand der Dinge angesehen wird - denn letzten Endes können wir technisch gesehen auf die Daten unserer User zugreifen; das ist eben so und wir machen daraus auch kein Geheimnis. Wenn nun ein Shop bei uns gehostet wird und ein Endkunde dort eine Bestellung tätigt, fließen natürlich logischerweise dessen persönliche Daten durch unseren Webserver; das, was man gemeinhin als &quot;Verarbeitung&quot; betrachten würde, passiert dann aber in der Shopsoftware - die diese Daten höchstwahrscheinlich in eine Datenbank schreibt, sie aktualisiert und archiviert. Diese Shopsoftware haben wir aber weder installiert, noch benutzen wir jene, noch warten wir jene, noch kennen wir jene. Es erschien uns insofern nie wirklich plausibel, inwiefern <em>wir</em> hier Daten im Auftrag verarbeiten sollten - ein Grund, warum wir uns lange gegen den Abschluss von Verträgen zur Auftragsverarbeitung gewehrt haben (man beachte die Vergangenheitsform).</p>
<p>Was man nicht vermeiden kann, das sollte man besser lieben lernen. Die DSGVO mit offenen Armen zu empfangen, ist aber leichter gesagt als getan: Selbst viele Anwälte betrachten sie als eines der sperrigeren Dokumente, mit denen man so im Unternehmensalltag konfrontiert wird, und das ist ein Problem.</p>
<p>Niemand von uns ist Jurist, und niemand von uns brennt für die entsprechenden Gesetzestexte. Wir sind IT-Menschen und interessieren uns für Protokolle, Verschlüsselung, Rechtetrennung, Anonymisierung, Pseudonymisierung, für Datenschutz im Sinne von &quot;Wir wollen nicht, dass deine Daten verlorengehen&quot; und auch Sinne von &quot;Wir wollen nicht, dass deine Daten in falsche Hände geraten&quot;. Unser Geschäftsmodell basiert auch nicht auf der Verwertung deiner Daten, sondern darauf, uns für die Bereitstellung technischer Ressourcen sowie die entsprechende Unterstützung bezahlen zu lassen, damit wir von deinen Daten dafür getrost die Finger lassen können.</p>
<p>Was wir tun, tun wir mit Liebe, und uns ist insofern schon vor längerer Zeit klargeworden, dass uns jemand fehlt, der diese Liebe nicht nur für den Datenschutz, sondern vor allem auch für das Datenschutzrecht aufbringt. Nachdem es einige Zeit so aussah, dass wir dafür einen passenden Fachanwalt gefunden hatten, was sich dann aber in der Praxis als nicht unseren Vorstellungen entsprechend fruchtbar herausgestellt hat (und uns insofern noch einige Zeit im Plan hat zurückfallen lassen), können wir nun mit Freude verkünden, dass wir nach entsprechender Vorbereitung und persönlichen Gesprächen eine Rechtsanwaltsgesellschaft gefunden haben, die Datenschutzrecht mit Herzblut lebt, uns fortan in Datenschutzfragen berät und schult und auch als unser externer Datenschutzbeauftragter fungiert. Für uns sorgt das für weitaus besseren Schlaf, weil wir nun Leute an unserer Seite haben, die sich mit den rechtlichen Aspekten besser auskennen als wir, und für euch sollte es für besseren Schlaf sorgen, weil Rechtskonformität bei der Datenverarbeitung damit kein Fragezeichen mehr bleibt. Auf gute Zeiten!</p>
</div>]]></content:encoded></item><item><title><![CDATA[⚛️ Uberlab]]></title><description><![CDATA[<div class="kg-card-markdown"><h2 id="kannmanbeieucheigentlich">Kann man bei euch eigentlich...</h2>
<p>Ein Klassiker im Support ist die Frage, ob und wie man bei uns Dinge wie Wordpress, Ghost, Nextcloud, (...) möglichst einfach installieren kann. Die Antwort ist meistens &quot;klar geht das, wir haben das im Wiki verlinkt oder schau doch mal <a href="https://www.google.com/search?q=uberspace+ghost">bei der Suchmaschine deiner Wahl</a></p></div>]]></description><link>https://blog.uberspace.de/uberlab/</link><guid isPermaLink="false">5af06598f58a00641973cfe6</guid><dc:creator><![CDATA[nichtmax]]></dc:creator><pubDate>Mon, 07 May 2018 19:49:20 GMT</pubDate><media:content url="https://blog.uberspace.de/content/images/2018/05/29suce.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="kannmanbeieucheigentlich">Kann man bei euch eigentlich...</h2>
<img src="https://blog.uberspace.de/content/images/2018/05/29suce.jpg" alt="⚛️ Uberlab"><p>Ein Klassiker im Support ist die Frage, ob und wie man bei uns Dinge wie Wordpress, Ghost, Nextcloud, (...) möglichst einfach installieren kann. Die Antwort ist meistens &quot;klar geht das, wir haben das im Wiki verlinkt oder schau doch mal <a href="https://www.google.com/search?q=uberspace+ghost">bei der Suchmaschine deiner Wahl</a>.&quot; Viele von euch schreiben Anleitungen für die Installation, die dann aber irgendwo veröffentlicht werden müssen. Wir haben da bisher immer darum gebeten, im Zweifelsfall selbst eben einen Blog aufzusetzen oder den Artikel als Gastbeitrag in einem anderen Blog zu veröffentlichen. Das hat natürlich Grenzen und nicht jeder hat Lust und Zeit dazu, für eine einzelne Anleitung gleich einen eigenen Blog aufzusetzen. Das ist mehr als verständlich und so verstaubt sicherlich die eine oder andere Anleitung unveröffentlicht auf lokalen <s>Festplatten</s>SSDs. Das muss doch irgendwie anders gehen...</p>
<h2 id="dielsungfruberspace6">Die Lösung für Uberspace 6</h2>
<p>Viele von euch werden die <a href="https://wiki.uberspace.de/cool">coolen Sachen</a> aus dem Uberspace 6 Wiki kennen: Anleitungen, mit denen man diese oder jene Software auf einem Uberspace installieren kann. Wir schreiben dazu:</p>
<blockquote>
<p>Diese Rubrik ist nicht mehr und nicht weniger als ein Sammelsurium. Wir veröffentlichen hier ein paar Vorschläge, was du noch so alles mit deinem Uberspace anfangen kannst, außer irgendwie eine kleine Website draufzupacken und eine Handvoll Mailadressen einzurichten.</p>
</blockquote>
<p>Einige Anleitungen stammen von uns, werden daher auch voll supported und soweit es geht auf dem laufenden Stand gehalten. Ehrlich gesagt ist dieses Konzept schnell an Grenzen gestoßen: Auch bei uns gibt es Fluktuation, es gab dort Anleitungen, die von Kollegen verfasst wurden, die inzwischen nicht mehr mit uns zusammen arbeiten und es hat sich niemand gefunden, der die Wartung der betreffenden Artikel übernehmen kann. Hinzu kommt, dass eine Versionsverwaltung und das Tracken von Issues in unserem Wiki schlecht möglich ist, die Lösung ist also suboptimal.</p>
<p>Außerdem stellen wir dort nicht nur Anleitungen von uns bereit, sondern eben die anfangs erwähnten Anleitungen von euch. Und das ist eine beachtliche Menge! Auf den ersten Blick super cool, auf den zweiten Blick wird aber klar: Bei der Fülle von Anleitungen, die ihr geschrieben und wir verlinkt haben, können wir keinen Überblick behalten. Das führt dazu, dass die Qualität, Aktualität, Nachvollziehbarkeit und &quot;Richtigkeit&quot; der Anleitungen stark schwankt. Das ist (wie so vieles bei uns) historisch gewachsen und dabei fiel dann irgendwann auf, dass das doch nicht so richtig skaliert und nicht mehr wartbar ist. URLs ändern sich, Blogs werden abgeschaltet, Software wird aktualisiert und die Anleitungen stimmen nicht mehr, und so weiter und so weiter. Und wenn ihr etwas in der Rubrik gefunden habt, was nicht mehr so richtig funktioniert, dann landet das bei uns im Support und dann sind uns die Hände gebunden. Nicht jeder von uns hat jede Anleitung ausprobiert, ihr erwartet dann natürlich trotzdem Support von uns, denn <em>wir haben die Anleitungen ja verlinkt</em>. Das ist ein Standpunkt, der durchaus nachvollziehbar aber die Erwartung kann nicht von uns erfüllt werden. Das führt manchmal zu Frust auf beiden Seiten.</p>
<h2 id="dielsungfruberspace7">Die Lösung für Uberspace 7</h2>
<p>Für Uberspace 6 lassen wir das alles so wie es ist aber für Uberspace 7 muss eine bessere Lösung her. Und das Kind hat einen Namen:</p>
<p><img src="https://blog.uberspace.de/content/images/2018/05/180321_logo_uberlab_clean-1.svg" alt="⚛️ Uberlab"></p>
<p>Wir haben uns das folgendermaßen überlegt:</p>
<ul>
<li>Diese Rubrik soll mehr sein als ein Sammelsurium an Anleitungen.</li>
<li>Alle sollen Guides verfassen und veröffentlichen können. Auf unserer Infrastruktur.</li>
<li>Die Guides werden unter <a href="https://github.com/Uberspace/lab/blob/master/LICENSE">CC-BY-NC-SA 4.0</a> veröffentlicht.</li>
<li>Wir schmücken uns nicht mit fremden Federn. In jedem Guide werden die Autoren erwähnt. Allen Autoren wird zusätzlich in der <a href="https://lab.uberspace.de/en/hall_of_fame.html">👑 Hall of Fame</a> gedankt.</li>
<li>Kollaboration muss möglich sein. Alle sollen an allen Guides mitarbeiten können.</li>
<li>Die Guides sollen für alle verständlich sein.</li>
<li>Die Guides dürfen nicht komplex sein.</li>
<li>Die Guides müssen getestet sein. Was dokumentiert ist, muss genau wie beschrieben funktionieren.</li>
<li>Es gibt für jeden Guide Support von uns.</li>
<li>Die Guides sollen uniform sein und alle dem gleichen Schema folgen.</li>
</ul>
<p>Was fällt dem geneigten (und zukünftigen) Nerd da als erstes ein?</p>
<p><img src="https://blog.uberspace.de/content/images/2018/05/Octocat.png" alt="⚛️ Uberlab"></p>
<h2 id="herzlichwillkommenimuberlab">Herzlich willkommen im <a href="https://lab.uberspace.de">⚛️ Uberlab</a>!</h2>
<p>Von dort aus erklärt sich eigentlich alles von selbst: Die Struktur kennt ihr vom <a href="https://manual.uberspace.de">Manual</a>, das <a href="https://github.com/Uberspace/lab">Repository</a> inkl. aller <a href="https://github.com/Uberspace/lab/blob/master/CONTRIBUTING.md">Guidelines</a> findet ihr in der Navigation und wenn ihr Fragen habt, stehen wir euch jederzeit <a href="https://uberspace.de/support">zur Verfügung</a>.</p>
<p>Das Beste zum Schluss: Einige von euch haben das Repository schon vor einiger Zeit gefunden und <a href="https://lab.uberspace.de/en/hall_of_fame.html#">fleißig Guides</a> verfasst, ihr könnt also direkt mit der Installation eures Lieblingstools loslegen!</p>
<p>Schließen wir vorfreudigst ab mit dem letzten Absatz der Einleitung der coolen Sachen im Wiki:</p>
<blockquote>
<p>Sei kreativ! Dir fallen sicherlich noch viel spannendere Nutzungsmöglichkeiten ein.</p>
</blockquote>
<hr>
<p>Header von <a href="https://imgflip.com">imgflip</a><br>
Octocat von <a href="https://github.com/logos">Github</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Reboot tut (nicht immer) gut]]></title><description><![CDATA[<div class="kg-card-markdown"><p>TLDR: Es gab heute um 13:15 einen ungeplanten Reboot und eine damit verbundene, sehr kurze Downtime bei allen U7-Hosts. Grund war, dass wir <a href="https://github.com/systemd/systemd/issues/2236">wegen einem journald-Bug</a> einen Reboot benötigt haben, diesen aber (intern) nicht sauber kommuniziert haben: Code ausgerollt, zack Reboot! Das tut uns leid und sollte in Zukunft</p></div>]]></description><link>https://blog.uberspace.de/reboot-tut-nicht-immer-gut/</link><guid isPermaLink="false">5aeef848fdb2b80001220595</guid><dc:creator><![CDATA[luto]]></dc:creator><pubDate>Mon, 22 Jan 2018 19:52:41 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>TLDR: Es gab heute um 13:15 einen ungeplanten Reboot und eine damit verbundene, sehr kurze Downtime bei allen U7-Hosts. Grund war, dass wir <a href="https://github.com/systemd/systemd/issues/2236">wegen einem journald-Bug</a> einen Reboot benötigt haben, diesen aber (intern) nicht sauber kommuniziert haben: Code ausgerollt, zack Reboot! Das tut uns leid und sollte in Zukunft nicht mehr passieren. Mehr dazu weiter unten.</p>
<hr>
<p>Heute am 22.01.2018 gegen 13:15 wurden alle unsere Uberspace 7 Hosts nicht 100% geplant rebootet. Die meisten Hosts waren nach weniger als zwei Minuten wieder da; geplant oder gar angekündigt war der kurze Ausfall allerdings dennoch nicht. Wir möchten euch in diesem Blogpost darlegen, wie es überhaupt dazu gekommen ist.</p>
<p>Unser Deployment-Setup sieht es vor, dass manche Ansible-Rollen einen Reboot triggern dürfen. Bisher wurde diese Funktionalität nur von der Quota-Rolle genutzt, die Mount-Flags der Root-Partition umsetzen muss. Das geht bei unserem Datensystem und Setup eben nur mit einem Reboot. Im Normalfall passiert das während dem initialen Deployment des Systems - also lange bevor User ihre Accounts darauf bekommen.</p>
<h4 id="thecuriouscaseofjournald">The curious case of journald</h4>
<p>Das Problem war eigentlich ganz einfach: Die systemd-Logs im journald wurden zu schnell gelöscht, wir wollten die gerne länger aufheben. Dazu gibt es natürlich <a href="https://www.freedesktop.org/software/systemd/man/journald.conf.html">ein Config-File</a> und eine passende Option <a href="https://www.freedesktop.org/software/systemd/man/journald.conf.html#SystemMaxUse="><code>SystemMaxUse=</code></a>, die beschreibt wie viel Platz maximal durch die Log-Files belegt werden darf. Wir haben diese Option also angepasst, den journald neugestartet (reloads unterstützt er nämlich nicht)  und siehe da: Die Logs sind auf unserem Test-Systemen länger verfügbar. Alles gut.</p>
<p>Alles gut, bis wir versucht haben die Änderung zu integrieren. Plötzlich ist nämlich unser IMAP/POP3-Server dovecot beim Reload der Config unerwartet verstorben. Nach einem <code>systemclt restart dovecot</code> hat allerdings alles wie gewohnt funktioniert. Zunächst war uns der Zusammenhang zwischen einer journald-Änderung und einem Dovecot-Reload recht schleierhaft. Als wir uns allerdings mit strace an den Prozess gehängt haben, wurde die Sache klarer:</p>
<pre><code>(...)
write(2, &quot;Jan 18 11:30:39 master: Warning:&quot;..., 75) = -1 EPIPE (Broken pipe)
(...)
+++ exited with 81 +++
</code></pre>
<p>Dovecot versucht während dem Reload etwas nach stderr (also <a href="https://en.wikipedia.org/wiki/File_descriptor">File-Deskriptor 2</a>) zu schreiben und scheitert dabei, weil die Pfeife kaputt ist. Grund ist, dass unsere Version von journald <a href="https://github.com/systemd/systemd/issues/2236">durch einen Bug</a> nicht in der Lage ist bei einem Restart die schon offenen Log-Handles der laufenden Services an die neue Instanz weiterzugeben. Alle Prozesse, die also nach dem journald-Restart etwas ins systemd-Log schreiben möchten, müssen also mit dieser Situation umgehen. Dovecot tut es, indem er sich beendet. Dieser Bug ist neueren Versionen von systemd bereits gefixt, auf CentOS 7 allerdings nicht.</p>
<p>Die einzig saubere Möglichkeit dem journald eine neue Config zu geben, ist in unserem spezifischen Setup also ein Reboot. Zum Glück müssen wir gerade diese Config nur einmalig, oder nie wieder anfassen, sodass ein Reboot an sich kein großes Problem darstellt.</p>
<h4 id="kommunikationkommunikationkommunikation">Kommunikation, Kommunikation, Kommunikation</h4>
<p>Nachdem Janto und ich das zugrunde liegende journald-Problem gefunden haben, hat die journald-Config einen Reboot-Trigger bekommen, die Tests liefen durch und wir waren glücklich. Moritz hat ein paar Tage später (so wie immer) ein Release zusammengepackt, das <a href="https://manual.uberspace.de/en/changelog.html#id1">Changelog geschrieben</a> und <a href="https://twitter.com/ubernauten/status/955427422907850752">vertwittert</a>, dass es jetzt ein Uberspace 7.0.25 gibt. Was aber niemand außer uns beiden Devs wusste, ist, dass dieses Release einen Reboot auslöst. Hier sehen wir unser großes Versäumnis, das letzten Endes zu der oben beschrieben kleinen Downtime geführt hat.</p>
<h4 id="diemoralvondergeschicht">Die Moral von der Geschicht'</h4>
<p>Wir haben in diesem Fall Glück im Unglück, weil die meisten Hosts in unter 2 Minuten wieder verfügbar waren. Wir haben den &quot;Ausfall&quot; also großteils selbst erst mitbekommen, als er schon wieder vorbei war. Dennoch ist es absolut nicht in unserem Interesse unangekündigt und solange die Sonne scheint Hosts zu rebooten.</p>
<p>Damit das in Zukunft nicht wieder passiert, haben wir uns darauf verständigt in unserem internen Changelog Änderungen, die einen Reboot triggern können, klar als solche zu kennzeichnen. So können wir die Reboots, wie fast alle anderen in der Vergangenheit auch, via Twitter ankündigen und zu einer weit ruhigeren Zeit spät nachts durchführen.</p>
<p>Auch wenn wir mit unserem Kommunikationsfail nur eine sehr kurze Downtime erzeugt haben, die von den allermeisten vermutlich nicht mal registriert wurde, möchten wir hiermit um Entschuldigung bitten. Wir haben daraus gelernt und werden versuchen solche Fälle in der Zukunft zu vermeiden.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Let's Encrypt: TLS-SNI und Shared Hosting]]></title><description><![CDATA[<div class="kg-card-markdown"><p><em>TLDR:</em> Eine Hand voll Shared-Hosting-Anbietern ist im Moment von einer Lücke im Zusammenhang mit <a href="https://community.letsencrypt.org/t/2018-01-09-issue-with-tls-sni-01-and-shared-hosting-infrastructure/49996">Let's Encrypts tls-sni-01 Challenge</a> betroffen. Wir nicht. Warum steht weiter unten.</p>
<p>Let's Encrypt unterstützt neben der bekannten <a href="https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.2">http-01 Challenge</a> (das ist die mit den wunderschönen <code>/.well-known/acme-challenge/evaGxf...</code>-URLs) auch andere Validierungsformen wie <a href="https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.4">dns-01</a> (involviert &quot;</p></div>]]></description><link>https://blog.uberspace.de/lets-encrypt-tls-sni-problem/</link><guid isPermaLink="false">5aeef848fdb2b80001220593</guid><dc:creator><![CDATA[luto]]></dc:creator><pubDate>Fri, 12 Jan 2018 13:01:01 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p><em>TLDR:</em> Eine Hand voll Shared-Hosting-Anbietern ist im Moment von einer Lücke im Zusammenhang mit <a href="https://community.letsencrypt.org/t/2018-01-09-issue-with-tls-sni-01-and-shared-hosting-infrastructure/49996">Let's Encrypts tls-sni-01 Challenge</a> betroffen. Wir nicht. Warum steht weiter unten.</p>
<p>Let's Encrypt unterstützt neben der bekannten <a href="https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.2">http-01 Challenge</a> (das ist die mit den wunderschönen <code>/.well-known/acme-challenge/evaGxf...</code>-URLs) auch andere Validierungsformen wie <a href="https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.4">dns-01</a> (involviert &quot;Magic&quot;-Records im DNS) und auch tls-sni-01. In diesem Fall findet die Validierung im TLS-Protokoll selbst, noch vor HTTP statt. Dazu müssen spezielle, selbst-signierte Zertifikate ausgeliefert werden. Die von euch, die das genauer interessiert: <a href="https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.3">hier geht's lang zum Standard-Dokument</a>.</p>
<p>Nun hat ein Sicherheitsforscher <a href="https://community.letsencrypt.org/t/2018-01-09-issue-with-tls-sni-01-and-shared-hosting-infrastructure/49996">Probleme mit der Implementation von tls-sni-01</a> bei vielen Shared-Hosting-Anbietern gefunden. Diese Lücke ermöglicht es einer Angreiferin Zertifikate für fremde Domains auf dem selben Host (bzw. unter der selben IP-Adresse) zu erhalten. Wenn es gerade eben darum geht festzustellen, ob dem Antragssteller die angefragte Domain überhaupt gehört, ist das eher ungut.</p>
<p>Wir sind von dieser Lücke bei ...</p>
<ul>
<li>... Uberspace 6 nicht betroffen, weil unser <a href="https://wiki.uberspace.de/webserver:https#importieren"><code>uberspace-add-certificate</code></a> ausschließlich Zertifikate zulässt, die von einer offiziellen CA ausgestellt wurden. Die für den Angriff notwendigen Zertifikate schaffen es also gar nicht bis in den Webserver.</li>
<li>... Uberspace 7 nicht betroffen, weil a) wir dort auf http-01 setzen und b) dort im Moment keine eigenen Zertifikate möglich sind.</li>
</ul>
<p>Wir wünschen also fröhliches und sicheres weiterbasteln! :)</p>
</div>]]></content:encoded></item><item><title><![CDATA[Meltdown & Spectre - Bugs in Intel-CPUs]]></title><description><![CDATA[<div class="kg-card-markdown"><p><em>TLDR:</em> Wir sind (wie alle mit Intel-CPUs) von <a href="https://meltdownattack.com">Meltdown</a> und <a href="https://spectreattack.com">Spectre</a> betroffen. Es gibt Fixes. Sie einzuspielen erfordert einen Reboot. Siehe Liste dazu weiter unten.</p>
<h4 id="dasproblem">Das Problem</h4>
<p>Anfang Jänner wurde bekannt, dass alle neueren Intel-CPUs, AMD-CPUs in manchen Konstellationen und sogar einzelne ARM-CPUs von zwei Timing-Sicherheitslücke betroffen sind.  Sie tragen</p></div>]]></description><link>https://blog.uberspace.de/meltdown-und-spectre/</link><guid isPermaLink="false">5aeef848fdb2b80001220592</guid><dc:creator><![CDATA[luto]]></dc:creator><pubDate>Thu, 04 Jan 2018 18:08:13 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p><em>TLDR:</em> Wir sind (wie alle mit Intel-CPUs) von <a href="https://meltdownattack.com">Meltdown</a> und <a href="https://spectreattack.com">Spectre</a> betroffen. Es gibt Fixes. Sie einzuspielen erfordert einen Reboot. Siehe Liste dazu weiter unten.</p>
<h4 id="dasproblem">Das Problem</h4>
<p>Anfang Jänner wurde bekannt, dass alle neueren Intel-CPUs, AMD-CPUs in manchen Konstellationen und sogar einzelne ARM-CPUs von zwei Timing-Sicherheitslücke betroffen sind.  Sie tragen die wunderschönen Namen <a href="https://meltdownattack.com">Meltdown</a> und <a href="https://spectreattack.com">Spectre</a>. Diese Lücken ermöglichen es im Worst-Case privaten Speicher aus dem Kernel auszulesen und so fremde Daten in die Hände zu bekommen.</p>
<h4 id="derfix">Der Fix</h4>
<p>Das tatsächliche Problem kann dabei nur in der CPU selbst gefixt werden. Es ist jedoch möglich in Software nachzubessern, sodass die Lücken nicht weiter ausnützbar sind. Das <a href="https://lwn.net/Articles/738975/">Linux-Projekt</a>, die Compiler-Toolchain <a href="https://reviews.llvm.org/D41723">LLVM</a> aber auch <a href="https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/">Browser wie Firefox</a> haben hier entsprechende Patches veröffentlicht.</p>
<h5 id="undbeiuberspace">... und bei uberspace?</h5>
<p>Wir setzen (wie so ziemlich alle) CPUs von Intel ein. Es sind demnach alle Uberspace VMs, sowie die Wirt-System auf denen diese laufen verwundbar. Da die jetzt notwendigen Patches in unserem Fall den Kernel selbst betreffen, können wir sie nur zusammen mit einem Reboot einspielen. Das bedeutet für eure Webseiten und Services eine Downtime von 5 bis 15 Minuten. Wann genau diese für euren Uberspace stattfindet, haben wir in der Liste weiter unten dokumentiert.</p>
<p>Sollten dazu weiter Fragen aufkommen oder sollte es im Zusammenhang mit den Reboots zu Problemen kommen, melde dich gerne bei unserem Support: <a href="mailto:hallo@uberspace.de">hallo@uberspace.de</a> oder auf Twitter <a href="https://twitter.com/ubernauten">@ubernauten</a>.</p>
<h4 id="reboots">Reboots</h4>
<p>Wir haben in der Zeit von 05.01.2018 00:30 bis 06.01.2018 00:30 alle unsere Uberspace Hosts gepatcht und neugestartet. Wir erwarten in diesem Zusammenhang keine weiteren Downtimes.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Die Sache mit den virtuellen DocumentRoots]]></title><description><![CDATA[<div class="kg-card-markdown"><h1 id="abbrtitletoolongdidntreadtldrabbr"><abbr title="too long; didn't read">tl;dr</abbr></h1>
<ul>
<li>Wir hatten uns in der Entwicklung darauf verständigt, virtuelle DocumentRoots - <a href="https://wiki.uberspace.de/domain:subdomain#extra_ordner">ein Feature von U5 und U6</a> - bei U7 nicht mehr als Feature anzubieten, sondern im Lauf der U7-Beta ein neues Dashboard zu releasen, mit dem es viel einfacher sein wird, mehrere Uberspaces zu verwalten, so wie</li></ul></div>]]></description><link>https://blog.uberspace.de/die-sache-mit-den-virtuellen-documentroots/</link><guid isPermaLink="false">5aeef848fdb2b80001220590</guid><category><![CDATA[Uberspace7]]></category><dc:creator><![CDATA[Jonas]]></dc:creator><pubDate>Wed, 06 Dec 2017 14:40:12 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><h1 id="abbrtitletoolongdidntreadtldrabbr"><abbr title="too long; didn't read">tl;dr</abbr></h1>
<ul>
<li>Wir hatten uns in der Entwicklung darauf verständigt, virtuelle DocumentRoots - <a href="https://wiki.uberspace.de/domain:subdomain#extra_ordner">ein Feature von U5 und U6</a> - bei U7 nicht mehr als Feature anzubieten, sondern im Lauf der U7-Beta ein neues Dashboard zu releasen, mit dem es viel einfacher sein wird, mehrere Uberspaces zu verwalten, so wie wir uns das als &quot;best practice&quot; vorstellt haben. (Der Plan mit dem neuen Dashboard besteht natürlich weiter, und die Arbeit daran hat auch schon begonnen.)</li>
<li>Wir haben schon damit gerechnet, dass diese Entscheidung erläuterungsbedürftig werden könnte. Der Widerspruch etlicher User traf uns allerdings in größerem Umfang, mit stärkerer Enttäuschung und mit Argumenten, die wir zu bedenken hatten. Wir wollten keinen &quot;Okay, okay, okay&quot;-Schnellschuss machen und unsere Entscheidung einfach wieder umwerfen, aber wir haben uns mit Usern ausgetauscht und Argumente und Use Cases eingesammelt, darüber gesprochen, und am Ende haben wir beschlossen, die virtuellen DocumentRoots entgegen der ursprünglichen Planung auch auf U7 einzuführen.</li>
<li>Nach wie vor <a href="https://wiki.uberspace.de/domain:hintergruende#ein_wort_zum_thema_reselling">raten wir deutlich davon ab</a>, dieses Feature zum Hosting mehrerer unterschiedlicher Projekte in einem Account zu verwenden, weil zwischen jenen Projekten dann keine Rechtetrennung besteht. Wenn Rechtetrennung wichtig ist - und das ist sie im Zweifelsfall fast immer - solltest du wie bisher dem Rat folgen, <a href="https://wiki.uberspace.de/domain:hintergruende#was_wenn_ich_mehrere_domains_habe">mehrere Uberspaces anzulegen</a>. Wir werden das vereinfachen, versprochen.</li>
</ul>
<h1 id="worumgehtseigentlich">Worum geht's eigentlich?</h1>
<p>Vom Konzept her ist ein Uberspace dazu gedacht, <em>ein</em> Projekt darauf zu hosten. Dafür wird <code>/var/www/virtual/&lt;user&gt;/html</code> als DocumentRoot angeboten. Schon ziemlich in der Anfangszeit trafen Fragen bei uns ein, ob man da nicht die Möglichkeit schaffen könnten, für kleinere Sachen einfach separate Verzeichnisse anzulegen, um keinen separaten Uberspace dafür anzulegen - &quot;das lohnt doch gar nicht&quot;. Wir waren mit Uberspace gerade erst gestartet, voller Tatendrang, ein wenig blauäugig vielleicht auch, und dachten uns: Klar, basteln wir doch schnell eine <code>RewriteRule</code>, und schon war das Feature geboren: User konnten ab sofort in <code>/var/www/virtual/&lt;user&gt;</code> einfach weitere Verzeichnisse ablegen, die so hießen wie Hostnamen, und schon wurden Anfragen nach jenen Hostnamen aus diesem Verzeichnis bedient (vorausgesetzt, der Hostname wurde auf den Uberspace aufgeschaltet). So weit, so gut - oder besser gesagt: So weit, so okay.</p>
<h1 id="problemeprobleme">Probleme, Probleme</h1>
<p>Im Support schlagen - bis heute - immer wieder die gleichen Probleme auf:</p>
<ul>
<li>Wer innerhalb eines virtuellen DocumentRoots mit RewriteRules arbeiten möchte, benötigt <code>RewriteBase /</code> - das ist einfach so, und wir haben keinen Weg gefunden, das zu vermeiden. Wir weisen bereits deutlich in der Dokumentation darauf hin und vermeiden damit sicherlich eine Reihe von Anfragen, aber aus bleiben sie dennoch nicht.</li>
<li>Die Umgebungsvariable <code>DOCUMENT_ROOT</code>, die der Apache-Webserver für Applikationen bereitstellt, beinhaltet prinzipiell den <em>echten</em> DocumentRoot, also den Pfad des <code>html</code>-Verzeichnisses, nicht den virtuellen DocumentRoot. Häufig ist das irrelevant; wenn allerdings User oder Applikationen diese Variablen aus Ausgangswert für irgendwelche selbst-konstruierten Pfade verwenden, fällt einem das auf die Füße.</li>
<li>User haben des Öfteren solche virtuellen DocumentRoots angelegt und sich dann - bis hin zu einer Supportanfrage - gewundert, warum sie nicht funktionieren, obwohl sie einfach nur vergessen haben, jenen Hostnamen auch in die Konfiguration des Webservers eintragen zu lassen. Umgekehrt haben manche verzweifelt Dateien in ihrem <code>html</code>-Verzeichnis geändert und sich gewundert, warum sich die Änderungen nicht im Web widerspiegelten, bis wir sie darauf hingewiesen haben, dass sie für den verwendeten Hostnamen offenbar früher mal irgendwann einen virtuellen DocumentRoot angelegt hatten und dann vergessen hatten, dass er da ist.</li>
</ul>
<p>Das alles sind natürlich vergleichsweise leicht erklär- und lösbare Schwierigkeiten - Schwierigkeiten, die mit dem echten DocumentRoot <code>html</code> aber eben nicht auftreten.</p>
<p>Tragisch wird es aber dann, wenn es um Einbrüche mittels Lücken in von Usern installierter Software geht. Lückenhafte WordPress-Themes oder veraltete Joomla- und Drupal-Installationen bilden da in der Praxis so das Grusel-Trio. Und hier ist dann das Problem: Derartige Einbrüche streuen typischerweise Backdoors überall hin, wo der Angreifer Schreibrechte hat. Und das heißt beim Einsatz von virtuellen DocumentRoots: Wenn ich da ein halbes Dutzend Dinge in einen Account stopfe (ein CMS, ein Blog, einen Merch-Shop, einen persönlichen RSS-Reader, ein Ticketsystem und noch eine Applikation, die ich irgendwann mal ausprobiert und dann vergessen habe), dann sind eben <em>alle</em> diese Applikationen den Sicherheitslücken <em>aller</em> dieser Applikationen ausgesetzt - eine einzelne Lücke reicht aus, und schon sind Backdoors auch in den Verzeichnissen von Applikationen installiert, die gar keine bekannten Lücken beinhalten.</p>
<p>Natürlich können wir dann sagen: Naja, <a href="https://wiki.uberspace.de/domain:hintergruende#ein_wort_zum_thema_reselling">darauf haben wir dich doch deutlich hingewiesen</a>. Aber es ist ja nicht sonderlich zielführend, einem User, dem wir gerade schon die Gesamtheit seiner DocumentRoots wegen eines Einbruchs sperren mussten, noch ein &quot;selber schuld&quot; an den Kopf zu knallen, egal wie freundlich und konstruktiv man das formuliert.</p>
<p>Außerdem versuchen wir, in die nicht ganz so nahe Zukunft zu blicken, denn nachdem sich herauskristallisiert hat, dass Uberspace wohl keine Eintagsfliege wird, sondern sich sogar ziemlich gut und zu unserem Haupt-Umsatzträger entwickelt, haben wir natürlich auch gewisse Ideen und Pläne, wo wir gerne hin wollen. Das heißt auch, dass wir zwischen maximaler Flexibilität und guter Usability gelegentlich auch mal einen Tradeoff machen müssen und - da machen wir uns nichts vor - nicht mit <em>jeder</em> Entscheidung <em>alle</em> User <em>immer</em> glücklich machen können, auch wenn wir natürlich darum bemüht sind, das möglichst gut hinzukriegen. Das fordert aber eben auch Nachdenken und Zeit. Bei U5/U6 haben wir viele Dinge mehr oder weniger auf Zuruf realisiert - teils mit positiven Effekten; teils auch mit Folgen, wo wir uns im Nachhinein gewünscht hätten, vielleicht lieber vorher etwas mehr nachgedacht zu haben, weil wir uns in Situationen gebracht haben, die später nicht mehr zu revidieren waren. Dass wir U7 von Grund auf neu bauen, beinhaltet auch, dass wir jedes einzelne Feature nochmal ans Reißbrett bringen und uns fragen, wie sich das auswirken kann - vom nackten Feature abgesehen also auch zu fragen: Was für Support wird das generieren, und wieviel? Wie stabil wird das sein? Welche Fehler in der Handhabung oder im Betrieb können wir antizipieren? Sehen wir möglicherweise Kompatibilitätsprobleme mit anderen Komponenten von U7? Da <em>kann</em> man hier und da sehr wohl zu dem Schluss kommen, dass man etwas schon bei U5/U6 praktisch optimal gebaut hat; manches hingegen wird ganz anders als früher gebaut, selbst wenn es sich aus Usersicht sogar ähnlich oder identisch benutzen lässt.</p>
<p>Zu jenen Abwägungen zwischen Flexibilität und Usability gehört beispielsweise die bisher nur ganz lose Idee, sich vielleicht später einmal mit Ansible-Playbooks zu beschäftigen, die beliebte Applikationen auf einem Uberspace installieren. Ihr wisst schon: So ein Pendant zu One-Click-Installern, aber eben in nachvollziehbar, weil man ja in die zugrundeliegenden Playbooks eben reinschauen kann, um zu sehen, was konkret da <em>passieren</em> wird, und die man ggf. auch forken und abwandeln kann, wenn man nicht einverstanden ist - und das eben auf der Basis eines verbreiteten Open-Source-Tools und nicht auf einer selbst gebauten proprietären Lösung. Dafür ist aber eben stärker als bisher Voraussetzung, dass ein definierter Zustand vorgefunden wird, und dafür erschien uns sinnvoll, festzulegen, dass solche Playbooks ihre Dinge eben immer in den einen, offiziellen DocumentRoot installieren sollten und alles andere die Dinge arg verkomplizieren würde.</p>
<p>Also war die - aus unserer Sicht - naheliegende Idee geboren: Wir lassen das mit den virtuellen DocumentRoots fortan einfach bleiben. Statt zu <em>empfehlen</em>, separate Uberspaces anzulegen, <em>forcieren</em> wir künftig, dies zu tun. Das erspart uns nebenbei den oben genannten Support - was natürlich zwei Aspekte hat: Einerseits ist es natürlich ohne Frage gut für uns, wenn der Support entlastet wird, damit er mehr Zeit für andere Fragen hat; andererseits ist es für die User Experience natürlich auch besser, wenn ein User gar nicht erst über ein Problem fällt, statt erst darüber zu fallen und dann erstmal Hilfe suchen zu müssen. Den Plan, das Anlegen mehrerer Uberspaces über ein neues Dashboard signifikant zu vereinfachen, hatten wir ohnehin schon lange - und er passte gut dazu.</p>
<h1 id="vielleichtwardaseinwenigungeschickt">Vielleicht war das ein wenig ungeschickt</h1>
<p>Nun ist es natürlich so: Das neue Dashboard gibt es noch nicht, auch wenn die Arbeit daran inzwischen begonnen wurde. Es erscheint natürlich irgendwie unklug, <em>erst</em> das fragliche Feature der virtuellen DocumentRoots als bei U7 abgeschafft zu erklären, und erst <em>dann</em> irgendwann später ein neues Dashboard vorzustellen, was dazu in der Lage ist, das zu kompensieren, aber wir hatten uns das wie folgt gedacht:</p>
<ul>
<li>Wir haben ja nun nicht das <em>bestehende</em> Feature bei U5/U6 entfernt (das stand überhaupt nie zur Debatte), sondern es lediglich bei einer <em>künftigen</em> Produktversion weggelassen.</li>
<li>Wir sind bei U7 ohnehin schon viel, viel, <em>viel</em> zu lange von <a href="https://de.wikipedia.org/wiki/Release_early,_release_often">Release early, release often</a> abgewichen und hatten einen dicken Knoten zu durchschlagen, was wir nicht durch Abhängigkeiten á la &quot;Das können wir erst tun, wenn jenes Feature in jenem anderen Produktteil - dem Dashboard - fertig ist&quot; noch weiter hinauszögern wollten.</li>
<li>Es erschien uns schlüssig, zu argumentieren: Wenn du virtuelle DocumentRoots brauchst, kannst du ja einfach noch bei U6 bleiben, denn da gibt es sie ja. U7 ist erst eine Beta, und wir werden zwar nicht <em>dort</em> das Feature einbauen, aber parallel dazu im Dashboard entwickeln, so dass du ihm, sobald du dort eine viel einfachere Verwaltung mehrerer Uberspaces hast, gar nicht nachzutrauern brauchst.</li>
</ul>
<p>Also haben wir's gemacht, wie wir es eben gemacht haben, und das war... vielleicht ein wenig ungeschickt.</p>
<h1 id="argumenteargumente">Argumente, Argumente</h1>
<p>Uns war wichtig, dass wir jetzt nicht <em>einfach so</em> sagen: Ohje, die User sind unzufrieden, also bringen wir's hektisch wieder. Wir hatten uns ja immerhin etwas dabei gedacht, das Feature nicht mit aufzunehmen - aber der Druck war schon spürbar. Also hat Matthias sich drangesetzt und hat die Punkte, die User so vorgebracht haben, gesammelt und strukturiert:</p>
<ul>
<li>Es könnte sein, dass mehrere Projekte in einem Uberspace auf denselben Datenbestand zugreifen - beispielsweise ein Staging-System.</li>
<li>Nur, weil wir keine virtuellen DocumentRoots mehr anbieten, verhindern wir ja nicht, dass User sich nicht dennoch einen <em>Haufen</em> Applikationen in einen einzigen Uberspace packen, also eben CMS, Blog, Shop, ... nur dann eben nicht in Form von Subdomains, sondern das müsste dann in Unterverzeichnissen laufen. Den gewünschten forcierten Sicherheitsgewinn hätten wir damit dann nicht erzielt.</li>
<li>Gleiches gilt z.B. für die Installation mehrerer Dienste auf mehreren Ports, kombiniert mit einer .htaccess-Datei mit RewriteRules, die Requests anhand unterschiedlicher %{HTTP_HOST}-Werte an unterschiedliche Ports schicken.</li>
<li>Derzeit ist eben die <em>Verwaltung</em> mehrerer Uberspaces noch nicht wirklich gegeben, außer rudimentär via OpenID. Ein neues Dashboard wird das lösen.</li>
<li>Insbesondere für ein gemeinsames Aufladen gibt es noch keine wirklich runde Lösung. Das <em>wird</em> sich ändern, insofern ist das perspektivisch eher kein Problem mehr, aber im Moment eben schon noch.</li>
<li>Einige User empfinden es als Einschränkung, dann nicht mehr &quot;mal eben schnell&quot; etwas <em>testen</em> zu können. Unser Argument wäre hier, dass <em>gerade</em> zum Testen ein ganz neu angelegter Uberspace, der anschließend entsorgt werden kann, doch eigentlich die <em>besonders</em> gute Lösung wäre, vor allem, weil man damit dann keine Produktivdaten einem Risiko aussetzt; allerdings wenden User auch ein, dass solche Tests auch mal länger als den kostenlosen Testmonat dauern können und nicht automatisch weggeräumt werden sollen (wogegen wir wiederum einwenden können, dass es riskant ist, Tests lange liegenzulassen - im Zweifelsfall wird einem dann ein Jahr später über eine zwischenzeitlich entdeckte Sicherheitslücke in der testweise installierten Applikation dann der Account aufgemacht; leider auch eine Praxis-Erfahrung). Aber diese Argumente kann man trefflich Ping-Pong spielen lassen.</li>
<li>User verwenden virtuelle DocumentRoots zum Teil für Mikro-Projekte (nennen wir sie mal &quot;Web-Visitenkarte&quot;), teils mit rein statischen Inhalten, bei denen Rechtetrennung kein Thema ist, weil dort ohnehin keine dynamischen Inhalte ausgeführt werden.</li>
<li>Insbesondere für solche kleinen Mikro-Projekte erscheint einigen Usern selbst der symbolische Mindestpreis von 1 Euro als zu hoch. Teils ließ sich aus Äußerungen direkt oder indirekt herauslesen, wir seien jetzt wohl &quot;geldgeil&quot; geworden, weil das Anlegen von 10 Uberspaces für 10 Mikro-Projekte dann eben halt auch nicht mehr für 'nen Fünfer oder gar weniger im Monat zu haben sei.</li>
<li>Auch ein Datenschutz-Aspekt wurde genannt, den wir so tatsächlich gar nicht auf dem Schirm hatten: Wenn unter <code>&lt;user&gt;.uber.space</code> und unter <code>domain.tld</code> forciert die gleichen Inhalte abrufbar sind, kann man regelmäßig aus einem Usernamen auf einen Domainnamen schließen. (Wobei sich das immer noch via .htaccess hätte verhindern lassen, aber wir haben gelernt, dass es User gibt, die für den internen Hostnamen einfach einen separaten, leeren DocumentRoot angelegt haben und jenen somit abgeklemmt haben.)</li>
<li>Etwas weg vom <em>technischen</em> Bereich gingen dann Äußerungen, dass sich User die Meinung, wie denn mit mehreren Projekten umgegangen werden möge, nicht von uns &quot;vorkauen&quot; lassen möchten. Teils fiel auch der Begriff &quot;Elfenbeinturm&quot;.</li>
</ul>
<h1 id="zurckansreibrett">Zurück ans Reißbrett</h1>
<p>Unsere teaminternen Gespräche dazu waren hart, und wir können offen zugeben, dass mehrere von uns im Verlauf dieser Gespräche ihre Meinung geändert haben; in unterschiedliche Richtungen; teils sogar mehr als einmal. Worin wir uns aber sehr schnell einig waren: Wenn User beginnen, den Eindruck zu äußern, wir säßen in einem Elfenbeinturm, dann machen wir etwas nicht richtig, oder zumindest kommunizieren wir etwas nicht richtig. Sehr wahrscheinlich aber auch schlicht und einfach gleich beides.</p>
<p>Wir können ohne Umschweife zugeben: Wir finden nicht alles super, was User bei uns so machen bzw. <em>wie</em> sie es machen - also, aus technischer Sicht. So, jetzt ist es raus. Steinigt uns. (Bitte nicht.)</p>
<p>Allerdings ist Uberspace seit Tag 1 ein Produkt, bei dem wir ein großes Augenmerk darauf gelegt haben, möglichst viel von der <em>Freiheit</em>, die Linux und die Shell so bieten, an User weiterzugeben. Und das hat <em>selbstverständlich</em> zur Folge, dass unterschiedliche User unterschiedliche Problemstellungen auch unterschiedlich angehen und es nicht an uns ist, da zwischen &quot;falsch&quot; und &quot;richtig&quot; zu urteilen. Die - ganz prinzipielle - Herausforderung ist: Wie kriegen wir ein Produkt hin, das für User <em>einfach</em> zu benutzen ist und ihnen aber <em>dennoch</em> möglichst viele Freiheiten lässt?</p>
<p>U5/U6 sind davon charakterisiert, dass wir in erster Linie viele Freiheiten gelassen haben. Das ist allerdings teils mit Ecken und Kanten verbunden, wo wir <em>heute</em> sagen würden: Ohjeohje, da müssen wir aus Usability-Sicht aber nochmal ran, das können wir so nicht shippen. Denn nur weil wir zu einem nicht gerade kleinen Teil Nerd-User haben, die schon lange auf einer Shell Zuhause sind, heißt das ja nicht, dass wir uns nicht darum bemühen sollten, Dinge flexibel, aber eben auch <em>einfach</em> zu machen. Ein Uberspace soll aus unserer Sicht einfach ein <em>gutes</em> Produkt sein und kein Statussymbol á la &quot;Darauf können sich die Leute, die das bedienen können, etwas einbilden&quot;. Deshalb sind wir bestrebt, den Spagat zu schaffen, etwas zu bauen, was für alle leichter zu benutzen ist, aber denen, die tiefer graben wollen, keine Steine in den Weg legt.</p>
<p>Jeder der einen Spagat hinlegen kann, weiss, dass diesem ein langer Lernprozess vorausgeht. Und wir haben daraus gelernt. Für diese Erfahrung - die wir auch bei künftigen Designentscheidungen stets im Kopf behalten werden - können wir jedem Einzelnen, der uns Contra gegeben hat, nur danken.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Die U7 Public Beta]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Sagt Hallo zu <code>biela</code>, <code>brorsen</code>, <code>encke</code>, <code>faye</code>, <code>finlay</code>, <code>halley</code>, <code>olbers</code>, <code>tempel</code>, <code>tuttle</code> und <code>wolf</code>! Wir haben mehrere Terabyte Plattenplatz, mehrere Dutzend CPU-Kerne und mehrere hundert GB RAM springen lassen und zehn Hosting-Systeme für euch gebaut, damit nach den 50 Usern, die unsere Closed Beta testen konnten, nun alle anderen, die</p></div>]]></description><link>https://blog.uberspace.de/wip-die-u7-public-beta/</link><guid isPermaLink="false">5aeef848fdb2b8000122058e</guid><category><![CDATA[Uberspace7]]></category><category><![CDATA[updates]]></category><dc:creator><![CDATA[Jonas]]></dc:creator><pubDate>Fri, 29 Sep 2017 12:53:02 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Sagt Hallo zu <code>biela</code>, <code>brorsen</code>, <code>encke</code>, <code>faye</code>, <code>finlay</code>, <code>halley</code>, <code>olbers</code>, <code>tempel</code>, <code>tuttle</code> und <code>wolf</code>! Wir haben mehrere Terabyte Plattenplatz, mehrere Dutzend CPU-Kerne und mehrere hundert GB RAM springen lassen und zehn Hosting-Systeme für euch gebaut, damit nach den 50 Usern, die unsere Closed Beta testen konnten, nun alle anderen, die schon auf U7 neugierig sind, ebenfalls loslegen können.</p>
<h2 id="welchefeaturesmachendiebetaschonheutebesseralsu6">Welche Features machen die Beta schon heute besser als U6?</h2>
<ul>
<li>vollautomatisches HTTPS-Handling mit Let's Encrypt für <em>alle</em> Domains</li>
<li>HTTP wird grundsätzlich auf HTTPS umgeleitet</li>
<li>Diverse Security-Header werden als Default gesetzt</li>
<li>wir unterstützen nun HTTP/2</li>
<li>OCSP Stapling</li>
<li>PHP ohne Startverzögerungen (eigene PHP-FPM-Instanz pro User)</li>
<li><em>user</em>.uber.space &amp; <em>user</em>@uber.space</li>
<li>MariaDB 10.1 ohne Klimmzüge</li>
<li>insgesamt deutlich frischere Toolchain an Kommandozeilentools</li>
<li>Webserver-Logging ist nun standardmäßig komplett aus (Datensparsamkeit FTW!), kann aber auf Wunsch eingeschaltet werden und liefert dann Logs mit gekürzten IP-Adressen</li>
<li>komplett neues Handbuch auf <a href="https://manual.uberspace.de">manual.uberspace.de</a> - aus einem Guss, auf Englisch, mobiltauglich und mit <a href="https://manual.uberspace.de/en/changelog.html">ChangeLog</a></li>
<li>supervisord als leistungsstärkerer daemontools-Nachfolger zum Verwalten eigener Daemons</li>
</ul>
<h2 id="wasistsonstnochfertig">Was ist sonst noch fertig?</h2>
<ul>
<li>Python 2.7, 3.4, 3.5, 3.6</li>
<li>PHP 5.6, 7.0, 7.1, 7.2</li>
<li>Perl 5.16.3</li>
<li>Lua 5.1</li>
<li>GCC 4.8 (C/C++)</li>
<li>Cronjobs</li>
<li>Subversion</li>
<li>SQLite 3</li>
<li>node.js 6, 8, 9</li>
<li>virtuelle Mailuser (vmailmgr)</li>
<li>maildrop</li>
<li>ruby</li>
<li><a href="https://mysql.uberspace.de/adminer">Adminer</a> und <a href="https://mysql.uberspace.de/phpmyadmin/">phpMyAdmin</a></li>
<li><a href="https://webmail.uberspace.de">Webmail</a></li>
<li>Rspamd als Ersatz für SpamAssassin und DSPAM</li>
</ul>
<h2 id="waskanndiebetanochnicht">Was kann die Beta noch nicht?</h2>
<ul>
<li>Programmiersprachen: <s>Ruby,</s> Erlang <s>und node.js</s></li>
<li>Datenbanken: PostgreSQL, CouchDB und MongoDB</li>
<li><s>virtuelle Mailuser (vmailmgr)</s></li>
<li>Backups im direkten Userzugriff (wir machen durchaus Backups, aber der Zugriff ohne Support-Eingriff darauf fehlt noch)</li>
<li><s>Adminer und phpMyAdmin</s></li>
<li>Handbuch auf Deutsch</li>
<li>ezmlm-idx</li>
<li><s>maildrop</s></li>
<li>gitolite 3</li>
<li>Ports öffnen</li>
<li>2-Faktor-Authentifizierung für SSH</li>
<li>Redis</li>
<li><s>SpamAssassin</s></li>
<li><s>Webmail</s></li>
</ul>
<h2 id="welchefeatureswerdenwirauchnichtmehreinbauen">Welche Features werden wir auch nicht mehr einbauen?</h2>
<ul>
<li>gitolite 2 (ersetzt durch gitolite 3)</li>
<li>DSPAM (unmaintained)</li>
<li>daemontools (unmaintained, ersetzt durch supervisord)</li>
<li>toast (unmaintained)</li>
<li>CVS (unmaintained)</li>
<li>Namensräume für Mail-Domains (hohe Komplexität und ein Support-Albtraum; nutze lieber separate Uberspaces dafür)</li>
<li><s><a href="https://blog.uberspace.de/die-sache-mit-den-virtuellen-documentroots/">Hostnamens-Verzeichnisse in /var/www/virtual/<em>USER</em> (hoher Supportaufwand, da technisch nicht 100% kompatibel zu echten DocumentRoots; motiviert zum Hosting unterschiedlichster Applikation im gleichen Account und vereinigt die Sicherheitsrisiken aller jener Applikationen</a></s>; nutze lieber separate Uberspaces dafür)</li>
</ul>
<h2 id="wiekommeichaneinenu7betaaccount">Wie komme ich an einen U7-Beta-Account?</h2>
<p>Auf <a href="https://uberspace.de/register?u7=1">https://uberspace.de/register?u7=1</a> bekommst du eine Checkbox angeboten, mit der einen Account auf U7 statt auf der derzeit stabilen Version U6 anlegen kannst.</p>
<h2 id="kannichmeinenbestehendenuberspaceaufu7upgraden">Kann ich meinen bestehenden Uberspace auf U7 upgraden?</h2>
<p>Nein - U7 ist ein neues Produkt. Wir haben es auf Basis von CentOS 7 gebaut (daher die Versionsnummer); die aktuelle stabile Version basiert noch auf CentOS 6. Insbesondere alle selbst kompilierten Dinge würden insofern schon aufgrund sehr abweichender Library-Versionen an dieser Stelle brechen. Wir haben auch an diversen Stellen inkompatible Änderungen vorgenommen und einige alte Zöpfe abgeschnitten. Keine Sorge: Wir werden U6 bis zum Ende der Supportzeit der Distribution (im Jahr 2020) weiterhin pflegen; es gibt also keinerlei Anlass, jetzt panisch unter Druck Dinge migrieren zu müssen. Aber was du schon seit mehreren Jahren auf U6 (oder gar noch auf U5) hostest, möchte mit hoher Wahrscheinlichkeit ohnehin einmal liebevoll von dir umsorgt werden - du verbringst ja vermutlich auch nicht dein ganzes Leben in der gleichen Wohnung, und ein Umzug ist eine gute Gelegenheit, schöne Dinge mitzunehmen, in die Jahre gekommene Dinge dabei vielleicht einmal neu anzumalen, und im besten Fall auch mal ein wenig zu entrümpeln und sich von Dingen zu trennen. Trau dich!</p>
<h2 id="warummachenwirdiebetajetztffentlich">Warum machen wir die Beta <em>jetzt</em> öffentlich?</h2>
<p>Well... Fuck it, ship it.</p>
<p>Wir haben sehr lange daran gearbeitet, U7 zu konzipieren und &quot;ganz nebenbei&quot; unsere Arbeitsweise und auch unsere Tools neu zu erfinden. Das Produkt ist natürlich nicht <em>fertig</em> (deshalb heißt es ja auch &quot;Beta&quot;), aber es kann auf jeden Fall so viel, dass unsere Beta-User schon jede Menge Dinge erfolgreich darauf ausprobieren konnten. Wir hätten es vielleicht schon früher tun können; wir könnten genauso gut auch Argumente finden, warum wir es erst später tun möchten. Wir haben uns nun aber im Development auf ein - wie wir finden - ziemlich rundes Bündel an Features geeinigt, das von einer vergleichsweise großen Gruppe von Usern als &quot;für ihre Zwecke ausreichend fertig&quot; betrachtet werden kann. Deshalb... releasen wir die Beta jetzt einfach mal, auch wenn noch Dinge fehlen.</p>
<h2 id="heitbetadassdassystemirgendwieinstabilistnochnichtdievolleperformancehatodernochmalplattgemachtwird">Heißt &quot;Beta&quot;, dass das System irgendwie instabil ist, noch nicht die volle Performance hat oder nochmal plattgemacht wird?</h2>
<p>Beta heißt nur, dass das Produkt noch nicht alle Features hat, die wir dafür so auf dem Schirm haben. Das, was da ist, ist stabil, durchläuft beim Deployment umfangreiche Tests und unterliegt im Produktivbetrieb dem üblichen Monitoring. Die Hosts laufen produktiv auf vollwertiger, extra dafür angeschaffter Hardware mit dem üblichen Redundanzlevel - und wir haben mit mehr RAM- und CPU-Ressourcen pro User kalkuliert als bisher. Wir werden zu einem späteren Zeitpunkt, wenn wir die Zeit für gekommen halten, einfach das Beta-Label abkratzen. Alle Accounts bleiben dann so wie sie sind erhalten und laufen einfach weiter.</p>
<p>Aber auch, wenn die Beta bereits durch 50 User der Closed Beta mit interessanten Edge Cases malträtiert wurde und wir dabei viele Kinderkrankheiten behoben haben: Wir machen uns und auch euch nichts vor - U7 ist ein von Grund auf neu entwickeltes Ding, das trotz vieler Tests vielleicht noch die eine oder andere Kante mitbringen könnte, die bisher weder wir noch unsere Tester gefunden haben. Bitte seid nachsichtig und sagt uns einfach Bescheid - wir gehen jedem Problem nach.</p>
<h2 id="kannichmeinenusernamenbehalten">Kann ich meinen Usernamen behalten?</h2>
<p>Usernamen sind bei uns prinzipiell global eindeutig; es kann also nur genau <em>einen</em> Account unter einem Usernamen geben. Das ist nicht zuletzt wichtig, um Aufladungen - die den Usernamen im Verwendungszweck tragen - klar einem Account zuzuordnen.</p>
<p>Wir <em>überlegen</em> (bzw. haben halbfertigen Code dafür), im Dashboard eine Option einzubauen, um <em>übergangsweise</em> einen zweiten Uberspace auf U7 anlegen zu können, wobei das klare Ziel ist, nach einiger Zeit den alten Account (bzw. den neuen, wenn du nicht zufrieden mit U7 bist und lieber noch auf U6 bleiben willst) zu löschen. Diese Funktionalität liefern wir aber noch nicht direkt jetzt.</p>
<h2 id="werdenbetaaccountsberechnet">Werden Beta-Accounts berechnet?</h2>
<p>Ja. Sie unterliegen aber natürlich wie jeder andere Uberspace auch einem kostenlosen Testmonat. Wenn das bestehende Featureset dir bereits ausreicht, kannst du deinen Beta-Account ja auch schon produktiv nutzen; wir haben hier bereits fünfstellige Beträge in neue Hardware investiert, um die Beta-Hosts mit Systemressourcen auszustatten, und wir haben mehrere tausend Arbeitsstunden in die Entwicklung der nächsten Generation unserer Hosting-Plattform gesteckt, die auch als Beta schon viel leistet. Wenn du mit dem Featureset noch nicht ausreichend bedient bist, gehst du kein Risiko ein: Lösche den Uberspace wieder bzw. lasse ihn durch Nicht-Aufladung auslaufen. Verfolge gerne die weitere Entwicklung und lasse uns wissen, was dir noch fehlt, denn wenn wir dich heute noch nicht mit U7 kriegen können, dann wollen wir es morgen!</p>
</div>]]></content:encoded></item><item><title><![CDATA[Uberspace 7 - Episode 8]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Moin zusammen! Gehen wir gleich ans Eingemachte. <a href="https://blog.uberspace.de/uberspace-7-episode-7/">Im letzten Blogartikel</a> schreiben wir:</p>
<blockquote>
<p>Zwar ist Uberspace 7 nicht feature complete, aber so gut wie „fertig“ genug, um es endlich für Euch aufzumachen. Das heißt, wir spucken nun nochmal ordentlich in die Hände, gehen Montag in den letzten, zweiwöchigen Sprint und dann…</p></blockquote></div>]]></description><link>https://blog.uberspace.de/uberspace-7-episode-8/</link><guid isPermaLink="false">5aeef848fdb2b8000122058d</guid><category><![CDATA[Uberspace7]]></category><category><![CDATA[updates]]></category><dc:creator><![CDATA[nichtmax]]></dc:creator><pubDate>Wed, 30 Aug 2017 14:50:07 GMT</pubDate><media:content url="https://blog.uberspace.de/content/images/2017/08/Dubbo_Airport_departure_lounge-1.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://blog.uberspace.de/content/images/2017/08/Dubbo_Airport_departure_lounge-1.jpg" alt="Uberspace 7 - Episode 8"><p>Moin zusammen! Gehen wir gleich ans Eingemachte. <a href="https://blog.uberspace.de/uberspace-7-episode-7/">Im letzten Blogartikel</a> schreiben wir:</p>
<blockquote>
<p>Zwar ist Uberspace 7 nicht feature complete, aber so gut wie „fertig“ genug, um es endlich für Euch aufzumachen. Das heißt, wir spucken nun nochmal ordentlich in die Hände, gehen Montag in den letzten, zweiwöchigen Sprint und dann… machen wir erst nochmal Urlaub und erholen uns ordentlich. 🌴😎</p>
</blockquote>
<p>Die Entwickler unter euch werden wissen: Der letzte Sprint ist nie der letzte und so mussten wir <em>natürlich</em> auch hier (was ETAs angeht hätten wir eigentlich aus der Vergangenheit lernen müssen...) noch mal das Skalpell ansetzen und aus einem Sprint mehrere machen.</p>
<p>Der Grund ist folgender:</p>
<h3 id="hallouberspace">Hallo uber.space</h3>
<p>Bisher vergeben wir für unsere User Domains im Stil von <code>username.servername.uberspace.de</code>. Ab Uberspace 7 bekommt jeder User eine <code>username.uber.space</code>-Domain, was nicht nur einfacher zu merken, sondern auch zeitgemäßer und (hint hint) internationaler wirkt. Wir haben <code>uber.space</code> in die <a href="https://publicsuffix.org/learn/">Mozilla Public Suffix List</a> <a href="https://github.com/publicsuffix/list/pull/432">aufnehmen lassen</a>, durch diesen Schritt bekommen unsere User <a href="http://mixedbit.org/blog/2012/11/05/sibling_domains_cookies_isolation_.html">cookie isolation</a> und wir können Let's Encrypt Zertifikate für diese Domains nutzen (was mit dem <a href="https://letsencrypt.org/docs/rate-limits/">Limit</a> von 20 Anfragen pro Woche schlicht nicht möglich gewesen wäre). Zur Erinnerung: Jede Domain bekommt ein passendes Zertifikat von uns spendiert. In <a href="https://blog.uberspace.de/uberspace-7-episode-6/">Episode 6</a> haben wir das bereits kurz angerissen.</p>
<p>Hinter den Kulissen bedeutet diese Umstellung aber etwas mehr Arbeit:</p>
<h4 id="dnsrecords">DNS-Records</h4>
<p>Wir müssen beim Erstellen (und Löschen) eines Accounts DNS-Records setzen. Bis Uberspace 6 haben wir pro Host einfach einen Wildcard-Eintrag angelegt und damit war das erledigt. Diese Option gibt es nun - da der Hostname aus der Domain fällt - nicht mehr.</p>
<p>Langjährige User wissen vielleicht, dass wir zwar mal Domains angeboten haben, aber kein Interface für Änderungen am DNS bereit stellen. Das liegt schlicht daran, dass wir soetwas nicht haben weil unsere Prioritäten eben nicht bei Domains, sondern bei Hosting liegen. Für die Umstellung <em>brauchen</em> wir nun aber zumindest eine API, über die wir die Records anlegen können. Die ist soweit fertig und befindet sich gerade im Testmodus.</p>
<h4 id="emails">E-Mails</h4>
<p>Wir brauchen für eingehende Mails an <code>@uber.space</code> einen Proxyserver, der die Mails an den Server weiterleitet, auf dem der User liegt. Auch hier betreten wir Neuland und beim Thema Mail gibt's allerhand zu beachten: Nehmen wir einfach alle Mails an? Filtern wir vorher über Blacklists um SPAM einzudämmen? Wie stellen wir sicher, dass Mails auch noch ankommen, wenn der Proxy mal nicht erreichbar ist? Das Thema Mail ist bei uns intern <a href="https://www.youtube.com/watch?v=QJ4bqY9NAq0">ein ganz heißes Eisen</a> mit viel Diskussionsbedarf und beim letzten Blogartikel hatten wir die Komplexität ehrlich gesagt nicht auf dem Schirm.</p>
<p>Die gute Nachricht ist, dass wir damit gerade die letzte große Baustelle beackern. Dann geht's los!</p>
<h3 id="wartezimmerlektre">Wartezimmerlektüre</h3>
<p>Um euch die Wartezeit etwas zu versüßen, hier schon mal ein Einblick in die kommende Dokumentation, die für Uberspace 7 das Wiki ablösen wird: <a href="https://manual.uberspace.de">https://manual.uberspace.de</a></p>
<p>Anmerkungen:</p>
<ul>
<li>Bisher gibt's das Manual nur auf Englisch (hint hint), eine Übersetzung ins Deutsche folgt.</li>
<li>Wir arbeiten momentan täglich an Artikeln, das ist nicht fertig sondern im Prozess.</li>
<li>Das Manual bildet (noch) nicht alle Features ab. Auch hier sind wir gerade fleißig am schreiben.</li>
<li>Über <em>Other Versions</em> unten links im Menü lassen sich <code>stable</code> und <code>master</code> Branches auswählen. <code>master</code> ist bei uns gerade in der Entwicklung, <code>stable</code> bildet das Featureset ab, was aktuell auf den Servern vorhanden ist.</li>
</ul>
<p>So long ✌️</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ML7TOM0ccZc" frameborder="0" allowfullscreen></iframe>
<hr>
</div>]]></content:encoded></item><item><title><![CDATA[Uberspace 7 - Episode 7]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Lange haben wir in Sachen Uberspace 7 nichts von uns hören lassen, zu lange. Nicht um künstlich die Spannung zu steigern oder irgendwie Geheimniskrämerei zu betreiben, sondern einfach weil viele kleine und große andere Dinge an unseren Ressourcen nagten und der Blog dabei leider etwas hinten runterfiel.</p>
<p>Auch haben wir</p></div>]]></description><link>https://blog.uberspace.de/uberspace-7-episode-7/</link><guid isPermaLink="false">5aeef848fdb2b8000122058b</guid><category><![CDATA[Uberspace7]]></category><category><![CDATA[updates]]></category><dc:creator><![CDATA[Kim]]></dc:creator><pubDate>Fri, 07 Jul 2017 10:45:04 GMT</pubDate><media:content url="https://blog.uberspace.de/content/images/2017/07/Biel-_Fernglas_am_Seeufer.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://blog.uberspace.de/content/images/2017/07/Biel-_Fernglas_am_Seeufer.jpg" alt="Uberspace 7 - Episode 7"><p>Lange haben wir in Sachen Uberspace 7 nichts von uns hören lassen, zu lange. Nicht um künstlich die Spannung zu steigern oder irgendwie Geheimniskrämerei zu betreiben, sondern einfach weil viele kleine und große andere Dinge an unseren Ressourcen nagten und der Blog dabei leider etwas hinten runterfiel.</p>
<p>Auch haben wir bei der Einführung agiler Entwicklungsmethoden immer wieder erkennen müssen, dass Dinge die man richtig, sauber und nachhaltig bauen möchte einfach immer etwas mehr Zeit in Anspruch nehmen, als vorher kalkuliert. Und &quot;etwas mehr&quot; bedeutet durchaus auch mal &quot;noch etwas mehr&quot;. Bitte entschuldigt.</p>
<p>Wenn da aber die Disziplin zum Durchhalten und Ertragen, teils schmerzhafter Lerneffekte aufgebracht werden kann, fällt am Ende eben<br>
auch das saubere, nachhaltige, jederzeit erweiterbare weil bis ins Detail nachvollziehbare, stabile, automatisch testen und bauende  Produkt raus, das angestrebt war. Und vertraut uns da; es wird geil! 🤗</p>
<h4 id="jawolaufensiedenn">Ja, wo laufen sie denn?</h4>
<p>Mit der Entwicklung sind wir gut vorangekommen, haben viel Neues gelernt, einiges nochmal umgekrempelt und sind dem Ziel insgesamt doch ein ganzes Stück näher gekommen.</p>
<p>Eine durchweg  positive Erfahrung haben wir mit unseren Testern gemacht, die mit eigenen Ideen und qualifizierten Bugreports viel zum Fortschritt der letzten Monate beigetragen haben und denen wir hier ganz ausdrücklich dafür danken möchten. Tester, Ihr seid toll! 💐</p>
<h4 id="wodenn">Wo denn?</h4>
<p>Hier mal ein kurzer Abriss der Dinge, die im letzten halben Jahr fertig geworden sind:</p>
<ul>
<li>
<p>Das qmail-Setup steht</p>
</li>
<li>
<p>PHP Versionen und Module kamen hinzu</p>
</li>
<li>
<p>Die Shell lässt sich ohne Passworteingabe  wechseln</p>
</li>
<li>
<p>Alle HTTP requests werden immer auf HTTPS umgebogen</p>
</li>
<li>
<p>daemontools wurden durch <a href="http://supervisord.org">supervisord</a> ersetzet</p>
</li>
<li>
<p>Der <a href="https://midnight-commander.org">midnight commander</a>  steht standardmäßig bereit</p>
</li>
<li>
<p>Python 3 steht in verschiedenen Versionen zur Auswahl</p>
</li>
</ul>
<p>Dazu kommen noch allerlei Optimierungen in Punkto Security, Geschwindigkeit und Stabilität.</p>
<p>Außerdem haben wir ein eigens <code>uberspace</code> command erdacht, an dessen Implementierung gerade gearbeitet wird und das dann nach folgender Logik funktioniert:</p>
<ul>
<li>
<p>Teil 1 ist immer  <code>uberspace</code>. Das macht deutlich, dass es sich hier um einen uberspace-spezifischen Befehl handelt.</p>
</li>
<li>
<p>Teil 2 gibt den Part des Systems an, der editiert werden soll.</p>
</li>
<li>
<p>Teil 3 konkretisiert Teil 2.</p>
</li>
<li>
<p>Teil 4 gibt dann die gewünschte Aktion an.</p>
</li>
</ul>
<p>Daraus ergeben sich dann, beispielsweise, folgende mögliche Konstrukte:</p>
<ul>
<li>
<p><code>uberspace mail domain add &lt;domain&gt;</code></p>
</li>
<li>
<p><code>uberspace system quota show</code></p>
</li>
<li>
<p><code>uberspace system openport list</code></p>
</li>
<li>
<p><code>uberspace web backend list</code></p>
</li>
</ul>
<p>Achtung, das ganze ist noch nicht komplett in Code umgesetzt, es kann da noch Änderungen geben. Die wunderbar simple Struktur des ganzen soll aber in jedem Fall so beibehalten werden und natürlich werden wir noch eine detailliertere Anleitung verfassen, die Euch sagt, wie mit diesem Werkzeug umzugegen ist.</p>
<h4 id="jawolaufensiedennwolaufensiedennhin">Ja, wo laufen sie denn, wo laufen sie denn hin?</h4>
<p>Zwar ist Uberspace 7  nicht feature complete, aber so gut wie „fertig“ genug, um es endlich für Euch aufzumachen. Das heißt, wir spucken nun nochmal ordentlich in die Hände, gehen Montag in den letzten, zweiwöchigen Sprint und dann… machen wir erst nochmal Urlaub und erholen uns ordentlich. 🌴😎</p>
<p>Aber dann machen wir, bei frischen Kräften, um dem Ansturm auf die offenen Beta gerecht werden zu können, die Türen für Euch auf.</p>
<p>Verdammt, ist das aufregend!</p>
<hr>
<p>Header von Yannick Bammert - Biel, CC BY 2.0, <a href="https://commons.wikimedia.org/w/index.php?curid=36356541">https://commons.wikimedia.org/w/index.php?curid=36356541</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[WordPress CVE-2017-8295 - Unauthorized Password Reset]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Standard WordPress-Installationen der Version 4.7.4 sind im Moment für die Lücke <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8295">CVE-2017-8295</a> anfällig. Mithilfe dieser Lücke kann ein Angreifer Password-Reset-Mails an beliebige Mailserver umleiten und so an den kritischen Link gelangen. Seitens WordPress gibt es hierfür noch keinen Fix.</p>
<p>Das funktioniert, da WordPress den <code>Host</code>-Header 1:1</p></div>]]></description><link>https://blog.uberspace.de/wordpress-cve-2017-8295/</link><guid isPermaLink="false">5aeef848fdb2b8000122058a</guid><dc:creator><![CDATA[luto]]></dc:creator><pubDate>Fri, 05 May 2017 12:06:38 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Standard WordPress-Installationen der Version 4.7.4 sind im Moment für die Lücke <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8295">CVE-2017-8295</a> anfällig. Mithilfe dieser Lücke kann ein Angreifer Password-Reset-Mails an beliebige Mailserver umleiten und so an den kritischen Link gelangen. Seitens WordPress gibt es hierfür noch keinen Fix.</p>
<p>Das funktioniert, da WordPress den <code>Host</code>-Header 1:1 für diverse Mail-Header in der ausgehenden Mail benutzt. Wie das genau funktioniert könnt ihr <a href="https://www.exploit-db.com/exploits/41963/">in der Exploit-DB</a> nachlesen.<br>
Ein Angriff würde also beispielsweise so aussehen:</p>
<pre><code>POST /wp/wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: injected-attackers-mxserver.com   &lt;== oh noes! D:
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
 
user_login=admin&amp;redirect_to=&amp;wp-submit=Get+New+Password
</code></pre>
<p>In unserem Setup werden Requests anhand ihrer <code>Host</code>-Header an die jeweiligen Uberspaces und damit an die WordPress-Instanzen verteilt. Wenn nun eine Angreiferin den Header modifiziert, landet der Request gar nicht erst bei der angegriffenen WordPress-Instanz, sondern auf unserer &quot;Diese Domain kennen wir leider nicht&quot;-Seite. Ein WordPress, das bei uns gehostet ist, ist für diese Lücke also nicht anfällig.</p>
<p>Kurz um: alles gut. weitermachen.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Ausfall von aries, columba, octans und sagitta]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Heute morgen gegen halb acht begann dietrich, einer unserer KVM-Wirte, folgende Meldungen nach <code>/var/log/messages</code> zu spucken:</p>
<pre><code>Mar  2 07:28:22 dietrich kernel: mce: [Hardware Error]: Machine check events logged
Mar  2 07:28:23 dietrich kernel: EDAC MC1: 1 CE memory read error on CPU_SrcID#1_</code></pre></div>]]></description><link>https://blog.uberspace.de/ausfall-von-aries-columba-octans-und-sagitta/</link><guid isPermaLink="false">5aeef848fdb2b80001220589</guid><category><![CDATA[hardware]]></category><category><![CDATA[availability]]></category><dc:creator><![CDATA[Jonas]]></dc:creator><pubDate>Thu, 02 Mar 2017 08:29:44 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Heute morgen gegen halb acht begann dietrich, einer unserer KVM-Wirte, folgende Meldungen nach <code>/var/log/messages</code> zu spucken:</p>
<pre><code>Mar  2 07:28:22 dietrich kernel: mce: [Hardware Error]: Machine check events logged
Mar  2 07:28:23 dietrich kernel: EDAC MC1: 1 CE memory read error on CPU_SrcID#1_Ha#0_Chan#0_DIMM#0 (channel:0 slot:0 page:0x186f358 offset:0x500 grain:32 syndrome:0x0 -  area:DRAM err_code: 0001:0090 socket:1 ha:0 channel_mask:1 rank:1)
Mar  2 07:29:35 dietrich kernel: mce: [Hardware Error]: Machine check events logged
Mar  2 07:29:35 dietrich kernel: EDAC MC1: 1 CE memory read error on CPU_SrcID#1_Ha#0_Chan#0_DIMM#0 (channel:0 slot:0 page:0x186f358 offset:0x500 grain:32 syndrome:0x0 -  area:DRAM err_code: 0001:0090 socket:1 ha:0 channel_mask:1 rank:1)
Mar  2 07:30:45 dietrich kernel: EDAC MC1: 1 CE memory read error on CPU_SrcID#1_Ha#0_Chan#0_DIMM#0 (channel:0 slot:0 page:0x186f358 offset:0x500 grain:32 syndrome:0x0 -  area:DRAM err_code:0001:0090 socket:1 ha:0 channel_mask:1 rank:1)
Mar  2 07:31:25 dietrich kernel: mce: [Hardware Error]: Machine check events logged
Mar  2 07:31:26 dietrich kernel: EDAC MC1: 1 CE memory read error on CPU_SrcID#1_Ha#0_Chan#0_DIMM#0 (channel:0 slot:0 page:0x186f358 offset:0x500 grain:32 syndrome:0x0 -  area:DRAM err_code:0001:0090 socket:1 ha:0 channel_mask:1 rank:1)
Mar  2 07:31:32 dietrich kernel: EDAC MC1: 1 CE memory read error on CPU_SrcID#1_Ha#0_Chan#0_DIMM#0 (channel:0 slot:0 page:0x186f358 offset:0x500 grain:32 syndrome:0x0 -  area:DRAM err_code:0001:0090 socket:1 ha:0 channel_mask:1 rank:1)
</code></pre>
<p>Was schon nicht <em>ganz</em> so schön aussah, mündete dann kurz darauf in ein komplettes Einfrieren der Maschine, und damit auch der vier darauf laufenden Gäste aries, columba, octans und sagitta.</p>
<p>Ein erster Reboot-Versuch über das IPMI-Modul von dietrich verlief wenig zufriedenstellend - nachdem das Gerät einmal vom Strom getrennt und wieder verbunden war und erste Bootmeldungen der Hardware zu sehen waren, fror es wieder ein. Erst nach einem weiteren Trennen und wieder Verbinden des Stroms bootete es komplett hoch. Wir haben aufgrund der RAM-Meldungen aber darauf verzichtet, die vier Gäste direkt auf dietrich wieder zu booten, um zu vermeiden, dass hier ein erneut auftretendes Problem sie direkt noch einmal abstürzen lässt.</p>
<p>Stattdessen haben wir die vier Gäste auf Replikationspartnern gebootet, die jeweils den kompletten Datenbestand vorhielten. Wir haben dabei in der Kette der KVM-Wirte einige weitere, nicht ausgefallene Gäste auf andere Wirte migriert, um die zusätzliche Belastung durch die temporär durch den dietrich-Ausfall mitzutragenden Systeme so gering wie möglich zu halten. Dadurch stemmen jetzt die in der KVM-Kette neben dietrich liegenden Systeme vorübergehend 5 statt wie sonst 3-4 Gastsysteme. Alle Wirte sind generell mit ausreichend RAM bestückt, um im Zweifelsfall noch zwei Gastsysteme mehr als üblich aufnehmen zu können; damit konnten wir hier entsprechend handeln.</p>
<p>dietrich läuft nun aktuell wieder, aber nur als Replikationspartner für die nebenliegenden KVM-Wirte. Gastsysteme beherbergt er nun aktuell nicht; so haben wir die Möglichkeit, den RAM-Vorfall zu prüfen, Speicherriegel zu testen und ggf. durch Ersatz auszutauschen.</p>
<p>Der erste Host - octans - war seit 8:01 Uhr wieder erreichbar; der letzte Host - columba - seit 8:41 Uhr. Ein ungeplanter Crash durch einen Hardwaredefekt zieht in der Regel einen Filesystem-Check (fsck) und einen Quota-Check nach sich, was den Bootvorgang gegenüber einem geplanten, sauberen Reboot verlängert; auch führt MySQL nach einem Crash einen Recovery-Vorgang durch, was dazu führt, dass MySQL noch einige Minuten länger nicht erreichbar ist, während alles andere schon wieder läuft. Inzwischen sind aber alle Recovery-Prozesse durch und im Monitoring alle Checks wieder grün. Solltet ihr noch Probleme beobachten, meldet euch bitte bei <a href="https://blog.uberspace.de/ausfall-von-aries-columba-octans-und-sagitta/hallo@uberspace.de">hallo@uberspace.de</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Und schwups war DNS aus]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Was lernen wir als kleine Kinder von unseren Eltern? Immer in beide Richtungen schauen bevor die Straße überquert wird. -- Nur was ist mit Einbahnstraßen? Ist es schlau sich den unnötigen Blick in die verbotene Gegenrichtung zu sparen, oder ist es schlau das Unerwartete zu erwarten und trotzdem in beide</p></div>]]></description><link>https://blog.uberspace.de/und-schwups-war-dns-aus/</link><guid isPermaLink="false">5aeef848fdb2b80001220588</guid><dc:creator><![CDATA[Christopher]]></dc:creator><pubDate>Fri, 03 Feb 2017 17:44:54 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Was lernen wir als kleine Kinder von unseren Eltern? Immer in beide Richtungen schauen bevor die Straße überquert wird. -- Nur was ist mit Einbahnstraßen? Ist es schlau sich den unnötigen Blick in die verbotene Gegenrichtung zu sparen, oder ist es schlau das Unerwartete zu erwarten und trotzdem in beide Richtungen zu schauen?</p>
<p>Wenn es um Computer geht ist es meist am besten, auch mit dem Unerwarteten zu rechnen, das ist zum Beispiel eine wichtige Lektion wenn es um IT-Security geht, aber auch beim Debugging kann das viel Kopfzerbrechen sparen (aber leider meist keine Zeit). Aber auch in der Kommunikation mit Menschen kann das eine wichtige Lektion sein, sonst passieren manchmal nicht nur Dinge die gewollt waren, sondern auch Dinge die nicht gewollt waren. Besonders gefährlich ist, wenn Dinge als implizit gegeben angenommen werden und nicht explizit gesagt werden.</p>
<p>Soetwas ist uns heute mit dem DNS an einem unserer drei Rechenzentrums-Standorte passiert. Dort wird der Traffic zum Schutz gegen DDoS-Attacken derzeit teilweise gefiltert, spezifisch wird DNS-Traffic aktuell komplett blockiert, außer zu einer kleinen Liste von ausgewählten externen Resolvern. Alle Server in diesem Rechenzentrum müssen diese Resolver benutzen, sie können weder selbst Namen im DNS auflösen noch externe Resolver darum bitten, beides verhindert der Filter. (Plot-Twist: Wegen dieses Filters funktionierte auch unser Monitoring für &quot;funktioniert DNS-Auflösung in diesem Rechenzentrum?&quot; seit einer Weile nicht mehr und war daher stumm geschaltet. Das ist nebenher einer der Gründe warum wir das Setup ändern wollten. Dazu weiter unten mehr.)</p>
<p>Nun wollen wir auf neue, interne Resolver umstellen, unter anderem damit wir selbst Caching betreiben können, aber auch damit wir z.B. DNSSEC zuverlässig nutzen können und einen besseren Blick darauf haben, was auf den Resolvern vor sich geht. Also schrieben wir die freundlichen Leute vom RZ-Betreiber an, gaben ihnen die Liste der IP-Adressen unserer neuen Resolver und baten darum, die für DNS-Traffic komplett frei zu schalten, damit wir die benutzen können.</p>
<p>Und schon war's passiert.</p>
<p>Was wir meinten war: Die Filter-Regeln sollen <em>ergänzt</em> werden, nämlich um eine Regel die unsere neuen Resolver benutzbar macht. (Damit wir dann im nächsten Schritt anfangen können auf diese Resolver umzustellen. <em>Danach</em> könnte dann die alte Filter-Regel weiter angepasst werden, sie kann aber auch einfach bestehen bleiben.)</p>
<p>Was beim Rechenzentrums-Betreiber ankam war: Alte Filterregel durch neue ersetzen.</p>
<p>Und schwups ging mit einem Mal ab 14:10 das DNS nicht mehr, außer auf drei neuen Resolvern, die aber noch keiner unserer Server benutzte. So schnell geht's manchmal. Ärgerlich, aber wenigstens war es aus technischer Sicht schnell zu beheben. Doppelt ärgerlich, weil unser Monitoring nicht sofort Alarm schlagen konnte (schönen Gruß von weiter oben), deswegen dauerte es über eine halbe Stunde bis es deutlich auffiel und wir mit der Fehlersuche und Behebung beginnen konnten. Besonders ärgerlich, weil diese Art Missverständnis eigentlich nichts Neues ist und wir auf solche Details achten, in diesem Fall aber echt kalt erwischt wurden. So oder so: Ab 15:15 ging alles wieder.</p>
<p>Das hätte nun durch deutlichere Kommunikation (weniger implizite Annahmen, mehr explizite Ansagen meinerseits, oder auf der Gegenseite mehr explizitie Rückfragen) verhindert werden können. Es hätte auch technisch verhindert werden können, wenn die neuen Resolver erstmal im Forwarding-Modus konfiguriert und alle Server im Rechenzentrum schon im Vorfeld auf die neuen Resolver umgestellt worden wären. In dem Fall hätten die neuen Resolver zunächst die alten Resolver benutzt und die Anfragen erstmal nur durchgereicht. Nach der Filter-Umstellung hätte dann auf den neuen Resolvern das Forwarding nach und nach abgestellt werden können. Aber dazu hätte eben das Unerwartete erwartet werden müssen. Hier beißt sich dann die Katze der Vorsicht in den Schwanz: Erstmal in Ruhe die neuen Resolver testen, oder um einem möglichen Missverständnis bei der Umstellung vorzugreifen schon vorher alles auf die neuen Resolver umstellen?</p>
<p>Es sollte eben immer erst in beide Richtungen geschaut werden. Das Problem bei Computern ist, dass es mehr als zwei Richtungen gibt und oft unklar ist wie viele es eigentlich sind.</p>
</div>]]></content:encoded></item></channel></rss>