Sie sind hier: Startseite Blog

Blog

Ein Mini-Webserver für die linuxrc

Für das bereits erwähnte NAS möchte ich natürlich auch die Root-Partition verschlüsseln. Nur: wie geben ich beim Booten den Schlüssel ein? Ein Mini-Webserver muss her!

Falls das NAS neu gestartet werden muss -- beispielsweise nach einem Stromausfall -- darf das Eingeben den Filesystem-Passworts nicht an mir hängen. Vielleicht bin ich ja unterwegs. Also muss eine Lösung her, die einfach zu bedienen ist.

Das NAS hat keine serielle Schnittstelle, also scheidet Alles in diese Richtung aus. Den Schlüssel auf einem USB-Stick zu speichern geht nicht, denn der USB-Stick könnte in falsche Hände gelangen. Ein winziger Webserver, der das Passwort abfragt, scheint mir die sinnvollste Lösung.

Eine schöne Lösung hierzu hat das Projekt CryptoNAS (ehemals Cryptobox) entwickelt. Für meinen Einsatzzweck ist das leider (noch) nicht geeignet, da es a) noch keinen RAID unterstützt und b) den Server erst startet, wenn das System schon gebootet hat.

Da bei mir auch die Root-Partition verschlüsselt werden soll, muss das "Entsperren" geschehen, ehe diese eingebunden wird. Also muss der Webserver in der linuxrc gestartet werden, was wiederum bedeutet, dass der Webserver in die initrd muss. Und die möchte ich möglichst klein halten.

In der initrd ist bereits busybox installiert, alleine, um das Shell-Script linuxrc abzuarbeiten. Da wäre doch ein Webserver cool, der einfach als Shell-Script implementiert ist. Einen davon hat Morty Abzug geschrieben. Der macht einen guten Eindruck, ich müsste dem Server nur noch beibringen, CGI-Scripte zu verarbeiten, um das Webformular auszuwerten.

Bei der Suche, was genau die busybox shell kann, habe ich dann entdeckt: Die busybox hat einen Webserver eingebaut! Der kann auch CGI-Scripte. Sehr schön, das spart mir einen Haufen Arbeit! Und wie gesagt: busybox ist in der initrd sowieso enthalten. Jetzt muss ich "nur noch" die nötigen CGI-Scripte schreiben -- aber das sollte nicht recht aufwändig sein.

BTW: Die Anleitung für den busybox htpd findet sich im Quelltext.

15.05.2011 14:21 | Kommentare (0)

Warum man die Performance von /dev/urandom kaum erhöhen kann

Ich baue momentan ein kleines NAS zum Server um. Mein Ziel ist, ein stromsparender kleinen Server für unserer Bürogemeinschaft. Natürlich müssen die Daten darauf verschlüsselt werden. Die Platte ...

Dummerweise habe ich mir ein NAS empfehlen lassen, dass nicht von Haus aus verschlüsseln kann. Habe ich nicht aufgepasst. Dazu und zu anderen Unzulänglichkeiten des NAS ein andermal mehr. Ich hatte auch kurz die Idee, mir ein anderes zu kaufen, statt viel zeit hinein zu stecken. Aber wer weiß, ob ich da nicht vom Regen in die Traufe käme.

Das NAS ist gerootet, Debian ist installiert. Nun baue ich nach dieser Anleitung das verschlüsselte RAID. Die Anleitung ist kurz und gut, und die nötigen Befehle sind in zirka einer halben Stunde eingegeben.

Aber: Ein Schritt ist, die Platte mit Zufallsdaten zu beschreiben. Und das dauert ...
... und dauert ...
... und dauert ...
... und ich werde ungeduldig. Das muss man doch beschleunigen können?!

Zusammengefasst: Schneller geht nur mit schnellem Rechner.

Das Kommando

dd if=/dev/urandom of=/dev/md127 bs=10M

liefert auf dem NAS 1,8 MB/s, bei 2 TB macht das gute 300 Stunden also über 12 Tage. Urgs.

Also Platte ausgebaut, und per USB an den Desktop angeschlossen. Hier die Ergebnisse verschiedener Versuche (alle Messungen am Desktop):

