29.12.2011

Interne Festplatte auf USB-Platte spiegeln, löschen, wieder herstellen

Oft steht das Problem, dass man vor der Reparatur eines Notebooks die Daten von der Festplatte löschen will oder sogar muss. Immerhin haben diese oft mehr Wert als das Notebook selbst und wer weiß schon, was während der Reparatur noch geschieht...

Und leider bieten nicht alle Notebooks die Möglichkeit, die Festplatte(n) einfach auszubauen. Die folgende Anleitung zeigt Ihnen deshalb, wie Sie
  1. den Inhalt einer internen Festplatte komplett auf eine externe, mit USB angeschlossene Platte spiegeln,
  2. den Inhalt einer Festplatte komplett löschen, so das dieser auch nicht mit großem Aufwand wieder herstellbar ist (die Daten also "schreddern")
  3. das Backup (Image) zurück spielen
Damit kann Ihnen diese Anleitung also auch dann helfen, wenn Sie gebrauchte Platten weiterverkaufen oder verschrotten wollen oder wenn es darum geht, ein Backup für eine schnelle Wiederherstellung insbesondere Ihres Betriebssystems zu erzeugen.

Sofern das Notebook noch funktioniert , sollten Sie für die folgenden Schritte unbedingt am Stromnetz betreiben, denn der Vorgang kann - je nach Plattengröße - viele Stunden dauern.

Zunächst sollten Sie sich eine Linux-Live-CD besorgen. Die folgenden Schritte sind mit Ubuntu erprobt, gehen aber auch mit jedem anderen Linux, welches Ihnen eine Live-CD oder gar eine Datenrettungsdisk bietet .

WARNUNG: Bei nicht exakter oder nicht an Ihr System angepasster Vorgehensweise können Ihre Daten von Ihnen selbst unwiederbringlich zerstört werden: Ohne gefestigte Linux-Grundkenntnisse (und also nicht ohne ein weiteres Backup der DATEN) sollten Sie das nicht angehen.

1) Starten Sie von der Rettungs/Linux-Live-CD.

2a)
Öffnen Sie eine Konsole, geben Sie ls -l /dev/sda ein. Prüfen Sie das Ergebnis, ob die "Datei" gefunden wurde, dann ist Ihre einzige(?) Platte das Gerät '/dev/sda' und vermutlich eine SATA-Platte.

Weitere Festplatten müssten dann unter /dev/sdb, /dev/sdc zu finden sein.

Nur wenn nichts gefunden oder nicht alle Platten entdeckt wurden:

2b)
geben Sie ls -l /dev/hda ein. Prüfen Sie das Ergebnis, ob die "Datei" gefunden wurde, dann ist Deine einzige(?) Platte das Gerät '/dev/hda' und vermutlich eine IDE-Platte.

Weitere Festplatten müssten dann unter /dev/hdb, /dev/hdc zu finden sein.

3) Mounten Sie die USB-Platte (einfach anstecken, geht meist automatisch)

4) Schauen Sie nach, wo diese in /media/ gemountet wurde. Ich nehme im Folgenden an, es handelt sich um /media/Volume (das ist auch oft zutreffend)
In der Konsole: ~> ls /media

Finale:
Je nachdem welche Platte existiert und wie "Volume" bei Ihnen heisst:
~> sudo dd if=/dev/sda | gzip -9 -c > /media/Volume/sda.img.gz

Das erzeugt eine Datei mit einem komprimierten(!) Image. Wollen Sie, das das Notebook danach automatisch herunter fährt, so gegen Sie unmittelbar nach dem Befehl noch ein

&& init 0

ein,

Shotdown:

Mit einem ~> ls -l /media/Volume/sda.img.gz sollten Sie sich darüber informieren ob das Anlegen es Backups geklappt hat. Dieses sollte, außer bei ganz neuen, nur (gut komprimierbaren) Textdateien enthaltenden oder nur geringfügig gefüllten (oder bei bereits "geschredderten") Platten nicht(!) so sehr viel kleiner sein als Ihre eigentliche Festplatte.

