Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).
Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Copying for non-public usage is allowed.           Das private Kopieren und Benutzen ist natürlich erlaubt und erwünscht.
18. Dez 2011
Teaser

Sicherheit: Aktive FTP Verbindungen anzeigen (Linux: Ubuntu, Debian)

Um sich alle aktiven Verbindungen Ihres ProFTP Servers anzeigen zu lassen, nutzen Sie folgenden Befehl:

ftpwho -v

Beispielanzeige:

standalone FTP daemon [7309], up for 4 min
 7310 (none)   [  4m9s] (authenticating)
	client: 2015.adsl.provider.com [::ffff:194.24.154.245]
	server: 123.123.123.123:22 (Debian)

 7315 hostname [  4m4s]   2m1s idle
	client: 92015.adsl.provider.com [::ffff:14.124.14.25]
	server: 123.123.123.123:22 (Debian)
	location: /

 7625 hostname [ 3m33s] ( 37%) RETR filename example.sql
	KB/s: 65.84
	client: 92015.adsl.provider.com [::ffff:14.124.14.25]
	server: 123.123.123.123:22 (Debian)
	location: /mre.de

Service class                      -   3 users
11. Dez 2011
Teaser

Sicherheit: Verschlüsseltes Backup per FTP unter Linux (Debian) mit “duplicity”

Zuerst muss das “duplicity” Paket installiert werden:

apt-get install duplicity ncftp

Das Paket “ncftp” wird ebenfalls installiert – ansonsten erhalten Sie die folgende Fehlermeldung beim Starten des Backupprogrammes:

sh: ncftpls: not found
NcFTP not found:  Please install NcFTP version 3.1.9 or later

Verschlüsseltes Backup über FTP

Erstellen Sie einen neuen GPG Schlüssel für den Backup-Prozess:

  • gpg --gen-key
  • 1 (RSA & RSA Verfahren)
  • 2048 (2048 Bits sind normalerweise ausreichend)
  • 0 (Der neue Schlüssel verfällt nie)
  • “j” (Sicherheitsrückfrage, dass der Schlüssel nie verfällt)
  • Ihren Namen eingeben
  • Ihre E-Mailadresse eingeben
  • Kommentar eingeben (optional)
  • “f” (Fertig; der Schlüssel kann erstellt werden)
  • Geben Sie ein geheimes Passwort bzw einen geheimen Satz ein.
    Erzeugen Sie sich am einfachsten ein sicheres Passwort mit unserem Passwortgenerator:
    http://www.yourhelpcenter.de/passwortgenerator/
    Merken Sie sich Ihre geheime Eingabe gut – sie wird später regelmäßig benötigt.
  • Das System berechnet nun Ihren neuen GPG Schlüssel.
    Das kann einen Moment dauern und durch parallele Arbeiten auf einer anderen Konsole auf dem Computer beschleunigt werden.
    Durch solche Arbeiten werden im System schneller bessere Zufallszahlen erzeugt.
  • Ihnen werden die Schlüsseldaten angezeigt:
    gpg: "Trust-DB" wird überprüft
    gpg: 3 marginal-needed, 1 complete-needed, PGP Vertrauensmodell
    gpg: Tiefe: 0  gültig:   1  unterschrieben:   0  Vertrauen: 0-, 0q, 0n, 0m, 0f, 1u
    pub   2048R/0B5A2C65 2011-12-10
    Schl.-Fingerabdruck = 43BF DE11 0954 8199 A7283 12BB 2A45 09EE 00A1 E372
    uid                  Mustermann <max@muster.de>
    sub   2048R/9B661A4B 2011-12-10

Sie können sich jederzeit alle auf Ihrem System verfügbaren GPG Schlüssel anzeigen lassen:

gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/84EE3A53 2002-02-28
uid                  Carl Peterson <cpeterson@somewhere.com>
sub   1024g/96BE17FA 2002-02-28

Die GPG Key ID finden Sie im oberen Beispiel in der Nummer “84EE3A53“.
Diese Key ID (Schlüsselkennung) werden Sie bei der späteren Sicherung benötigen.

Testen Sie nun Ihr verschlüsseltes Backup