of=/dev/md.. (also über RAID-Schicht)
3,8 MB/s 135 Stunden
5 1/2 Tage
of=/dev/md.. + Runlevel 0
4,0 MB/s 135 Stunden 5 1/2 Tage
of=/dev/md.. + timer_entropyd
3,7 MB/s
135 Stunden 5 1/2 Tage
of=/dev/sd.. (also ohne RAIS-Schicht)
3,8 MB/s
135 Stunden
5 1/2 Tage
if=/dev/zero ca. 66 MB/s 8 Stunden 1/3 Tag


Meine Erkenntnisse daraus:

  • urandom ist der begrenzende Faktor, nicht der USB-Anschluss.
  • Die Blockgröße ist fast egal: Auch größere und kleinere Input-Blocks (ibs=...) ändern nichts Nennenswertes.
  • Mehr Entropie bringt keinen Speed: Ich dachte, dass urandom schneller wird, wenn das System mehr Entropie hat. Dazu habe ich timer_entropyd eingesetzt, um die Entropie zu bekommen. Hat nichts gebracht, ja eher geschadet: Die Performance ist leicht gesunken.
  • Nachdenken hilft: urandom liefert Psuedozufallszahlen, rechnet also und braucht dazu CPU-Power. Mehr Entropie macht die Zufallszahlen zwar "zufälliger", aber deren Erzeugen nicht schneller.

Ich habe nun also ein paar Stunden Zeit, zu entscheiden, ob es das Risiko einer Krypto-Attacke gegen meine Platte wert ist, sie vorher 5 1/2 Tage mit Zufallszahlen zu beschreiben.

11.05.2011 17:40 | Kommentare (0)

Ps(i)²'s Liebling

 

Das freut den Programmierer: Auch die Kollegen schätzen offensichtlich meinen CVSS-Calculator:

Sebastian Klipper, Buchautor, Blogger (psi2.de) und ebenfalls CISSP, lobt in seinem Werk"Information Security Risk Management" (Wiesbaden, 2011. Seite 205): "Mein Favorit ist der Plattform-unabhängige CVSS-Calculator von Goebel Consult. [...] und er kann CVSS-Vektoren mit cut-and-paste verarbeiten."

 

03.05.2011 18:30 | Kommentare (0)

Informatikkunst

Die Rhäthische Bahn in der Schweiz UNESCO Kulturerbe. Wohl wegen Ihrer kühnen Trassenführung und Konstruktionen. Wenn ich unter einer der Brücken dort stehe (siehe Bild) und mir vorstelle, dass die schon 100 Jahre alt sind und mit viel, viel Körpereinsatz gebaut wurden, bekomme ich Hochachtung. Hochachtung vor den Ingenieuren, die das geplant und berechnet haben. Hochachtung vor Handwerkern und Arbeitern, die diese Konstrukte ausgeführt haben.

Das geht wohl Vielen so, sonst hätte es nicht für das Weltkulturerbe gereicht.

Ingenieurskunst zeigt sich an vielen Stellen, und auch der Nicht-Ingenieur läßt sich davon beeindrucken. Angefangen von einem sauber funktionierendem Taschenmesser bis zum Eiffelturm.

Schade, dass Informatikkunst nicht so offensichtlich ist. Die Kunstwerke meiner Zunft sieht man selten: Wer liest schon Quellcode und kann sich an dessen Eleganz erfreuen? Wer weiß schon einen schönen Algorithmus, ein gutes Protokoll oder eine saubere Implementierung zu schätzen.

Ein Trost bleibt (naja): Dieses Schicksal teilen wir mit der Mathematik: Deren Fourier-Transformationen sind in der Ingenieurskunst elementar, aber die Mathematik sieht man eben nicht.

03.05.2011 18:27 | Kommentare (0)

Interview mit Hartmut Goebel im IT Freelancer Magazin

Unternehmen sollten IT Security wichtiger nehmen

IT-Security ist in den Unternehmen nach wie vor eine Disziplin mit zu geringem Stellenwert, moniert CISSP und Sicherheitsexperte Hartmut Goebel in einem Interview im IT Freelancer Magazin, Ausgabe April/Mai. Im Gespräch mit dem Magazin gibt er den Lesern eine Einschätzung, wie es über die technischen Sicherheitsvorkehrungen bei kleine, mittleren und großen Unternehmenskunden bestellt ist. Ein guter Sicherheitsberater kann und muss maßgeblich dazu beitragen, den Kunden ein Sicherheitsniveau zu vermitteln, auf das sie bauen können.

21.03.2011 13:02 | Kommentare (0)

Datenschützer geben Goebel Consult Recht