~> sudo dd if=/dev/zero of=/dev/sda
Das überschreibt Ihre komplette Platte mit (binären) Nullen.

oder, für gehobene Ansprüche:

~> sudo dd if=/dev/random of=/dev/sda
Das überschreibt Ihre komplette Platte mit Zufallswerten

Die letztere Möglichkeit zerstört Ihre Daten so gründlich, dass diese auch nicht mit Geheimdiensten durchaus zur Verfügung stehenden und teuren, langwierigen, deshalb auch nur bei dort selten angewendeten Möglichkeiten - die dann auch nur teilweise zum Erfolg führen - wieder hergestellt werden können. Wenn Sie selbst wirklich zu viel Geld haben können Sie ja mal testen, ob Ontrack diese Daten wieder herstellen kann oder ob es auch bei einer wirklich großen Rechnung dieses auf dem Gebiete absolut anerkannten Spezialisten nur bei dem Versuch bleibt :-)

Aus diesem Grund sollten Sie überlegen, ob Sie das nicht jemanden machen lassen, der etwas davon versteht. Ein allzu amateurhaftes Vorgehen kann den Komplettverlust Ihrer Daten bewirken!

Nach der Reparatur:

1) Starte Sie von der Linux-Live-CD.
2) Öffne Sie eine Konsole
3) Mounten Sie die USB-Platte (einfach anstecken, geht meist automatisch)

Finale:
Je nachdem welche Platte existiert und wie "Volume" bei Ihnen heißt:
~> sudo cat /media/Volume/sda.img.gz | gzip -dc | dd of=/dev/sda

Wollen Sie, das das Notebook danach automatisch herunter fährt, so gegen Sie unmittelbar nach dem Befehl noch ein

&& init 0

ein.

Die entpackten Daten werden zurückgeschrieben. Danach können Sie von der Platte normal booten und alle Partitionen sind wieder da.

Hinweis: Je nach Größe der USB-Festplatte (über 2 Terabyte?) kann es sich lohnen dem Programm dd eine Blockgröße mitzuteilen:

sudo dd bs=4096 if=/dev/sda | gzip -9 -c > /media/Volume/sda.img.gz
sudo dd bs=4096 if=/dev/zero of=/dev/sda
sudo dd bs=4096 if=/dev/random of=/dev/sda

ist die Platte halbwegs modern machen Sie damit nichts falsch. Grund ist, dass moderne und große Platten eine Blockgröße von 512B nur simulieren, was natürlich Rechen- und somit Transferzeit kostet.

21.12.2011

Ubuntu 10.10, Wlan via USB mit RT5370-Chipsatz - und wie man das zum Laufen bekommt

Diese Anleitung dürfte für USB-WLAN-Sticks mit den Chipsätzen RT3070, RT3370, RT5370 und RT5372 auf jedem Linux-System mit einem Kernel ab 2.6 funktionieren. Getestet ist Sie unter Ubuntu 10.10 mit einem USB-Stick mit dem Chipsatz RT5370 welcher auf aktuellen und vor allem bei Notebook-Besitzern sehr beliebten kleinen Sticks gern zum Einsatz kommt.
Hinweis: Die Informationen dieses Artikels beziehen sich auf den 20. Dezember 2011. Inzwischen können Treiber oder Kernel in anderen Versionen vorliegen.

Schritt für Schritt

02.11.2011

PHP: Erster Montag im Monat

Der Frager hat ein "kleines" Problem mit der PHP-Funktion "strtotime". Nach einem Umzug zu einem anderen Hoster funktionierte diese trotz gleicher PHP-Version nicht mehr wie gewohnt. strtotime ist eine Funktion welche versucht(!) aus einem String einen Zeitpunkt zu ermitteln und ist wohl von vielem, u.a. von Lokaliserungseinstellungen abhängig. Im konkreten Fall führt der Luxus aber auch zu Unwägbarkeiten ...und die sollte man umgehen.
<?php
#Test:
print ErsterWochentagImMonat( 11, 2011, 1 )."\n";