Damit das Backup-Programm “duplicity” sich beim Speichern auf den FTP Server anmelden kann, wird das Benutzerpasswort für den FTP Zugang benötigt (“FTP_PASSWORD”). Für die Verschlüsselung der Daten wird das o.a. geheime GPG Passwort ebenfalls gebraucht (“PASSPHRASE”):

export FTP_PASSWORD=DasFtpPasswort
export PASSPHRASE=IhrGeheimesGpgPasswort
duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" --include /etc --include /home --include /root --include /var --exclude /var/tmp --exclude '**' / ftp://username@backupserver/foldername
unset PASSPHRASE
unset FTP_PASSWORD

Ich persönlich teste das Backupsystem und die Verbindung zum FTP Server jedoch immer gerne mit einem kleineren und damit schnelleren Beispiel – ich sichere nur das “/etc” Verzeichnis:

export FTP_PASSWORD=DasFtpPasswort
export PASSPHRASE=IhrGeheimesGpgPasswort
duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" --include /etc --exclude '**' / ftp://username@backupserver/foldername
unset PASSPHRASE
unset FTP_PASSWORD

Wenn Ihr Testbackup erfolgreich verlief, dann können (und sollten) Sie das Backup regelmäßig automatisch durchführen lassen. Dafür nutzen Sie einfach Ihr Testscript, fügen die Zeile “#!/bin/bash” am Anfang ein und speichern die Datei ab:

#!/bin/bash
export FTP_PASSWORD=DasFtpPasswort
export PASSPHRASE=IhrGeheimesGpgPasswort
duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" --include /etc --exclude '**' / ftp://username@backupserver/foldername
unset PASSPHRASE
unset FTP_PASSWORD

Achten Sie darauf, dass das Script ausführbar ist (“chmod +x scriptname”) und tragen Sie den Start in die Crontab ein.

Verbindung zum FTP Server über einen anderen Port (Standard ist Port 21)

Häufig ist es sinnvoll, den normalen FTP Port (21) zu verschleiern und ihn auf einen anderen Port zu verlegen. Dnn müssen Sie Ihr Backup-Script wie im folgenden Beispiel anpassen. Hier wurde Port 5555 gewählt:

#!/bin/bash
export FTP_PASSWORD=DasFtpPasswort
export PASSPHRASE=IhrGeheimesGpgPasswort
duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" --include /etc --exclude '**' / ftp://username@backupserver:5555/foldername
unset PASSPHRASE
unset FTP_PASSWORD

Wiederherstellen (Restore) eines Backups von einem FTP Server

Auf dem Computer, auf welchem das Backup wiederhergestellt werden soll, muss der passende GPG Schlüssel eingerichtet sein.
Er muss zwingend dem von Ihnen angelegten Schlüssel (sh. oben) entsprechen.

Um die installierten Schlüssel anzuzeigen nutzen Sie folgenden Befehl:

gpg --list-keys

Im Vergleich zum Beispiel für das Backup muss der Schlüssel “84EE3A53” vorhanden sein.

mkdir /var/tmp/restorefolder
export FTP_PASSWORD=DasFtpPasswort
export PASSPHRASE=IhrGeheimesGpgPasswort
duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" ftp://username@backupserver/foldername /var/tmp/restorefolder
unset PASSPHRASE
unset FTP_PASSWORD

Wiederherstellen (Restore) einer einzelnen Datei von einem FTP Server

Um nur eine einzelne Datei wiederherzustellen, nutzen Sie folgenden Befehl:

duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" --file-to-restore home/test/file.txt ftp://username@ftpserver/foldername /var/tmp/file.txt

Wurde die Datei zum Beispiel von einem Tag gelöscht und anschließend wieder ein Backup durchgeführt, dann nutzen Sie die Option “-t 1D”. Dabei steht die Anzahl der Tage vor dem “D”:

duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" -t 1D --file-to-restore home/test/file.txt ftp://username@ftpserver/foldername /var/tmp/file.txt

Wiederherstellen (Restore) eines Ordners von einem FTP Server

Im Kern entspricht der Befehl dem vorherigen Beispiel – nur die Option “–file-to-restore” ist anders:

duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" --file-to-restore home/test/folder ftp://username@ftpserver/foldername /var/tmp/folder

Anzeigen der Dateien und Ordner in einem Backup auf einem FTP Server

duplicity --encrypt-key "84EE3A53" --sign-key "84EE3A53" list-current-files ftp://username@ftpserver/foldername