Letztes Jahr im Mai hatte ich in meiner monatlichen Kolumne CISSP-Geflüster unter dem Titel Finger weg von Google Analytics auf die Probleme mit Googel Analytics hingewiesen und Alternativen vorgestellt. Eine davon ist piwik. Wie heute auf heise online zu lesen ist, schließt sich das Unabhängige Landeszentrum für Datenschutz Schleswig-Holstein (ULD) in Sachen Google Analytics meiner Meinung an und empfiehlt ebenfalls Piwik für die Webanalyse.

Allerdings nicht uneingeschränkt: In dem Prüfbericht werden einige Maßnahmen genannt, um piwik auch wirklich datenschutzkonform einsetzen zu können: So muss beispielsweise das Plugin „AnonymizeIP“ verwendet und eine Möglichkeit zum Widerspruch angeboten werden. Vorgeschrieben ist hierbei sogar detailliert, welcher der englischen Texte für den Einsatz im deutschsprachigen Raum in die Landessprache übersetzt werden muss. Die Beschreibung der Maßnahmen geht bis ins Detail der Konfiguration, etwa wie sich die Gültigkeitsdauer des piwik-Cookies steuern lässt.

15.03.2011 00:00 | Kommentare (0)

bash-completion ergänzt remote Pfade bei scp

Eben hatte ich ein Erlebnis der dritten Art: Ich wollte mit scp eine Datei von meinem Server kopieren, tippe also

scp myserver:/tmp/abst

und drücke aus Gewohnheit und ohne nachzudenken <Tab>. Und schon steht dort:

scp myserver:/tmp/abstract_tool.pyc

Ich brauchte einen Moment, um zu realisieren: Die bash-completion hat sich tatsächlich im Hintergrund auf myserver eingeloggt, das Verzeichnis aufgelistet und meine Kommandozeile ergänzt!

Was das Paket bash-completion alles aus der bash herausholt, begeistert mich schon lange. Doch jetzt bin ich total von den Socken!

24.02.2011 22:05 | Kommentare (0)

Thumbnails wie ein Stapel verschobener Blätter

Für eine Präsentation benötigte ich als visuelles Element ein "Vorschau" der verwendeten Dokumente. Es sollte aussehen wie auf dem Bild: ein Stapel verschobener Blätter. Da ich über 40 Dokumente ...

Die Ursprungsdokumente waren MS-Word-Dateien (.doc). Daraus ein Bild pro Seite zu machen, war eine leichte Übung: openoffice-python (das übrigens von mir selbst stammt) enthält ein Skript odt2pdf.py , um aus Office-Dokumenten PDFs zu erstellen. Die einzige Voraussetzung dafür ist, dass OpenOffice bzw. LibreOffice das Dokument brauchbar lesen kann. Das war hier der Fall.

Aus den PDFs Bilder zu erzeugen, war auch meine Schwierigkeit: Das Programm "convert", das zum ImageMagick-Paket gehört, erledigt das. Hier das Kommando, um nach PDFs zu suchen und sie zu konvertieren:

find . -type f -iname \*.pdf -print0 | xargs -0 -n 1 convert '"{}"' '"{}"'.png

Dann wurde es kompliziert! Wie werden aus den Bildern die Stapel?

Meine Versuche, es mit der Python Image Library (PIL) hinzubekommen, scheiterten.

