HowTo: Backup von Android Handy auf eigene Server

In meinen Bestrebungen alles auf eigenen Servern zu haben, habe ich nun auch das Backup meines Nexus 5 Smartphones erfolgreich dorthin ausgelagert. Dafuer habe ich auf dem Smartphone die folgenden drei Dinge gemacht:

  1. Rooten des Smartphones. Ich verweise an dieser Stelle einfach auf die Auto-Root Geschichten von chainfire. Die sind einfach und funktionieren. Man sollte ruhig die paar Euros in die Vollversion von SuperSU investieren, damit man die Rootrechte auch nach einem OTA Update behaelt.
  2. Titanium Backup gekauft und installiert. Ich habe einfach die Standard Zeitplaene uebernommen.
  3. FolderSync gekauft und installiert.

Anschliessend habe ich in FolderSync einen neuen SFTP-Account hinzugefuegt. Dabei habe ich Server-Adresse und Port sowie Benutzernamen und Passwort entsprechend eingegeben. Danach habe ich ein neues Ordnerpaar hinzugefuegt. Dafuer habe ich als Account den SFTP-Account ausgewaehlt und als lokalen Ordner /storage/sdcard0/TitaniumBackup. Die Synchronisations-Art ist „Zu Remote-Ordner“, und es ist eine taegliche, planmaessige Synchronisation.

Der SFTP-Account hat auf Serverseite als Shell /usr/lib/sftp-server und ist Mitglied der Gruppe sftp-allow:

chsh -s /usr/lib/sftp-server androidbackup
addgroup sftp-allow
adduser androidbackup sftp-allow

Die Gruppe sftp-allow ist in der /etc/ssh/sshd_config unter AllowGroups aufgefuehrt:

AllowGroups ssh-allow sftp-allow

Fuer Mitglieder der Gruppe sftp-allow ist in der /etc/ssh/sshd_config weiter folgendes konfiguriert:

Subsystem sftp internal-sftp
Match group sftp-allow
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp
  PasswordAuthentication yes

Auf dem Server habe ich noch das unten stehende Skript laufen, dass alte Backups loescht. Dieses habe ich bewusst so gewaehlt, so habe ich auf dem Smartphone immer das letzte komplette Backup, und auf dem Server kann ich aber den kompletten letzten Monat aufbewahren. Das Skript sieht wie folgt aus:

  • /etc/cron.daily/cleanupOldAndroidBackups
#!/bin/bash
 
KEEP_DAYS=30
BACKUPDIR=/home/android/Backups/
 
if [ "$(find ${BACKUPDIR} -type f -mtime +${KEEP_DAYS})" != "" ]; then
        echo "Cleaning up the following Android Backup files:"
        find ${BACKUPDIR} -type f -mtime +${KEEP_DAYS}
fi
 
find ${BACKUPDIR} -type f -mtime +${KEEP_DAYS} -delete

Das ganze hat seinen ersten Praxistest vor ein paar Tagen auch bestanden als ich ausversehen mein Smartphone zurueckgesetzt habe. Ich habe dann Foldersync und Titanium Backup installiert, Synchronisations-Art in Foldersync andersherum eingerichtet (Zu lokalem Ordner) und mit Titanium Backup alles wieder eingespielt. Hat zu meinem eigenen Erstaunen funktioniert!

Snippets: Android flashen etc.

Folgendes habe ich gestern Morgen gelernt:

  1. Android adb und fastboot sind in den Ubuntu Repositories vorhanden
    sudo apt-get install android-tools-adb android-tools-fastboot
  2. In den Fastboot Modus wechselt man wenn das Geraet mit der folgenden Tastenkombination anstellt:
    Power + VolumeUP/VolumeDown
  3. Mit dem folgenden Befehl kann man herausfinden, welche Android Geraete vom PC erkannt werden:
    adb devices
  4. TWRP2 ist ein gutes Recovery Build fuer Android. Es kann auf der offiziellen Projektseite bezogen werden.
  5. Mit dem folgenden Befehl wird das TWRP2 Recovery Image installiert wenn sich das Geraet im Fastboot Modus befindet:
     fastboot flash recovery openrecovery-twrp-2.6.3.4-hammerhead.img
  6. Mit dem folgenden Befehl werden Dateien wie zum Beispiel ein alternatives ROM auf das Geraet kopiert, wenn sich dieses im Recovery Modus befindet:
    adb push cm-11-20131214-NIGHTLY-hammerhead.zip /sdcard/

Mehr Sicherheit fuer die eigenen Daten: Groupware ohne Google

Dieses ist der zehnte Teil einer Serie von Blogeintraegen, die sich als Reaktion auf die NSA Affaere um den Kontext Sicherheit fuer die eigenen Daten und Verschluesselung drehen.