Es gibt noch einige andere (nützliche) Befehle.
Eine Übersicht erhalten Sie mit dem folgenden Befehl:

duplicity --help

Kostenlose & gute Alternativen
Duplicati
Wir hatten das Programm bereits gefunden und keine OpenSource Hinweise entdeckt. Die Entwickler von “Duplicati” haben uns kurz nach der Veröffentlichung dieses Artikels angeschrieben und einen Link zu den Quellen gegeben:
http://code.google.com/p/duplicati/source/browse/
Wir werden das Programm in den nächsten Tagen für Sie prüfen (Datensicherheit, etc.) und Ihnen dann hier eine kurze Empfehlung geben.

06. Dez 2011
Teaser

Linux: “Dieses Aptitude hat keine Super-Kuh-Kräfte” ?

Wenn Sie unter Linux den Befehl “apt-get –help” eingeben, wird Ihnen die Meldung

Dieses APT hat Super-Kuh-Kräfte.

angezeigt. Das Programm “aptitude hingegen (“aptitude –help”) hat keine:

Dieses Aptitude hat keine Super-Kuh-Kräfte.

Wenn Sie sich fragen, was das soll oder was dort noch so versteckt ist, dann finden Sie mehr Infos in diesem Artikel:

apt-get moo
         (__) 
         (oo) 
   /------\/ 
  / |    ||   
 *  /\---/\ 
    ~~   ~~   
...."Have you mooed today?"...

Oder Sie suchen “Easter-Eggs” (Ostereier = versteckte, meist lustige Programmfunktionen) in den beiden Programmen:

aptitude moo
In diesem Programm gibt es keine Easter Eggs.
aptitude -v moo
In diesem Programm gibt es wirklich keine Easter Eggs.
aptitude -vv moo
Habe ich nicht bereits erklärt, dass es in diesem Programm keine Easter Eggs gibt?
aptitude -vvv moo
Hör auf!
aptitude -vvvv moo
Okay, wenn ich Dir ein Easter Egg gebe, wirst Du dann aufhören?
aptitude -vvvvv moo
Gut, Du hast gewonnen.

                               /----\
                       -------/      \
                      /               \
                     /                |
   -----------------/                  --------\
   ----------------------------------------------

Um herauszufinden, das Ihnen da angezeigt wurde:

aptitude -vvvvvv moo
Was das ist? Natürlich ein Elefant, der von einer Schlange gefressen wurde.

Mehr “v” Parameter bringen nicht mehr zum Vorschein … derzeit.

01. Dez 2011
Teaser

ExtJS: Lösung für Fehlermeldung “this.items.items[0] is undefined”

Die folgende Fehlermeldung tritt in einer ExtJS Anwendung häufig dann auf, wenn in einem Form-Element andere Elemente (wie z.Bsp. ein “Ext.grid.Grid”) eingebaut sind:

this.items.items[0] is undefined

Im folgenden Beispiel finden Sie in der 4. Zeile (“isFormField: true”) die Lösung für das Problem:

  items: [new Ext.grid.GridPanel({
    id: "testGrid",
    autoScroll: true,
    isFormField: true,
    height: 200,
    width: 400,
    columns: [{

Gehen Sie in Ihrem JS (JavaScript) Quellcode in das Nicht-Form-Element und fügen Sie die Zeile dort ein.

Sollten Sie das Element mit dem Formular auf Gültigkeit testen wollen (Validierung), dann benötigen Sie zusätzlich noch die Funktion “isValid” innerhalb des Elementes. Ansonsten erhalten Sie ggf. diese Fehlermeldung:

field.isValid is not a function

Am Beispiel des oberen “Ext.grid.GridPanel” hier der JavaScript Code:

  items: [new Ext.grid.GridPanel({
    id: "testGrid",
    autoScroll: true,
    isFormField: true,
    height: 200,
    width: 400,
    columns: [...],
    isValid: function() {
      // check ...
      return true;
    }

Fügen Sie Ihre Prüfungen in Zeile 9 ein und entscheiden Sie durch Ihre Prüfungen, ob das Element gültig ist oder nicht. Dabei können Sie z.Bsp. abfragen, ob mindestens eine Zeile im Grid ausgewählt wurde:

  isValid: function() {
    return Ext.getCmp("testGrid").selModel.selections.length > 0;
  }