<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Das Rootserver-Experiment &#187; Tool der Woche</title>
	<atom:link href="http://blog.rootserverexperiment.de/category/tool-der-woche/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rootserverexperiment.de</link>
	<description>Erlebnisse eines Rootserver (Beinahe-) Neulings</description>
	<lastBuildDate>Sat, 04 Sep 2010 13:18:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ubuntu 9.10 Karmic Koala und VMware Player</title>
		<link>http://blog.rootserverexperiment.de/2009/10/25/ubuntu-910-karmic-koala-und-vmware-player/</link>
		<comments>http://blog.rootserverexperiment.de/2009/10/25/ubuntu-910-karmic-koala-und-vmware-player/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 17:22:59 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=437</guid>
		<description><![CDATA[Ich hatte seit Wochen ein Mainboard nebst zugehörigem Quadcore-Opteron Phenom nebst 8GB RAM herumliegen. Das war ursprünglich ein Build-/Testsystem, sollte aber jetzt meinen doch schon etwas älteren (zweieinhalb Jahre) Desktop ablösen, der nun als Testsystem weiter dienen wird. Auf einen neuen Rechner installiert man natürlich ein neues OS &#8212; statt bislang Ubuntu 8.04.x sollte 9.10 [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte seit Wochen ein Mainboard nebst zugehörigem Quadcore-<strike>Opteron</strike> Phenom nebst 8GB RAM herumliegen. Das war ursprünglich ein Build-/Testsystem, sollte aber jetzt meinen doch schon etwas älteren (zweieinhalb Jahre) Desktop ablösen, der nun als Testsystem weiter dienen wird. Auf einen neuen Rechner installiert man natürlich ein neues OS &#8212; statt bislang Ubuntu 8.04.x sollte 9.10 RC zum Einsatz kommen.</p>
<p>Probleme bereitete die Installation und Nutzung des VMware-Players, den ich gerne als recht flexible Virtualisierungslösung einsetze.</p>
<p><span id="more-437"></span></p>
<h3>Das Installationsproblem</h3>
<p>Die Installation ist eigentlich simpel: Man setzt das *.bundle auf executable und startet das Paket dann mit Rootrechten. Doch ein Erfolg wollte sich nicht einstellen. Irgendwo auf halber Strecke  hängt der Installer und bewegt sich weder vor noch zurück. Greppt man die Ausgabe von <tt>ps waux</tt> nach gcc-Prozessen durch, wird man schlafende oder wartende Kompilationsvorgänge finden.</p>
<p>Warum das? Die Kompilierung der VMware-Module verursacht viele Warnungen über fehlende Symbole. Daran verschluckt sich nun der umgebende Python-Prozess und nichts geht voran. Die <a href="http://communities.vmware.com/thread/228949">Lösung hat das VMware-Forum</a> parat:</p>
<ul>
<li>Man startet die Installation in zwei Fenstern (je mit Rootrechten)</li>
<li>In einem der Fenster startet man das Bundle mit dem Parameter <tt>--ignore-errors</tt></li>
<li>Im zweiten Fenster tötet man gnadenlos alle Modul-Bauprozesse:<br/><tt>while true; do killall -9 vmware-modconfig-console; sleep 1; done</tt><br/>Die Schleife mit Strg+C abbrechen, wenn die Installation durch ist.</li>
<li>Am Ende hat man zwar eine VMware, aber keine Kernelmodule, die baut man hinterher mit<br/><tt>vmware-modconfig --console --install-all</tt></li>
<li>Nun noch den VMware-Dienst neu starten und der Player lässt sich nutzen</li>
</ul>
<h3>Das Mausproblem</h3>
<p>Schnell werdet Ihr feststellen, dass die Maus in der VMware hüpft und immer wieder aus der VMware raus oder in sie rein wechselt. Ein vernünftiges Arbeiten ist so nicht möglich.</p>
<p>Die <a href="http://www.rootloot.de/blog/vmware_in_ubuntu_karmic">Lösung des Problems hat Rootloot.de herausgefunden</a>: Eine Inkompatibilität, zwischen Ubuntus Gtk+ und dem Gtk, das die VMware erwartet. Der Trick: Einfach die VMware zwingen, das mitgelieferte Gtk+ zu nutzen, auch wenn die Darstellung nicht zu 100% mit dem Rest des Desktops kongruent sein sollte. Am besten per Export einer Umgebungsvariable. Da ich die VMware eh immer aus einer Shell starte, habe ich mich mit</p>
<p><tt>export VMWARE_USE_SHIPPED_GTK=force</tt></p>
<p>beholfen. Bingo, klappt alles!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/10/25/ubuntu-910-karmic-koala-und-vmware-player/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linux: Verschlüsselte und komprimierte Backups auf DVD</title>
		<link>http://blog.rootserverexperiment.de/2009/02/04/verschlusselte-komprimierte-dvd-backups-unter-linux/</link>
		<comments>http://blog.rootserverexperiment.de/2009/02/04/verschlusselte-komprimierte-dvd-backups-unter-linux/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 18:32:07 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=294</guid>
		<description><![CDATA[Ich sichere nach wie vor geschäftsrelevante Daten auf DVD, allerdings stellte mich keine der fertigen Lösungen vollkommen zufrieden. Meine Anforderungen:


Starke Verschlüsselung: Das Backup muss sicherer sein als diese unsägliche ZIP-Verschlüsselung hinreichend sicher sein und ein statistischer Angriff soll keinen Erfolg versprechen.


Gute Komprimierung: Ich möchte in kurzer Zeit das Backup klein eindampfen können und beim Zugriff [...]]]></description>
			<content:encoded><![CDATA[<p>Ich sichere nach wie vor geschäftsrelevante Daten auf DVD, allerdings stellte mich keine der fertigen Lösungen vollkommen zufrieden. Meine Anforderungen:</p>
<ul>
<li>
<p><b>Starke Verschlüsselung</b>: Das Backup muss <strike>sicherer sein als diese unsägliche ZIP-Verschlüsselung</strike> hinreichend sicher sein und ein statistischer Angriff soll keinen Erfolg versprechen.</p>
</li>
<li>
<p><b>Gute Komprimierung</b>: Ich möchte in kurzer Zeit das Backup klein eindampfen können und beim Zugriff effizient entpacken, also nur die Dateien, die ich benötige.</p>
</li>
<li>
<p><b>Mountbares Backup</b>: Ganz ohne vorheriges Entpacken soll ein sofortiger Zugriff auf alle Dateien im Backup möglich sein.</p>
</li>
<li>
<p><b>Keine unverschlüsselten temporären Dateien</b>: Weder beim Packen noch beim Entpacken sollen unverschlüsselte temporäre Dateien anfallen, einerseits aus Sicherheitsgründen, andererseits weil eine temporäre Datei auf einem zufällig verschlüsselten Dateisystem Prozessorlast erzeugt.</p>
</li>
</ul>
<p>Bis vor kurzem habe ich einfach Archive mit Tarballs mit <a href="http://de.wikipedia.org/wiki/Twofish" target="_blank">Twofish</a> verschlüsselt (<a href="http://www.openssl.org/docs/apps/enc.html" target="_blank">openssl</a> bietet ein komfortables Subkommando) und diese auf DVD gebrannt. Neben den oben genannten Nachteilen kam das Problem dazu, dass auf einem ISO-9660-Dateisystem die Dateigrößengrenze bei 2GB lag.</p>
<p>Meine Lösung sah eine Kombination aus bekannten Technologien vor: Eine Containerdatei sollte per losetup zum blockorientierten Gerät mutieren, dort wiederum sollte mit cryptsetup ein verschlüsselter Datenträger entstehen, der wiederum ein komprimiertes Squashfs-Dateisystem aufnehmen sollte. Klingt kompliziert? Ist es aber nicht:</p>
<p>Benötigt werden die im Tutorial <a href="http://blog.rootserverexperiment.de/2008/11/05/das-perfekte-netbook-setup-heimatverzeichnis-home-reisetauglich-verschluesselt/" target="_blank">/home reisetauglich verschlüsselt</a> erwähnten Pakete und die <tt>squashfs-tools</tt> sowie SquashFS-Module für den laufenden Kernel.<span id="more-294"></span></p>
<h3>Anlegen des Containers und Befüllen mit Daten</h3>
<p>Zuerst wird ein Container angelegt, verschlüsselt und dann mit Daten gefüllt</p>
<ul>
<li>
<p><b>Erstellen des Containers:</b> Ein Sparse-File mit der maximal zulässigen Größe einer DVD5 (4700372992 Bytes oder 2295104 Blöcke &#8212; bei einer DVD9 müssten es 4150388 Blöcke sein) entsteht mit dem folgenden Befehl. Die Datei belegt am Anfang nur 2048 Byte, angezeigt wird dennoch die maximale Größe:</p>
<pre>dd if=/dev/zero bs=2048 count=1 seek=2295103 of=crypt_squash.data</pre>
</li>
<li>
<p><b>Erstellen eines  Loop-Devices:</b> Mittels <tt>losetup</tt> entsteht jetzt eine der Datei zugeordnete Blockdevice:</p>
<pre>losetup /dev/loop0 crypt_squash.data</pre>
<p>Sollte <tt>/dev/loop0</tt> bereits besetzt sein, zeigt <tt>losetup -f</tt> freie Loop-Devices.</p>
</li>
<li>
<p><b>Erstellen des Containers:</b> Auf der Loop-Datei wird nun das verschlüsselte Blockgerät vorbereitet:</p>
<pre>cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 -y /dev/loop0</pre>
</li>
<li>
<p><b>Öffnen des verschlüsselten Gerätes:</b> Nun wird die verschlüsselte Gerätedatei geöffnent. Das Resultat ist ein Blockdevide <tt>/dev/mapper/cryptdvd</tt> auf das geschrieben werden und von dem gelesen werden kann. Die Verschlüsselung erfogt hier komplett transparent:</p>
<pre>sudo cryptsetup luksOpen /dev/loop0 cryptdvd</pre>
</li>
<li>
<p><b>Erstellen des komprimierten Dateisystems:</b> In <tt>/dev/mapper/cryptdvd</tt> entsteht nun das komprimierte Dateisystem SquashFS. Weil wir in eine Gerätedatei schreiben,  muss explizit <tt>-noappend</tt> angegeben werden, um diese zu überschreiben. Die restlichen Parameter sind Kosmetik: Ich bevorzuge noch aus Kompatibilitätsgründen Komprimierung mit <tt>gzip</tt> und möchte nur einen Prozessor einspannen.</p>
<pre>mksquashfs Projekte WichtigeDaten /dev/mapper/cryptdvd  -nolzma -check_data -noappend -processors 1</pre>
</li>
</ul>
<h3>Test des Containers</h3>
<p>Nun ist der Test des Containers dran. Funktioniert das Backup so, wie wir es uns vorgestellt haben?</p>
<ul>
<li>
<p><b>Mounten des Containers:</b> Das Cryptdevice existiert ja noch, mounten wir es einfach:</p>
<pre>mkdir /tmp/cryptdvd
mount /dev/mapper/cryptdvd /tmp/cryptdvd/</pre>
<p>Falls ein unbekanntes Dateisystem angegeben wird, sollten Sie sicherstellen, dass das SquashFS-Modul geladen ist und gegebenenfalls den Dateisystemtyp angeben:</p>
<pre>mount -t squashfs /dev/mapper/cryptdvd /tmp/cryptdvd/</pre>
</li>
<li>
<p><b>Unmounten:</b></p>
<pre>umount /dev/mapper/cryptdvd</pre>
</li>
<li>
<p><b>Auflösen des Cryptdevices:</b></p>
<pre>cryptsetup luksClose /dev/mapper/cryptdvd</pre>
</li>
<li>
<p><b>Lösen des Loop-Devices:</b> So stellen wir sicher, dass auch alle Daten im Container gelandet sind und wir gefahrlos brennen können:</p>
<pre>losetup -d /dev/loop0</pre>
</li>
</ul>
<h3>Brennen der DVD</h3>
<ul>
<li>
<p><b>Brennen der DVD:</b> <tt>cdrecord</tt> ist es herzlich egal, was für Daten da gebrannt werden, es bannt unseren Container 1:1 auf den optischen Datenträger:</p>
<pre>cdrecord -v -speed=4 -dev=/dev/scd1 crypt_squash.data</pre>
</li>
</ul>
<h3>Test der gebrannten DVD &#8212; Mounten und Unmounten des Backups</h3>
<ul>
<li>
<p><b>Loop-Device erstellen:</b> Zunächst entsteht ein Loopdevice auf der gebrannten DVD. Es könnte eigentlich auch ohne funktionieren:</p>
<pre>losetup /dev/loop1 /dev/scd1</pre>
</li>
<li>
<p><b>Öffnen des Crypt-Devices:</b> Jetzt wird die Datei <tt>/dev/mapper/cryptdvd</tt> erzeugt, welche die Entschlüsselung transparent macht. Hier ist die Eingabe des Passwortes erforderlich:</p>
<pre>sudo cryptsetup luksOpen /dev/loop1 cryptdvd</pre>
</li>
<li>
<p><b>Mounten des Dateisystems:</b> Möglicherweise ist die Angabe des Dateisystemtyps erforderlich:</p>
<pre>mount /dev/mapper/cryptdvd /tmp/cryptdvd/</pre>
<li>
<p><b>Unmounten wie oben:</b></p>
<pre>umount /dev/mapper/cryptdvd</pre>
<li>
<p><b>Lösen des Crypt-Devices:</b></p>
<pre>cryptsetup luksClose /dev/mapper/cryptdvd</pre>
</li>
<li>
<p><b>Lösen des Loop-Devices:</b></p>
<pre>losetup -d /dev/loop1</pre>
<p>Nun kann die DVD entnommen werden.</p>
</li>
</ul>
<p>Die meisten der angegebenen Schritte lassen sich leicht automatisieren, so dass sichere Backups sehr einfach durchgeführt werden können und der Zugriff genauso einfach möglich ist. Ein Manko bleibt: Für das Hinzufügen neuer LUKS-Schlüssel muss der Container natürlich mit <tt>dd</tt> auf Festplatte transferiert und in ein Loop-Device  überführt werden, bevor er neu gebrannt wird.</p>
<p><b>Nachtrag I:</b> Ich stelle diesen Artikel hiermit unter BY-SA zur Verfügung. Wer möchte, kann ihn also per Copy und Paste ins UbuntuUsers-Wiki (oder andere Wikis) übernehmen und dort weiterbearbeiten, solange auf mich als Urheber verwiesen wird. Viel Spaß damit! <a href="http://creativecommons.org/licenses/by-sa/3.0/de/">creativecommons.org/licenses/by-sa/3.0/de/</a></p>
<p><b>Nachtrag II:</b> Da einige Community-Wikis NC-BY-SA verwenden und BY-SA nicht nach NC-BY-SA überführt werden kann, zusätzliche Bereitstellung unter NC-BY-SA. Viel Spaß damit! <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/">creativecommons.org/licenses/by-nc-sa/3.0/de/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/02/04/verschlusselte-komprimierte-dvd-backups-unter-linux/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Dreimal Windows &#8212; und keines weiss vom anderen</title>
		<link>http://blog.rootserverexperiment.de/2009/01/24/dreimal-windows-mit-grub/</link>
		<comments>http://blog.rootserverexperiment.de/2009/01/24/dreimal-windows-mit-grub/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 22:07:26 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=260</guid>
		<description><![CDATA[OK, ein beinahe reines Windows-Thema ist ungewöhnlich hier. Aber ich habe gerade viele Leser aus dem Windows-Umfeld, denen es weiterhilft, wenn Sie wissen, wie man mit einer Linux-Live-CD und dem Bootloader GRUB seine Windows-Installationen besser in den Griff bekommt. Darum im Tool der Woche: GRUB und fdisk.
Wer Windows in der von Microsoft vorgesehenen Reihenfolge &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p><i>OK, ein beinahe reines Windows-Thema ist ungewöhnlich hier. Aber ich habe gerade viele Leser aus dem Windows-Umfeld, denen es weiterhilft, wenn Sie wissen, wie man mit einer Linux-Live-CD und dem Bootloader GRUB seine Windows-Installationen besser in den Griff bekommt. Darum im Tool der Woche: GRUB und fdisk.</i></p>
<p>Wer Windows in der von Microsoft vorgesehenen Reihenfolge &#8212; erst XP, dann Vista, dann 7 &#8212; installiert, wird selten Probleme bekommen: Jedes Windows erkennt seine Vorgänger und bindet diese in den eigenen Bootloader ein. Trickserei ist aber gefragt, wenn kein Windows vom anderen Kenntnis haben soll oder man zu jeder Zeit ein beliebiges Windows durch eine Neuinstallation ersetzen möchte. Der Standard-Bootmanager von Windows scheitert hieran, Abhilfe schafft der kostenlose und von Linux-Distributionen bekannte GRUB. Netter Nebeneffekt meiner Lösung: Jedes Windows hat den Laufwerksbuchstaben C: für die Systempartition. </p>
<p>
Im folgenden b eschreibe ich, wie man Windows XP, Windows Vista und Windows 7 unabhängig voneinnader installiert. Je nach Bedarf können Sie auch zweimal XP und einmal 7 installieren oder die Reihenfolge variieren. Einzige Einschränkung ist die Limitation bootfähiger Windows-Versionen auf drei, was durch die maximale Anzahl an primären Partitionen bedingt ist. Wer GRUB auf eine zweite Festplatte, Diskette, USB-Stick oder CD auslagert, kommt auf vier.
</p>
<p>Als Werkzeugkiste kommt eine <a href="http://www.sidux.com/">Sidux-Live-CD in Version 2008-04</a> zum Einsatz. Im Prinzip sollte es jede Live-CD tun, die Gparted und fdisk mitbringt. Schlimmstenfalls sind auf Grund anderer Mountpoints etc. einige Parameter anders einzugeben.</p>
<p><span id="more-260"></span></p>
<h3>Vorbereitung der Festplatte</h3>
<p>Die Partitionierung der Festplatte nehmen wir unter Sidux vor. Rufen Sie in einem Terminalfenster <tt>sudo gparted</tt> auf, um den Partitionseditor zu starten. Hier legen Sie nun eine <i>primäre</i> Partition mit NTFS-Dateisystem für die erste Windows-Installation, zwei weitere <i>primäre</i> Partitionen ohne Dateisystem und eine kleine (alles ab 30MB aufwärts genügt) <i>primäre</i> FAT16- oder FAT32-Partition für den Bootloader an. Schreiben Sie die Änderungen der Partitionstabelle und ändern Sie anschließend die Flags: Die NTFS-Partition muss das Bootflag gesetzt haben, damit sich Windows problemlos installieren und starten lässt. Bei dieser Gelegenheit können Sie sich gleich mit der Notation für Laufwerke unter Linux vertraut machen: <tt>/dev/sda</tt> ist die erste Festplatte, die enthaltenen Partitionen sind nummeriert: eins bis vier für primäre, respektive erweiterte und fünf bis unendlich für logische Partitionen.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen01_gparted.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen01_gparted_sml.png" /></a></div>
<h3>Installation von Windows XP</h3>
<p>Nun ist die Installation von XP an der Reihe. Hier gibt es wenig Spektakuläres zu vermelden: Bei der Installation ist auf die Auswahl der richtigen Partition zu achten, führen Sie eine Schnellformatierung durch, damit sichergestellt ist, dass XP mit der Version des Dateisystems klarkommt.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen02_xp.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen02_xp_sml.png" /></a></div>
<h3>Sicherung der XP-Installation und Aktivierung einer weiteren Partition</h3>
<p>Wir booten nun erneut das Live-Linux-System. Allerdings ist jetzt etwas Kommandozeilen-Voodoo nötig. Achten Sie auf die Details: ein <tt>#</tt> kennzeichnet einen Root-Prompt, den wir zuvor mit <tt>sudo su</tt> angefordert haben. Da wir unsere XP-Installation sichern und dann <b>mutwillig beschädigen (!!!)</b> werden, benötigen Sie bspw. einen USB-Stick. In unserem Beispiel dient eine 16GB-Festplatte (es handelt sich um eine VMware) mit einer einzigen FAT32-Partition als Sicherungsmedium. Sie wird als <tt>/dev/sdb</tt> erkannt.</p>
<ol>
<li>
<p>Mounten Sie das Laufwerk, welches zur Sicherung dient, indem Sie es im Bereich &#8220;Speichermedien&#8221; auf dem Desktop einfach anklicken. Der Befehl &#8220;mount&#8221; oder &#8220;df&#8221; verrät dann Mountpoint, also Ordner, unter dem der Datenträger verfügbar ist. In unseren Fall ist dies <tt>/media/disk2part1</tt>.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen03_mount.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen03_mount_sml.png" /></a></div>
</li>
<li>
<p>Öffnen Sie ein Terminalfenster, in dem Sie mit <tt>sudo su</tt> Rootrechte erlangen. Dort lassen Sie dich mit <tt>fdisk</tt> die aktuelle Partitionierung anzeigen &#8212; die XP-Partition wird meist <tt>/dev/sda1</tt> sein. Nun sichern Sie mit <tt>dd</tt> die ersten 16MB der Partition auf die zweite Festplatte oder den USB-Stick: <tt>if=...</tt> kennzeichnet dabei die als Eingabedatei verwendete Windows-Partition. Anschließend überschreiben Sie die ersten  16MB mit Nullen (Eingabedatei <tt>/dev/zero</tt>). Sie verhindern so, dass die nächste Windows-Installation das Dateisystem findet und versucht, einzubinden.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen04_dd.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen04_dd_sml.png" /></a></div>
</li>
<li>
<p>Mit <tt>fdisk /dev/sda</tt> starten Sie nun den Partitionseditor auf der ersten Platte. Den Typ der ersten Partition ändern Sie mit <tt>t</tt> auf <tt>da</tt> (Data), den Typ der zweiten Partition auf NTFS (7). Schließlich entziehen Sie <tt>/dev/sda1</tt> mit <tt>a</tt> das Bootable-Flag und setzen es ebenfalls mit <tt>a</tt> auf <tt>/dev/sda2</tt>. Wenn <tt>p</tt> das gewünschte Ergenis anzeigt, sichern Sie die Partitionstabelle mit <tt>w</tt>.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen05_fdisk.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen05_fdisk_sml.png" /></a></div>
</li>
<li>
<p>Starten Sie nun den Rechner neu, beispielsweise durch Eingabe des Kommandos <tt>reboot</tt>.</p>
</li>
</ol>
<h3>Installation von Windows Vista</h3>
<p>Nun ist die Installation von Vista an der Reihe. Hier gibt es wenig Spektakuläres zu vermelden: Bei der Installation ist auf die Auswahl der richtigen Partition zu achten, führen Sie eine Schnellformatierung durch, damit sichergestellt ist, dass Vista mit der Version des Dateisystems klarkommt.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen06_vista.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen06_vista_sml.png" /></a></div>
<h3>Sicherung der Vista-Installation und Aktivierung einer weiteren Partition</h3>
<p>Wir booten nun erneut das Live-Linux-System. Wieder ist etwas Kommandozeilen-Voodoo nötig. Wir sichern und beschädigen die Vista-Partition so, wie wir es zuvor mit der XP-Partition getan haben. Vergessen Sie das Einbinden des Laufwerks, auf dem Sie die Sicherung ablegen, nicht!</p>
<ol>
<li>
<p>Öffnen Sie ein Terminalfenster, indem Sie mit <tt>sudo su</tt> Rootrechte erlangen. Dort lassen Sie dich mit <tt>fdisk</tt> die aktuelle Partitionierung anzeigen &#8212; die Vista-Partition wird meist <tt>/dev/sda2</tt> sein. Auch hier sichern Sie mit <tt>dd</tt> die ersten 16MB der Partition auf die zweite Festplatte oder den USB-Stick: <tt>if=...</tt> kennzeichnet dabei die als Eingabedatei verwendete Windows-Partition. Anschließend überschreiben Sie die ersten  16MB mit Nullen (Eingabedatei <tt>/dev/zero</tt>). Sie verhindern so, dass die nächste Windows-Installation das Dateisystem findet und versucht, einzubinden.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen07_dd.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen07_dd_sml.png" /></a></div>
</li>
<li>
<p>Mit <tt>fdisk /dev/sda</tt> starten Sie nun den Partitionseditor auf der ersten Platte. Den Typ der zweiten Partition ändern Sie mit <tt>t</tt> auf <tt>da</tt> (Data), den Typ der dritten  Partition auf NTFS (7). Schließlich entziehen Sie <tt>/dev/sda2</tt> mit <tt>a</tt> das Bootable-Flag und setzen es ebenfalls mit <tt>a</tt> auf <tt>/dev/sda3</tt>. Wenn <tt>p</tt> das gewünschte Ergenis anzeigt, sichern Sie die Partitionstabelle mit <tt>w</tt>.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen08_fdisk.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen08_fdisk_sml.png" /></a></div>
</li>
<li>
<p>Starten Sie nun den Rechner neu, beispielsweise durch Eingabe des Kommandos <tt>reboot</tt>.</p>
</li>
</ol>
<h3>Installation von Windows 7</h3>
<p>Nun ist die Installation von Windows 7 an der Reihe. Sie verläuft wie die von Vista. Formatieren Sie die vorgesehene Partition und fahren Sie wie gewohnt fort.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen09_win7.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen09_win7_sml.png" /></a></div>
<h3>Schreiben des Bootloaders</h3>
<p>Jetzt muss der GRUB-Bootloader geschrieben werden. Mounten Sie hierfür die Partition, die GRUB später aufnehmen wird (im Beispiel <tt>/dev/sda4</tt>, gemountet unter <tt>/media/disk1part4</tt>) und die Partition, welche die gesicherten Partitionsanfänge enthält (im Beispiel <tt>/dev/sdb1</tt>, gemountet unter <tt>/media/disk2part1</tt>).</p>
<ol>
<li>
<p>Prüfen Sie zunächst mit <tt>df | grep sd</tt>, ob die beiden benötigten Partitionen wirklich eingehängt sind. Anschließend schreiben Sie GRUB mit den auf dem Screenshot erkennbaren Parametern: <tt>--root-directory=/media/disk1part4</tt> kennzeichnet die Partition, auf der die Konfiguration abgelegt ist, <tt>/dev/sda</tt> ist die Zielplatte. </p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen10_grub.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen10_grub_sml.png" /></a></div>
</li>
<li>
<p>GRUB benötigt nun noch eine Konfigurationsdatei <tt>/boot/grub/menu.lst</tt> auf der Installationspartition, hier also <tt>/media/disk1part4/boot/grub/menu.lst</tt>. Verwenden Sie den Befehl <tt>sudo kate /media/disk1part4/boot/grub/menu.lst</tt> um die Konfigurationsdatei anzulegen.</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen11_grub.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen11_grub_sml.png" /></a></div>
<p>Hier die vollständige Konfiguration für Copy&amp;Paste:</p>
<pre>default 1
timeout 10

title Windows XP
root (hd0,0)
hide (hd0,1)
hide (hd0,2)
unhide (hd0,0)
savedefault
makeactive
chainloader +1

title Windows Vista
root (hd0,1)
hide (hd0,0)
hide (hd0,2)
unhide (hd0,1)
savedefault
makeactive
chainloader +1

title Windows 7
root (hd0,2)
hide (hd0,0)
hide (hd0,1)
unhide (hd0,2)
savedefault
makeactive
chainloader +1</pre>
<p>Zu bemerken ist, dass GRUB Laufwerke anders kennzeichnet als Linux selbst: Zunächst fängt die Zählung bei Null an, zudem verwenden Platten keine Buchstaben. (hd0,0) ist also die erste Partition der ersten Festplatte. Unsere GRUB-Konfiguration versteckt bei jedem Start einer Windows-Installation die anderen (hide) und holt die eigene hervor (unhide). Übrigens: Um immer den zuletzt gewählten Eintrag zu starten, verwenden Sie <tt>default saved</tt>.</p>
</li>
</ol>
<h3>Anpassung der Partitionstypen</h3>
<p>Nun müssen die mutwillig beschädigten Installation von XP und Vista repariert werden und die Partitionstypen wieder korrigiert werden:</p>
<ol>
<li>
<p>Verwenden Sie wieder <tt>dd</tt>, um die gesicherten Partitionsanfänge zurückzuschreiben. Blockgröße und -anzahl sind jetzt nicht nötig:</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen12_dd.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen12_dd_sml.png" /></a></div>
</li>
<li>
<p>Mit <tt>fdisk</tt> setzen Sie die Typen der als Datenpartition markierten Partitionen <tt>sda1</tt> und <tt>sda2</tt> jetzt wieder auf NTFS (7):</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen13_fdisk" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen13_fdisk_sml.png" /></a></div>
</li>
</ol>
<h3>Der erste Start</h3>
<p>Und so sieht GRUB dann aus:</p>
<div align="center"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen14_grub.png" target="_blank"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090124_screen14_grub_sml.png" /></a></div>
<p>Sollten Sie eine Windows-Installation neu installieren müssen, ist dies ganz einfach: Sichern Sie mit <tt>dd</tt> die Partitionsanfänge der beiden anderen, überschreiben Sie diese mit Nullbytes und ändern Sie den Partitionstyp auf <tt>da</tt>. Dann installieren Sie das Windows erneut. Nach abgeschlossener Installation setzen Sie die Partititionstypen zurück und spielen die gesicherten Partitionsanfänge zurück. Unter Umständen müssen Sie GRUB erneut installieren, wobei jedoch die Konfiguration erhalten bleibt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/01/24/dreimal-windows-mit-grub/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fünfmal kreativer Einsatz von openssl</title>
		<link>http://blog.rootserverexperiment.de/2008/07/09/funfmal-kreativer-einsatz-von-openssl/</link>
		<comments>http://blog.rootserverexperiment.de/2008/07/09/funfmal-kreativer-einsatz-von-openssl/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 07:04:15 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2008/07/09/funfmal-kreativer-einsatz-von-openssl/</guid>
		<description><![CDATA[
Als Anwender kennt man OpenSSL vor allem als freie Verschlüsselungsschicht für TCP/IP-Verbindungen &#8212; ist man Administrator eines Web- oder Mailservers, denkt man eher an das Kommandozeilentool openssl, mit dem Zertifikate erstellt und signiert werden. Doch gerade das CLI-Werkzeug ist mächtiger, als manch einer denkt und kann ideal für viele Anwendungen jenseits des Zertifikate-Managements verwendet werden.

1. [...]]]></description>
			<content:encoded><![CDATA[<p>
Als Anwender kennt man OpenSSL vor allem als freie Verschlüsselungsschicht für TCP/IP-Verbindungen &#8212; ist man Administrator eines Web- oder Mailservers, denkt man eher an das Kommandozeilentool <tt>openssl</tt>, mit dem Zertifikate erstellt und signiert werden. Doch gerade das CLI-Werkzeug ist mächtiger, als manch einer denkt und kann ideal für viele Anwendungen jenseits des Zertifikate-Managements verwendet werden.
</p>
<h3>1. SSL-Verbindungen testen</h3>
<p><span id="more-71"></span></p>
<p>
Relativ nah am üblichen Einsatzzweck liegt die Möglichkeit, mit einem simplen Client zu testen, ob ein Server korrekt SSL anbietet oder in den TLS-Modus umschaltet, wenn dies angefordert wird. Am einfachsten geht dies bei einem SSL-gesicherten Webserver, der auf dem Standard-Port 443 lauscht:
</p>
<pre>openssl s_client -connect mail.rootserverexperiment.de:443</pre>
<p>
Der <tt>s_client</tt> wird nun das Zertifikat anzeigen und gegebenenfalls auf Probleme hinweisen, ein &#8220;Verify return code&#8221; zeigt gegebenenfalls selbst signierte Zertifikate an. Ist das Zertifikat durch, besteht die Möglichkeit, beispielsweise GET-Sequenzen abzusetzen um Webseiten anzufordern.
</p>
<p>Ein wenig aufwendiger ist die Kontaktaufnahme mit einem SMTP-Server. Mit diesem wird zunächst Klartext gesprochen, bevor die Anweisung zur Verwendung einer verschlüsselten Verbindung gegeben wird. Auch den Schritt, TLS zu starten, übernimmt <tt>openssl</tt> mit einem zusätzlichen Schalter:
</p>
<pre>openssl s_client -connect mail.rootserverexperiment.de:25 -starttls smtp</pre>
<p>
Nachdem man die Zertifikate betrachtet hat, kann man hier &#8212; wie bei Telnet oder Netcat bei unverschlüsselten Verbindungen üblich, die Kommunikation mit SMTP-Befehlen fortsetzen:
</p>
<pre>EHLO whitehouse.gov
MAIL FROM: george@whitehouse.gov
RCPT TO: mattias@rootserverexperiment.de
...</pre>
<p>
Der geneigte Admin erkennt schnell: Mit diesem Test ist sichergestellt, dass nicht nur das Zertifikat selbst in Ordnung ist, sondern dieses auch richtig in die Konfiguration des Servers eingebunden wurde (Zugriffsrechte, Pfade). Schlampigkeiten bei der Installation des Zertifikates werden so flott identifiziert.
</p>
<h3>2. Prüfsummen erstellen</h3>
<p>
Nicht auf jedem Rechner, auf dem man gerade unterwegs ist, stehen die gängigen Werkzeuge zum Erstellen und Checken von Prüfsummen bereit. Ist OpenSSL installiert, kann dieses verwendet werden um praktisch alle gängigen &#8220;Message Digests&#8221; zu erstellen. Die (kollisionsfreudige) MD5 zum Beispiel
</p>
<pre>openssl md5 /tmp/test.bin</pre>
<p>
oder den eher exotischen RMD160:
</p>
<pre>openssl rmd160 /tmp/test.bin</pre>
<h3>3. Dateien verschlüsseln</h3>
<p>
Verschlüsselung auf die Schnelle? Kein Problem mit OpenSSL! Zumindest symetrische Algorithmen beherrscht das Kommandozeilenwerkzeug perfekt. Das reicht, um eine Datei mit einem Passwort zu versehen und weiterzugeben. Das Passwort kann auf der Kommandozeile übergeben werden. Lässt man es weg, öffnet OpenSSL einen Passwort-Prompt &#8212; hier die Verschlüsselung mit <a href="http://de.wikipedia.org/wiki/Advanced_Encryption_Standard" target="_blank">256Bit-AES</a>:
</p>
<pre>openssl enc -aes256 -k 'Ganz geheimes Passwort' -in datei.txt -out datei.crypt</pre>
<p>
Der Empfänger (welcher das Passwort auf einem sicheren Weg erhalten hat) kann dann mit dem zusätzlichen Schalter <tt>-d</tt> die Entschlüsselung starten:
</p>
<pre>openssl enc -aes256 -d -in datei.crypt -out datei.txt</pre>
<p>
Diese Form der symetrischen Verschlüsselung hat natürlich den Nachteil, dass der Schlüssel auf Sender- und Empfängerseite bekannt sein muss. Sie taugt daher nicht dazu, bspw. auf einem Server die Logdateien täglich zu verschlüsseln und sie so für Angreifer unbrauchbar zu machen &#8212; schließlich ist das Passwort irgendwo im Klartext gespeichert oder es lässt sich schlimmstenfalls über die Prozessliste auslesen. Dafür eignet sich die symetrische Verschlüsselung dafür, Dateien für den Versand an Linux nutzende Empfänger vorzubereiten, die sonst mit Verschlüsselung wenig am Hut haben: OpenSSL ist immer installiert, das Passwort kann am Telefon übergeben werden und die Entschlüsselung ist leicht zu verstehen.
</p>
<h3>4. Dateien Base64-kodieren</h3>
<p>
Ganz praktisch ist auch die Möglichkeit, Dateien für dem Versand per Email oder den Einbau in selbst extrahierende Shell-Scripte <a href="http://de.wikipedia.org/wiki/Base64" target="_blank">Base64</a> zu kodieren. Die Umwandlung einer unverschlüsselten Datei Datei in eine Base64 kodierte entspricht weitgehend der Verschlüsselung, weshalb ich auf auf die Dekodierung nicht weiter eingehe:
</p>
<pre>openssl base64 -in test.bin -out test.b64</pre>
<p>
Ein sehr schönes Feature ist jedoch die Möglichkeit, eine Datei zu verschlüsseln und anschließend Base64 zu kodieren, hierbei ist bei der Verschlüsselung und Entschlüsselung der zusätzliche Schalter <tt>-a</tt> notwendig:
</p>
<pre>openssl enc -aes256 -k 'Ganz geheimes Passwort' -a -in datei.txt -out datei.crypt.b64</pre>
<p>
Wofür Sie diese Funktion verwenden, ist Ihnen überlassen &#8212; Sinn macht sie beispielsweise beim direkten Versand per Pipeline einer Datei via Mail (einfach den Parameter <tt>-out</tt> weglassen) oder beim Einbetten binärer und verschlüsselter Daten in Shellscripte.
</p>
<h3>5. Passwort-Hashes generieren</h3>
<p>
Haben Sie schoneinmal mit einer 32Bit-Rettungs-CD oder einem 32Bit-Rettungssystem einen Rechner zu reparieren versucht, auf dem ein 64Bit-Linux läuft. Spätestens beim <tt>chroot</tt> in die gemountete Festplatte des havarierten Systems wird klar, dass die übliche Methode, das Rootpasswort mit <tt>passwd</tt> zu setzen fehlschlägt. Hier hilft <tt>openssl</tt>. Mit dem Subkommando <tt>passwd</tt> entsteht ein Passwort-Hash, der in die Datei <tt>/etc/shadow</tt> eingetragen werden kann. Der bei Linux übliche MD5-Hash erfordert einen zusätzlichen Parameter:</p>
<pre>openssl passwd -1</pre>
<p>
Passwort-Hashes werden auch bei anderen Anwendungen benötigt: Viele Blogsysteme speichern Hashes für Zugangspasswörter in der Datenbank und Apache vertraut in seinen <tt>.htpasswd</tt>-Dateien ebenfalls auf MD5-Hashes. <tt>openssl</tt>beherrscht natürlich noch andere Hashes, im Zweifel hilft nur ausprobieren.
</p>
<p>
Alle hier gezeigten Beispiele stammen mehr oder weniger unverändert aus der Manual-Page von <a href="http://openssl.org/docs/apps/openssl.html" target="_blank"><tt>openssl</tt></a> beziehungsweise den separaten Manualpages von <a href="http://openssl.org/docs/apps/enc.html" target="_blank"><tt>enc</tt></a> und <a href="http://openssl.org/docs/apps/s_client.html" target="_blank"><tt>s_client</tt></a>. Sollten diese auf Ihrem System nicht installiert sein, verwenden Sie die Links um direkt zu den Original-Manualpages zu gelangen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2008/07/09/funfmal-kreativer-einsatz-von-openssl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firmware seziert: LaCie LaCinema</title>
		<link>http://blog.rootserverexperiment.de/2008/06/24/firmware-seziert-lacie-lacinema/</link>
		<comments>http://blog.rootserverexperiment.de/2008/06/24/firmware-seziert-lacie-lacinema/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 19:11:18 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Legal, illegal, Ganz egal?]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2008/06/24/firmware-seziert-lacie-lacinema/</guid>
		<description><![CDATA[
			Vor ein paar Tagen habe ich mir &#8212; aus Bastellaune &#8212; einen kleinen Festplatten-DivX-Xvid-Player von LaCie (LaCinema Premier 500GB) zugelegt. Spielkind wie ich nunmal bin wollte ich wissen, was drauf läuft. Also die aktuelle Firmware heruntergeladen und entpackt. Das Archiv LaCinemePremier_FirmwareUpdate_3_10.zip enthält die folgenden Dateien:
			
-rw-r--r--  1 mattias mattias     553 2008-04-09 [...]]]></description>
			<content:encoded><![CDATA[<p>
			Vor ein paar Tagen habe ich mir &#8212; aus Bastellaune &#8212; einen kleinen <a href="http://blog.mattiasschlenker.de/2008/06/19/plattenplayer-lacie-lacinema-premier/" target="_blank">Festplatten-DivX-Xvid-Player von LaCie (LaCinema Premier 500GB)</a> zugelegt. Spielkind wie ich nunmal bin wollte ich wissen, was drauf läuft. Also die aktuelle Firmware heruntergeladen und entpackt. Das Archiv <tt>LaCinemePremier_FirmwareUpdate_3_10.zip</tt> enthält die folgenden Dateien:
			</p>
<p><pre>-rw-r--r--  1 mattias mattias     553 2008-04-09 13:57 Changes in firmware version 3_10.txt
-rw-r--r--  1 mattias mattias 4194304 2008-04-03 18:06 lacinema_premier_fw.bin
-rw-r--r--  1 mattias mattias 4194304 2008-02-19 15:00 ntd00fw.bin
-rw-r--r--  1 mattias mattias    7065 2008-04-09 12:02 Update_Procedure.txt</pre>
</p>
<p>Interessant sind natürlich besonders die beiden Bin-Dateien. Der Befehl &#8220;strings&#8221; verschafft schonmal einen Überblick, was drin stecken könnte, da recht viel ausgegeben wird, ist es sinnvoll, nach Begriffen, wie Kernel oder Linux zu greppen. Und bingo:
</p>
<p><span id="more-64"></span></p>
<p>
<pre>...
linux.c
/work/iamm35_lacie/uClinux-2.4/include/linux/dcache.h
/work/iamm35_lacie/uClinux-2.4/include/linux/sched.h
/work/iamm35_lacie/uClinux-2.4/include/linux/highmem.h
/work/iamm35_lacie/uClinux-2.4/include/linux/dcache.h
/work/iamm35_lacie/uClinux-2.4/include/linux/dcache.h
/work/iamm35_lacie/uClinux-2.4/include/linux/dcache.h
linux.bin.gz
linux.bin</pre>
</p>
<p>Das sieht bereits nach den Resten eines Dateisystems (linux.bin.gz und linux.bin) und nach den in Kernelmodulen hinterlassenen Pfade der Include-Dateien aus. Schöner wäre es aber Zugriff auf ein Dateisystem zu erhalten. Doch der Befehl &#8220;file&#8221; sorgt zunächst für Ernüchterung:
</p>
<p><tt>lacinema_premier_fw.bin: data</tt></p>
<h3>Image-Offset aufgespürt</h3>
<p>Doch wenn Strings so sauber drüberlaufen, kann es kein verschlüsseltes Image sein. Das eigentliche Dateisystem muss also mit einem gewissen Offset beginnen. Eine kurze Google-Recherche liefert, dass das häufig verwendete <tt>romfs</tt> mit dem Magic <tt>-rom1fs-</tt> beginnt. Die Zeichenkette wandeln wir zunächst nach Hex:</p>
<p><tt>echo -n '-rom1fs-' | hexdump</tt>
</p>
<pre>0000000 722d 6d6f 6631 2d73 000a</pre>
<p>Nun können wir einen Hexdump des Images machen und per Grep den Offset feststellen:</p>
<p><tt>hexdump lacinema_premier_fw.bin | grep '722d 6d6f 6631 2d73'</tt>
</p>
<p>Bingo!</p>
<pre>00009c0 722d 6d6f 6631 2d73 4030 e92d 4000 e1a0
0040000 722d 6d6f 6631 2d73 3700 e0ec 5815 4b36</pre>
<p>Mit Offset 0&#215;40000 beginnt also ein RomFS-Image. Das sollte sich auf einem halbwegs aktuellen Desktop-Linux nun mounten lassen:
</p>
<p>
<tt>modprobe romfs<br />
mount -t romfs -o loop,offset=0x40000 lacinema_premier_fw.bin /tmp/firmware</tt>
</p>
<h3>Und was steckt drin?</h3>
<p>
Nachdem sich das Image so problemlos mounten lies, ist es natürlich schön zu wissen, was drin steckt:
</p>
<pre>
drwxr-xr-x  1 root root   32 1970-01-01 01:00 .
drwxrwxrwt 16 root root  820 2008-06-19 19:26 ..
drwxr-xr-x  1 root root   32 1970-01-01 01:00 bin
drwxr-xr-x  1 root root   32 1970-01-01 01:00 cdrom
drwxr-xr-x  1 root root   32 1970-01-01 01:00 dev
drwxr-xr-x  1 root root   32 1970-01-01 01:00 etc
drwxr-xr-x  1 root root   32 1970-01-01 01:00 hd1
drwxr-xr-x  1 root root   32 1970-01-01 01:00 hd2
drwxr-xr-x  1 root root   32 1970-01-01 01:00 img
-rwxr-xr-x  1 root root 6,5K 1970-01-01 01:00 irdrv.o
-rwxr-xr-x  1 root root  30K 1970-01-01 01:00 irdrvtest.bin
-rwxr-xr-x  1 root root 341K 1970-01-01 01:00 khwl.o
-rwxr-xr-x  1 root root 342K 1970-01-01 01:00 linux.bin.gz
-rwxr-xr-x  1 root root 507K 1970-01-01 01:00 loading.yuv
-rwxr-xr-x  1 root root  55K 1970-01-01 01:00 minimod
drwxr-xr-x  1 root root   32 1970-01-01 01:00 nova
-rwxr-xr-x  1 root root  11K 1970-01-01 01:00 piodrv.o
</pre>
<p>Das sieht doch schon ziemlich nach einem recht gewöhnlichen &#8212; wenn auch sehr kompakten &#8212; Linux-Dateisystem aus. Den Beweis liefert schließlich erneut &#8220;strings&#8221;, dieses Mal auf dem entpackten Kernel <tt>linux.bin.gz</tt>:</p>
<p><tt>Linux version 2.4.17-uc0 (root@localhost.localdomain) (gcc version 2.95.3 20010315 (release)) #44 2008. 04. 02.</tt></p>
<p>
Der Kernel alleine reicht nicht für ein Linux-System. Wenigstens eine Anwendung benötigt man, die als &#8220;init&#8221; &#8212; als Prozess 1 &#8212; gestartet wird. Üblich sind Programmnamen wie <tt>init</tt> oder <tt>linuxrc</tt>, letztlich kann der Name des zuerst gestarteten Programmes aber auch vom Bootloader übergeben werden. Dennoch, ein <tt>/bin/init</tt> ist präsent, nicht einmal als Softlink, sondern als recht fette Datei mit 1,7MB. Hier wird offenbar die Hauptanwendung &#8212; der Medienplayer &#8212; beim Boot gestartet, stürzt diese ab, wird einfach rebootet. Strings auf <tt>/bin/init</tt> scheint diese Vermutung zu bestätigen, liefert der Befehl doch allerlei Hinweise auf Foto- und Videoplayer.
</p>
<p>
Doch gegen Ende fallen einige verdächtige Zeilen auf:
</p>
<pre>Connection timed out
Connection refused
Host is down
No route to host
Operation already in progress
Operation now in progress
Stale NFS file handle
Structure needs cleaning
Not a XENIX named type file
No XENIX semaphores available
Is a named type file
Remote I/O error
Disk quota exceeded</pre>
<p>
Ich hatte den Verdacht, diese schon gesehen zu haben, bastle ich doch viel mit der BusyBox herum. In einer BusyBox 1.9.2 fand ich:
</p>
<pre>Connection timed out
Connection refused
Host is down
No route to host
Operation already in progress
Operation now in progress
Stale NFS file handle
Structure needs cleaning
Not a XENIX named type file
No XENIX semaphores available
Is a named type file
Remote I/O error
Disk quota exceeded</pre>
<p>
Diese Zeilen entsprechen im Wortlaut und Reihenfolge der BusyBox. Natürlich könnte dies Zufall sein. Gar nicht abwegig wäre es, wenn jemand &#8212; um die GPL zu umgehen &#8212; einfach einen Programmierer in Indien oder China beauftragt, den gesamten Code der Mountfunktionen nachzuprogrammieren, gleiche Übergabeparameter, gleiche Rückgabewerte und gleiche Strings inclusive. Allerdings würde hier wahrscheinlich jeder vernünftige Mensch darauf bestehen, dass nur relevante Fehler Eingang in den Code finden (haben XENIX-bezogene Funktionen heute noch Bestand?)  und es wäre fraglich, ob die Strings des sauber neu implementierten Codes im Objekt wieder die gleiche Anordnung hätten.
</p>
<h3>Conclusio</h3>
<p>
Auch wenn der 100%ige Beweis noch aussteht wiegen die Indizien bereits schwer: Es deutet viel auf einen Kernel und wenigstens eine Anwendung unter GPL, die nicht als Sourcecode erhältlich sind. Vielleicht kann sich einer der &#8220;Objektcode-Kenner&#8221; da draußen die Binaries einmal genauer vornehmen und meine Vermutungen bestätigen oder widerlegen. Eine Freigabe unter GPL dürfte LaCie oder deren Zulieferer nicht leicht fallen, schließlich sind die Chancen groß, dass &#8220;das fette Binary&#8221; auch Code von Dritten enthält. Doch gerade im Fall der Busybox sollte die Vorgehensweise einfach sein: Einfach die BusyBox als externes Binary ausführen und dessen Code freigeben. Damit sind alle zufrieden: GPL-Apologeten und kommerzielle Nutzer.
</p>
<p>
Natürlich ist fraglich, ob LaCie die alleinige Schuld trifft: Es deutet viel darauf hin, dass neben der Standardhardware von Sigma Electronics eben auch Standardsoftware modifiziert und eingesetzt wurde. Während Sigma die Referenz-Implementierung vorbildlich zum Download anbietet, schaut es mit den modifizierten Versionen düster aus.
</p>
<h3>Und das Tool der Woche?</h3>
<p>Die Moral von der Geschicht: Mit dem richtigen Offset mountet man Images oder auch nicht.</p>
<p><b>Nachtrag, 20. Oktober 2008</b>: <a href="http://www.golem.de/0810/63051.html">Golem berichtet</a> über eine umfassende <a href="http://www.loohuis-consulting.nl/downloads/compliance-manual.pdf">Anleitung zum Aufspüren von GPL-Verletzungen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2008/06/24/firmware-seziert-lacie-lacinema/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tool der Woche: tar</title>
		<link>http://blog.rootserverexperiment.de/2008/06/10/tool-der-woche-tar/</link>
		<comments>http://blog.rootserverexperiment.de/2008/06/10/tool-der-woche-tar/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 06:14:04 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2008/06/10/tool-der-woche-tar/</guid>
		<description><![CDATA[Klar kennen Sie tar. Wer hat den &#8220;Tape Archiver&#8221; etwa noch nicht benutzt, um Archive zu ver- oder entpacken. Der typische Einsatz beim Entpacken eines (zumeist Quellcode-) Archives ist (gegebenenfalls mit &#8220;z&#8221; statt &#8220;j&#8221;, wenn es sich um ein mit gzip komprimiertes Archiv handelt):
tar xvjf archiv.tar.bz2
Oder wenn stattdessen ein oder mehrere Ordner oder Dateien zu [...]]]></description>
			<content:encoded><![CDATA[<p>Klar kennen Sie <tt>tar</tt>. Wer hat den &#8220;Tape Archiver&#8221; etwa noch nicht benutzt, um Archive zu ver- oder entpacken. Der typische Einsatz beim Entpacken eines (zumeist Quellcode-) Archives ist (gegebenenfalls mit &#8220;z&#8221; statt &#8220;j&#8221;, wenn es sich um ein mit <i>gzip</i> komprimiertes Archiv handelt):</p>
<p><tt>tar xvjf archiv.tar.bz2</tt></p>
<p>Oder wenn stattdessen ein oder mehrere Ordner oder Dateien zu einem Archiv zusammengefasst werden sollen:</p>
<p><tt>tar cvjf archiv.tar.bz2 ordner/</tt></p>
<p>Doch <tt>tar</tt> kann einiges mehr. Als erster Einsatzbereich sei da das Archivieren auf Bandlaufwerke zu nennen. Statt dem Archivnamen gibt man einfach den Namen der Gerätedatei an, auf dem die Sicherung landen soll. Im Zeitalter der Sicherung auf optische Datenträger oder des Off-Site-Backups auf irgendwelche Remote-Server schwindet der Nutzen dieser Funktion von <tt>tar</tt> aber immer mehr und Tools wie <tt>rsync</tt>, auf das ich später eingehen möchte oder <a href="http://blog.rootserverexperiment.de/2007/10/14/praktisches-archiv-filesystem-squashfs/"><tt>mksquashfs</tt></a> (für&#8217;s Backup auf optische Medien) gewinnen an Bedeutung. Dennoch gibt es genügend Einstzbereiche für <tt>tar</tt>:</p>
<p><span id="more-63"></span></p>
<h3>Kopieren von Verzeichnisstrukturen</h3>
<p><tt>tar</tt> lässt sich wunderbar als relativ effizientes Kopierwerkzeug einsetzen. Für diesen Einsatzbereich kommt uns entgegen, dass <tt>tar</tt> wie fast alle Unix-Programme seine Ausgabe auf die Standardausgabe schreiben kann und so die Verwendung in Pipelines zulässt. Wollen Sie beispielsweise den Inhalt einer unter <tt>/media/hdc1</tt> gemounteten Platte auf die Platte unter <tt>/media/sda1</tt> schreiben, nutzen Sie dafür:</p>
<p><tt>tar -C /media/hdc1 -cf - . | tar -C /media/sda1 -xvf -</tt></p>
<p>In diesem Fall weist das große <tt>-C</tt> (<i>change directory</i>) an, zunächst das Arbeitsverzeichnis zu wechseln. Dort wird dann der gesamte Inhalt des aktuellen Verzeichnisses (&#8220;.&#8221;) in ein neues (<tt>-c</tt> wie <i>create</i>) Archiv verpackt, als Ausgabedatei (<tt>-f</tt> wie <i>file</i>) dient die Pipe. Auf der Empfängerseite wird gleich wieder entpackt (<tt>-x</tt> wie <i>extract</i>), nicht unbedingt nötig ist das <tt>-v</tt>, welches dafür sorgt, dass angezeigt wird, welche Datei gerade an der Reihe ist.  Dass bei diesem Verfahren immer zwei Prozesse arbeiten, sollte nicht weiter stören, schließlich ist die Kommunikation via Pipe effizient und beide Prozesse sind weniger Prozessor- als I/O-lastig.</p>
<h3>Kopieren übers Netzwerk</h3>
<p>Wo eine Pipeline Verwendung findet, kann man auch irgendwie übers Netzwerk tunneln. Ganz einfach klassisch, unkompliziert und unverschlüsselt geht es mit <tt>nc</tt> oder <tt>netcat</tt>, einem Tool, das nichts anderes macht, als übers Netz zu &#8220;catten&#8221;. Zuerst öffnet man auf Empfängerseite ein lauschendes (<tt>l</tt> wie <i>listen</i>) <tt>nc</tt> auf einem unbenutzten Port und übergibt den Datenstrom gleich an das entpackende <tt>tar</tt>:</p>
<p><tt>nc -l -p 12345 | tar -C /tmp/ -xvf -</tt></p>
<p>Jetzt kann auf Senderseite mit der Übertragung unter Angabe der IP-Adresse des Zielsystems begonnen werden:</p>
<p><tt>tar -C /irgend/wo -cvf - . | nc -q 5 123.45.67.89 12345</tt></p>
<p>Insgesamt sind vier Prozesse beteiligt und man muss auf beiden Rechnern Befehle starten. Dafür läuft<tt>nc</tt> schön flott. Denn Nachteil der fehlenden Verschlüsselung kann man umgehen, indem man zu <tt>ssh</tt> greift. Da geht es auch in einem einzigen Befehl. Entweder man startet <tt>tar</tt> auf dem sendenden System: </p>
<p><tt>tar -C /irgend/wo -cf - . | ssh mattias@123.45.67.89 tar -C /tmp/ -xvf -</tt></p>
<p>Genausogut geht es im &#8220;Pull-Verfahren&#8221;:</p>
<p><tt>ssh mattias@123.45.67.98 tar -C /irgend/wo -cf - . | tar -C /tmp/ -xvf -</tt></p>
<p>Verwendet man <tt>tar</tt> um Daten von einem System aufs andere zu transferieren, ist es oft sinnvoll, mit <tt>--numeric-owner</tt> Verwirrungen bei Nutzernamen/UIDs zu vermeiden. Bei Backups aus laufenden Systemen, wo keine Mountpoints überscprungen werden sollen, hilft zudem auf Senderseite <tt>--one-file-system</tt>.</p>
<h3>Notfallbackup auf DVD</h3>
<p>Gelegentlich kommt es vor, dass man einen havarierten Rechner retten muss, aber weder über Netzwerk, noch über eine USB-Festplatte verfügt. Dann hilft <tt>tar</tt>, welches es ermöglicht, einen &#8220;Tarball&#8221; direkt auf eine DVD zu schreiben. Komprimiert natürlich und ohne Umweg über eine temporäre Datei. Allerdings sollte man vorher abschätzen können, ob die zu schreibende Datenmenge draufpasst und ein Komprimierungsverfahren wählen, das möglichst keine Gefahr birgt, dass der Puffer leer läuft. Ein kleines Hindernis, das leicht zu umschiffen ist, ist die Tatsache, dass <tt>growisofs</tt> unbedingt von einer Datei lesen möchte. Kann es haben: Wir geben im die Gerätedatei <tt>/dev/stdin</tt>. So sieht die resultierende Pipeline aus:</p>
<p><tt>tar -C /zu/sichern -cvzf - . | growisofs -dvd-compat -speed=2 -Z/dev/sr0=/dev/stdin</tt></p>
<p>Natürlich lässt sich eine so beschriebene DVD nicht mounten. Behandeln wir das optische Laufwerk wie ein Bandlaufwerk und lesen den Inhalt der DVD sequentiell ein:</p>
<p><tt>tar -tvf /dev/sr0</tt></p>
<p>Entpackt wird natürlich unter Verwendung von <tt>-x</tt> statt <tt>-t</tt> und im richtigen Verzeichnis.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2008/06/10/tool-der-woche-tar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tool der Woche: id3ed &#8212; ID3-Tags auf der Kommandozeile</title>
		<link>http://blog.rootserverexperiment.de/2008/05/28/tool-der-woche-id3ed-id3-tags-auf-der-kommandozeile/</link>
		<comments>http://blog.rootserverexperiment.de/2008/05/28/tool-der-woche-id3ed-id3-tags-auf-der-kommandozeile/#comments</comments>
		<pubDate>Wed, 28 May 2008 18:18:16 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2008/05/28/tool-der-woche-id3ed-id3-tags-auf-der-kommandozeile/</guid>
		<description><![CDATA[In den letzten Tagen habe ich meine (private) MP3-Sammlung aufgeräumt und dabei auch etliche Dateien getaggt, von denen Titel, Interpret und Album zwar bekannt waren, aber eben in den ID3-Tags am Ende der Datei fehlten. Kleine Korrekturen lassen sich in Dateimanagern wie Thunar recht problemlos im Kontextmenü vornehmen, wenn aber alle Dateien in einem Ordner [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen habe ich meine (private) MP3-Sammlung aufgeräumt und dabei auch etliche Dateien getaggt, von denen Titel, Interpret und Album zwar bekannt waren, aber eben in den ID3-Tags am Ende der Datei fehlten. Kleine Korrekturen lassen sich in Dateimanagern wie Thunar recht problemlos im Kontextmenü vornehmen, wenn aber alle Dateien in einem Ordner mit neuen Tags versehen werden müssen, hilft nur die Kommandozeile.</p>
<p>Fündig wurde ich mit <a href="http://dakotacom.net/~donut/programs/id3ed.html"><tt>id3ed</tt></a>.</p>
<p><span id="more-61"></span>
<p>Die Anwendung ist einfach (aber nicht intuitiv). Übergibt man ohne weitere Parameter einfach nur die Namen zu ändernder Dateien, kann man in einem (mit readline versehenen) CLI die Tags ändern oder fehldende hinzufügen. Richtig spannend wird aber erst der Batch-Betrieb. Möchte man zunächst alle Dateien in einem Ordner, mit Titel, Interpret, Album und Jahr versehen, geht das mit Kleinbuchstaben und einem &#8216;-q&#8217;, welches anzeigt, dass die übrigen Tags nicht mehr angefasst werden sollen:</p>
<p><tt>id3ed -q -n 'Marillion' -a 'Misplaced Childhood' -y 1985 -g 'Progressive Rock' *.mp3</tt></p>
<p>Ob <i>Misplaced Childhood</i> als Progressive durchgeht, soll an dieser Stelle nicht erörtert werden. Anschließend können die einzelnen Titel mit Tracknummer und Titel versehen werden. Die explizite Angabe der Parameter als Großbuchstaben sorgt dafür, dass keine weiteren Tags bestätigt werden müssen:</p>
<p><tt>id3ed -KS *.mp3</tt></p>
<p>Den Erfolg der ganzen Aktion zeigt schließlich:</p>
<p><tt>id3ed -i *.mp3</tt></p>
<p>Auch <tt>id3ed</tt> hat so seine Probleme: <tt>id3ed</tt> schreibt nur v1-Tags, aber leider können viele Player nicht frischer und Umlaute werden je nach eingestelltem Zeichensatz nicht richtig übernommen (im Zuge der Player-Kompatibilität verzichtet man bei <i>M&auml;go de Oz</i> oder <i>M&ouml;tley Cr&uuml;e</i>) eh besser auf den Heavy-Umlaut&#8230;<br />
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2008/05/28/tool-der-woche-id3ed-id3-tags-auf-der-kommandozeile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