function ErsterWochentagImMonat(
$intMonat, $intJahr, $intWochentag
) {

### Erwartete Daten:
#$intMonat = '1...12 (Januar...Dezember)

#$intWochentag = 0 für Sonntag;
#$intWochentag = 1 für Montag
# ...
#$intWochentag = 6 für Sonnabend;

# Plausibilitätsprüfungen:
if ( 1 > $intMonat || 12 < $intMonat ) {
return false;
}
if ( 0 > $intWochentag || 6 < $intWochentag ) {
return false;
}

# Berechnung:
$intTag=date( 'w', mktime ( 0, 0, 0, $intMonat, 1, $intJahr ) );
# Ergebnis: 0 ... 6
if ( $intTag == $intWochentag ) {
return '01.' . ZweiStellig($intMonat) . '.' . $intJahr;
} else {
if ( $intTag < $intWochentag ) {
return ZweiStellig( $intWochentag - $intTag + 1 )
. '.' . ZweiStellig($intMonat)
. '.' . $intJahr;
} else {
return ZweiStellig( $intWochentag - $intTag + 8 )
. '.' . ZweiStellig($intMonat)
. '.' . $intJahr;
}
}
return false;
}

function ZweiStellig( $int ) {
$int = intval( $int );
if ( $int < 10 ) {
return '0' . $int;
}
return $int;
}
?>

17.09.2011

Linux: Logdateien als normaler Benutzer lesen

Jedesmal ein su oder sudo voranzusetzen, weil man /var/log/messages lesen oder verfolgen will kann nervig sein, zu dem braucht man das root-passwort, vor allem muss man es ständig eintippen:

~> sudo tail -fn200 /var/log/messages
Passwort:

Das nervt!

Dem kann man zwar abhelfen, in dem man jedermann Leserechte gibt, aber dies ist auch nicht gerade "ideal" - oft wird man das aus Gründen der Sicherheit nicht wollen.

Und es geht auch besser: Hier die Schritt-für Schritt-Anleitung:

1. Installieren Sie das Paket "facl". Ob das installiert ist kann man mit setfacl --help feststellen. Das Programm wird gefunden? Dann ist die Installation bereits erfolgt.

2. Überprüfen Sie, ob die Option "acl" in /etc/fstab für das Mounten der Partition gesetzt ist. Wenn nicht tragen Sie das nach. Das sieht zum Beispiel so aus:
/dev/disk/by-id/ata[...]-part5 / ext4 acl,user_xattr,noatime 1 1

3. Danach können Sie mittels
~# mount -o remount /

die Partition mit dem neuen Parameter laden. Natürlich kann man auch neu booten (aber dann hätte man auch gleich ein rebootfreundliches Win.... installieren können :)

4. Setzen Sie jetzt einmalig das Leserecht für den Benutzer:
~# fsetacl -m BENUTZERNAME:r /var/log/messages

Erhalten Sie keine Fehlermeldung, so können Sie davon ausgehen, dass dies funktioniert hat. Sind Sie dennoch unsicher, so probieren Sie:
~# fgetacl /var/log/messages

Sieht die Ausgabe so aus:
# file: var/log/messages
# owner: root
# group: root
user::rw-
user:BENUTZERNAME:r--
group::r--
mask::r--
other::---

... dann ist alles bestens.

5. Das genügt aber noch nicht,

denn das Systemprogramm logrotate legt die Datei mit einer gewissen Regelmäßigkeit neu an - und Sie wollen den Vorgang doch nicht mit einer, von der Konfiguration Ihres Linux abhängigen Häufigkeit wiederholen.

Logrotate kann Ihnen aber auch helfen.

Und ich lasse mir gerne von meinem Computer bei Problemen helfen, die ich ohne ihn nicht hätte: Auf meinen System (OpenSuSE-Desktop) öffne ich mit root-Rechten die Datei /etc/logrotate.d/syslog mit einem geeigneten Editor:

~# vi /etc/logrotate.d/syslog