Links zu den ersten neun Artikeln befinden sich am Ende des Blogposts. Im zehnten Teil moechte ich meine Loesung zum Thema Groupware ohne vorstellen.

Wir leben in der Cloud. 24 Stunden vom Tag ist der Router mit dem Internet verbunden. Das Smartphone ist nur noch bei schlechter Netzabdeckung offline und die wird auch immer seltener. Es ist bequem auf dem Smartphone eine Telefonnummer ins Adressbuch hinzuzufuegen, und der Eintrag auf dem DECT Telefon Zuhause aktualisiert sich auch automatisch. Es ist bequem auf dem stationaeren Arbeitsplatz PC eine Emailadresse ins Adressbuch zu uebernehmen und spaeter ist sie auch auf dem Adressbuch des Laptops. Koennen wir uns eine Welt in der die Mails NICHT auf einem Server liegen und gleichermassen von Arbeitsplatz PC, Laptop, Smartphone, Tablet oder Webinterface bei Bekannten abgerufen werden koennen vorstellen? Ich nicht.

Google macht es einem da sehr einfach. Mit Diensten wie GMail, dessen Adressbuch, Google Calendar oder auch Google Drive gibt es fuer alles Loesungen. Sie sind kostenlos und das Erstellen eines Google Kontos dauert gerade mal zwei Minuten. Auf fast allen Geraeten kann man es sehr einfach einbinden. Wenn man ein Android Smartphone oder Tablet besitzt, ist die Integration perfekt!

Ich war auch in der Google Abhaengigkeit und mich davon zu loesen war schwerer als gedacht. Ich werde hier in diesen Blogpost keine Anleitungen schreiben wie alles eingerichtet ist, das ist definitiv zu kompliziert. Wenn jemand das Setup nachbauen moechte kann er mich gerne kontaktieren und ich helfe dabei oder gebe Tipps. Deswegen hier meine Loesung nur grob umrissen.

Grunsaetzlich liegt alles auf einem eigenen Server. Dieser ist voll verschluesselt. Fuer Emailempfang und Versand sowie den Zugriff via IMAP ist Postfix als MTA und Dovecot als MDA installiert. Bei beiden Diensten ist Perfect Forward Secrecy eingerichtet. Bei Dovecot wurde weiter das managesieve Plugin aktiviert. Postfix akzeptiert Verbindungen mit STARTTLS auf Port 25 und 465; letzterer damit man auch aus restriktiven Netzen bei denen Port 25 gesperrt ist wie z.B. be vielen WLANs in Hotels oder Gastnetzen von Universitaeten Emails versenden kann. Dovecot wurde so konfiguriert, dass nur Verbindungen ueber IMAPS auf Port 993 akzeptiert werden.

Als Groupware kommt bei mir Tine20.org zum Einsatz. Installiert habe ich es aus den bereitgestellten Debian Repositories. Apache ist so konfiguriert, dass der vhost auf Port 80 automatisch auf den vhost auf Port 443 weiterleitet. Tine20 wurde mit Postfix und Dovecot Backend eingerichtet. So kann ich die komplette Konfiguration der User und der Virtual Mailboxes aus dem Tine20 Adminmodul machen.

Als MUA auf dem Desktop verwende ich Thunderbird. Fuer Email ist alles mit den Standard Boardmitteln konfiguriert. Kalender, Adressbuch und Aufgaben werden mit Hilfe der Kombination aus Lightning Plugin und SOGo Connector synchronisiert.

Als Mailclient auf dem Smartphone verwende ich Kaiten Mail. Zur Synchronisation von Kalender, Adressbuch und Aufgaben nutze ich die Apps CalDAV-Sync, CardDAV-Sync und Tasks. Die Android eigene Kalenderapplikation habe ich gegen aCalendar getauscht.

Dieses Setup ermoeglicht es mir die Synchronisation meines Google Kontos in den Android Einstellungen komplett zu deaktivieren.

Seit dem neusten Release von Tine20.org – Collin – kann Tine auch als Server fuer OwnCloud Clients fungieren. Das funktioniert prinzipiell auch schon ganz gut, aber gerade auf dem Smartphone gibt es immer nochmal wieder Synchronisierungsprobleme. Ob das nun an der App, Tine20, Android 4.4 oder an meiner Serverkonfiguration liegt habe ich noch nicht herausgefunden.