Auf der Mailingliste der Linux User Group Darmstadt erhielt ich einen entscheidenden Tipp: Guck dir die Option -compose an. Das war zwar dann nicht die Lösung, aber etwas unterhalb auf der gleichen Seite war -mosaic beschreiben. Dummerweise muss man trotzdem noch die Position für jedes Bild selbst berechnen :-( Das ist zwar aufwändig, aber nicht weiter schwierig.

So geht´s also: List der Bilder lesen, umgekehrt sortieren, damit das letzte Blatt das unterste wird, offsets berechnen und eine Schleife über alle Bilder. Der wichtige Teil des Skripts sieht dann so aus:

def process(outfilename, images):
    imagenames = images
    imagenames.sort()
    imagenames.reverse()

    # Bildbreite mit Python Image Library ermitteln
    im = Image.open(imagenames[-1])
    width, height = im.size
    offset = int(math.ceil(width*0.3 + BORDERWIDTH))

    cmd = ['convert']
    paste_offset = offset*(len(imagenames)-1) + BORDERWIDTH
    for inname in imagenames:
        cmd.extend([
            '-page', '+%i+0' % paste_offset,
            '(', '-border', '1%', '-bordercolor', 'black', inname, ')'])
        paste_offset -= offset
    cmd.extend(['-mosaic', outfilename])
    subprocess.call(cmd)
Im Endeffekt wird ein Kommando wie folgendes ausgeführt:
convert \
  -page +40+0 '(' -border 1% -bordercolor black seite3.png ')' \
  -page +20+0 '(' -border 1% -bordercolor black seite2.png ')' \
  -page +00+0 '(' -border 1% -bordercolor black seite1.png ')' \
  -mosaic zusammengesetzt.png

Das Ergebnis zeigt das Bild.

23.02.2011 15:30 | Kommentare (0)

Antike Fundstücke: Aminet und AmokEd

Neujahr ist eine gute Gelegenheit, auszumisten. Das habe ich habe heute mit meinen alten Bookmarks getan. Schön, wenn man gleich fünf oder zehn auf einmal löschen kann, weil die Seiten nicht mehr existieren. Dabei bin ich auch auf eine alte Sammlung Amiga-Links gestoßen. Die konnte ich alle löschen – bis auf einen, der tatsächlich noch aktuell war: AmiNet.

Anfang der 1990er war es noch üblich, Software per Diskette zu verschicken, wobei diejenigen von Fred Fish besonders bekannt war. Die Begriffe "Freie Software" oder "Open Source" waren damals vielleicht geboren, aber auch wir Studenten kannten sie nicht. Für uns gab es "Freeware" oder "Public Domain" (und noch ein paar Kategorien wie "Shareware"). Und dann kam Aminet! Erst ein einzelner FTP-Server, später ein paar Spiegelserver, von denen an sich die Software direkt herunterladen konnte. Wie revolutionär das war, wir mir erst heute bewußt. Und ich gehörte zu den Privilegierten, die an der Uni Internet hatten und Aminet nutzen konnten.

Bis Mitte der 1990er wurde Aminet ein wichtiges Online-Archiv für Amiga-Software. Mehr zur  Bedeutung und Geschichte von Aminet (Selbstdarstellung) beschreibt der englische Wikipedia-Eintrag (der deutsche Eintrag berücksichtigt leider die aktuellere Entwicklung nicht).

Was mich aber am meisten fasziniert: Es gibt Aminet noch immer. Und auch die Daten sind noch da. Darunter eine Version meines Editors AmokEd von 1992, zu dem als Quelle "Fish collection" angegeben ist. Und auch die Fisk Disks gibt es noch als FTP-Archiv und im Fred Fish memorial archive.

01.01.2011 22:24 | Kommentare (0)

Distributing Python programms for Windows using pyinstaller

While I not blogged on this topic yet, for several times now I looked into the topic of how to distribute Python for Windows users. There are several major problems, especially if one wants to cross-bundle from e.g. Linux. The later is a requirement for me, since my development platform is Linux and I do not want to boot into Windows just for creating a new distribution package.

With "cross-bundling" I mean "just" sticking together pure python programs, eventually with already compiled third-party packages like GTK. So one of the problems may be where to get the binary packages from. But I'll not going into this today.

The program I want to distribute is my pdfposter, which scales and tiles PDF images/pages to print on multiple pages. Basically this is a Python script, a Python package and another Python package (pyPDF). On a Unix system, installing it is quite easy, assuming that Python is already installed (which is the case on Linux).

Not so on WIndows!

On Windows users are used to get self-contained packages. For installing pdfposter, one needs to install Python, setuptools, (maybe pyPDF, if you are offline) and then pdfposter. Users get trapped be the provided .msi and pdfposter got horrible comments on Heise Software Verzeichnis. So I decided to release a Windows executable of pdfposter for the next release.

In 2008 I already did some work on pyinstaller, adding support for different target-platform and for relative imports (see this trak timeline). One of the major pros of pyinstaller is: the binaries required for bootstraping the program on the target platform are included prebuild. So one may really bundle cross platform.

Meanwhile, a lot has been worked on pyinstaller and it is now able to include Python eggs (this is packages packed into a zip-file or unpacked into a directory). Wow! py2exe (one of the major other options) still does not support this. There is still some more work to do until  can use pyinstaller. [Now it's getting technical] Currently scripts defined via entry_points are not bundled. You may work around this by first installing the script, not this will not recognize the required module.

It seams as if there is time for some more contributions to pyinstaller.

27.12.2010 14:10 | Kommentare (0)

(0) Kommentare