und suche folgenden Abschnitt, ergänze den um die fett ausgegebene Zeile:
/var/log/warn /var/log/messages [...] {
compress
dateext
maxage 365
rotate 99
missingok
notifempty
size +4096k
create 640 root root
sharedscripts
postrotate
/etc/init.d/syslog reload > /dev/null
/usr/bin/setfacl -m BENUTZERNAME:r /var/log/messages
endscript
}

Fertig! Natürlich kann ich das für beliebige Logfiles wiederholen. Weitere Hilfe gibt es mit ~> info setfacl, ~> info getfacl (oder in meinem Aufsatz "Benutzerrechte: Access-Control-Lists (ACL) unter_Linux" - PDF) oder mit ~>info logrotate.

11.09.2011

Honeypot blockt Angreifer

Vor einigen Tagen habe ich einen Honeypot fertiggstellt, der Angreifer schon bei der Vorbereitung eines Angriffs auf meine Webserver feststellt und blockiert.

Hier das Ergebnis der letzten Nacht:

(Uhrzeit, Angriffsersuch, IP-Adresse)

04:42 /admin/banner_manager.php/login.php - 174.128.240.2
04:50 /admin/categories.php/login.php?cPath=&action=new_product_preview - 174.142.75.174
04:50 /admin/categories.php/login.php?cPath=&action=new_product_preview - 75.126.154.162
04:53 /admin/categories.php/login.php?cPath=&action=new_product_preview - 85.158.181.47
04:53 /admin/categories.php/login.php?cPath=&action=new_product_preview - 189.113.5.131
04:54 /admin/categories.php/login.php?cPath=&action=new_product_preview - 74.222.6.111
04:59 /admin/categories.php/login.php?cPath=&action=new_product_preview - 85.36.63.35
05:26 /admin/categories.php/login.php?cPath=&action=new_product_preview - 88.12.17.111
06:45 /admin/banner_manager.php/login.php - 89.249.68.71
07:34 /admin/file_manager.php/login.php - 62.173.138.142

Nette Versuche! Beim nächsten Test auf eine Angriffsmöglichkeit gab es für diese Besucher eine Umleitung zu einer Webseite des BKA über die Bekämpfung von Internetkriminalität. (Etwas) Humor habe ich nämlich auch noch.

18.01.2011

Joomla 1.6 und der Meta-Tag "generator"

Wem es aus gutem Grund nicht gefällt, dass Joomla 1.6 in jedes HTML-Dokument den Meta-Tag "generator" mit dem Wert "Joomla! 1.6 - Open Source Content Management" einbaut, dem kann geholfen werden:

In der Datei /libraries/joomla/document/document.php befindet sich in Zeile 79 der Eintrag:

var $_generator = 'Joomla! 1.6 - Open Source Content Management';

Den kann man natürlich ändern.

13.01.2011

Kein KDE-Sendfax / ksendfax mehr

Viele Benutzer aktueller Linuxversionen, die z.B. mit einer guten, alten ISDN-Karte von AVM Faxe via capisuitefax versenden wollen, werden das Programm KDE-Sendfax vermissen.

Ich mache das deshalb mit folgender, minimalistischer Lösung:
------------------------------------------
#!/bin/sh
echo 'Versenden von:';
echo $*;
echo '';
echo 'Abbrechen mit [STRG]+[c] ... oder';
echo -n 'Faxnummer? ';
read nummer;
capisuitefax -d "$nummer" "$*";
echo -n "Enter zum Beenden";
read ende;
------------------------------------------
Gespeichert unter ~/bin/MyFax und dann im Dateimanager mit Postscript- und PDF-Dateien verknüpft (Ausführen in Terminal!) tut es sein Werk. Will ich mehrere Dokumente (z.B. einen Antrag mit Anlagen) auf einmal versenden, dann hilft mir das PDF-Toolkit (pdftk) mit dem ich mehrere PDF-Dateien (nicht nur) zusammenfügen kann.

Bild: Einrichtung mit Konqueror 4.4.4