Vorherige Blogposts:

  • Der erste Teil war fuer mich das Aufraeumen, einen Ueberblick zu bekommen sowie Strukturen zu schaffen, auf denen ich aufbauen kann.
  • Der zweite Teil bestand darin einen Ort zu schaffen, in dem ich Keys und Passwoerter sicher aufbewahren und gleichzeitig alles in ein vernuenftiges Backup schieben kann.
  • Der dritte Teil bezog sich auf das erzeugen von Zertifikaten und Einrichten von verschluesselten Verbindungen zu Apache vHosts.
  • Der vierte Teil drehte sich um das Thema Komfort im Webbrowser und verwies in dem Kontext auf einen Artikel zum selbst gehosteten Firefox Sync Server.
  • Im fuenften Teil habe ich etwas zu meinen Ueberlegungen zu sicheren Zugangsdaten und Passwoertern geschrieben.
  • Im sechsten Teil dreht es sich darum, wie man sich auf seinen Servern mit SSH aber ohne Passwort sicher authentifizieren kann.
  • Der siebte Teil behandelt das Thema Backup und zeigt eine Moeglichkeit wie man selbiges einfach konfiguriert und verschluesselt auf einem externen Speicher ablegen kann.
  • Der achte Teil stellt webbasierte Dienste vor, die man selber hosten kann und dadurch die eigenen Daten unter mehr Kontrolle hat.
  • Der neunten Teil stellt meine Ueberlegungen zu selbstgehosteten Servern und deren Sicherheit im Kontext Verschluesselung der Festplatten vor.

HowTo: Firefox Sync Server from Mozilla self hosted

Ich habe nun schon so einiges ueber einen selbstgehosteten Sync-Service fuer Firefox geschrieben:

  1. Firefox Lesezeichen ueberall – Selfmade!
  2. Howto: Der eigene Weave Minimal Server / Firefox Sync
  3. Update des eigenen Firefox Sync Servers

Nachdem ich seit neustem Besitzer eines Google Nexus 4 bin und gerne Firefox Sync auch unter Android benutzen moechte, war ich gezwungen mein aktuelles Setup zu aktualisieren auf die Originalimplementierung von Mozilla. Vorher wurde mir auf meinem Handy immer von Firefox gesagt, dass diese Version von Sync nicht mehrere Geraete unterstuetzt.

Ich bin auf diese Anleitung gestossen und unter Debian sieht das ganze wie folgt aus:

Installation

Installation von Paketen:

$ aptitude install python-virtualenv sqlite3 mercurial

Einrichten eines Benutzeraccounts:

$ adduser --system --home /opt/ffsync --shell /bin/false --group ffsync

Erstellen der benoetigten Verzeichnisse:

$ su ffsync
$ cd /opt/ffsync
$ mkdir {data,tmp}
$ chmod 775 tmp
$ hg clone https://hg.mozilla.org/services/server-full
$ cd server-full
$ make build

Konfiguration

Editieren und Anpassen der folgenden Konfigurationsdateien:

sync.wsgi

os.environ['PYTHON_EGG_CACHE'] = '/opt/ffsync/tmp/python-eggs'

developement.ini

[handler_syncserver_errors]
args = (‘/opt/ffsync/tmp/sync-error.log’,)

etc/sync.conf

[storage]
sqluri = sqlite:////opt/ffsync/data/sync.db
 
[auth]
sqluri = sqlite:////opt/ffsync/data/sync.db
 
[nodes]
fallback_node = http://sync.example.net/

Ich habe hier nun noch die Rechte fuer den Ordner gesetzt:

$ chown -R ffsync.www-data /opt/ffsync

Apache

Zum Schluss noch Apache einrichten um darueber alles laufen zu lassen. Dafuer:

$ aptitude install libapache2-mod-wsgi

Und einen entsprechenden vhost erstellen:

<VirtualHost *:80>
    ServerName sync.example.net
    ServerAdmin webmaster@example.net
    DocumentRoot /opt/ffsync/server-full
 
    CustomLog /var/log/apache2/ffsync_access.log combined
    ErrorLog /var/log/apache2/ffsync_error.log
 
        Order deny,allow
        Allow from all
 
    WSGIProcessGroup ffsync
    WSGIDaemonProcess ffsync user=ffsync group=ffsync processes=2 threads=25
    WSGIPassAuthorization On
    WSGIScriptAlias / /opt/ffsync/server-full/sync.wsgi
</VirtualHost>

Nach einem Neustart von Apache konnte ich dann das Geraet trennen und anschliessend mich neu mit dem Server verbinden. Achtet auf den Slash am Ende der URL. Es wurde alles automatisch synchronisiert. Auch die Synchronisation mit Firefox auf meinem Android Handy klappte problemlos.

Zum Schluss habe ich noch die Funktion deaktiviert, mit der sich neue Benutzer selbststaendig anmelden koennen. Dafuer in der /opt/ffsync/server-full/etc/sync.conf noch in der auth Sektion die entsprechende Option einkomentieren

[auth]
allow_new_users = false

Danke nochmal an OpenShots an dieser Stelle fuer die Anleitung :-)