Eigener Firefox Sync Server

Ihr nutzt auf mehreren Geräten wie PC, Handy und Tablet Mozilla Firefox? Mit dem Firefox Sync haltet ihr Lesezeichen, Chronik, Offene Tabs, Add-ons, Zugangsdaten und Einstellungen auf allen Geräten synchron.

Ich zeige euch wie ihr einen eigenen Firefox Sync Server unter Debian 9 mit Apache 2.4 aufsetzen könnt, ohne dabei eure persönlichen Daten bei Mozilla abzulegen.

Punkt 1: Debian 9 vorbereiten

Zuerst installieren wir die nötigen Pakete.

apt-get install python-dev git-core python-virtualenv g++ apache2 libapache2-mod-wsgi make

Punkt 2: Syncserver klonen und bauen

Wir wechseln nach /opt, klonen das Github Repository und bauen den Sync Server.

cd /opt
git clone https://github.com/mozilla-services/syncserver
cd syncserver
make build

Punkt 3: Sync Server Konfiguration

Wir erstellen uns ein Secret.

localhost:/opt/syncserver# head -c 20 /dev/urandom | sha1sum
38ae4684a8eff0664a03806fb93073f0e2635a5c  -

Dieses Secret (in diesem Beispiel: 38ae4684a8eff0664a03806fb93073f0e2635a5c) übernehmen wir in Zeile 32 unserer Konfiguration.

Die public_url passt ihr bitte auf die spätere Ziel-Adresse an, die auch in der Apache2 Konfiguration hinterlegt wird (Zeile 14).

In Zeile 23, sqluri,  legen wir den Ort unserer SQLite Datenbank fest

[server:main]
use = egg:gunicorn
host = 0.0.0.0
port = 5000
workers = 1
timeout = 30

[app:main]
use = egg:syncserver

[syncserver]
# This must be edited to point to the public URL of your server,
# i.e. the URL as seen by Firefox.
public_url = https://sync.adminforge.de/

# By default, syncserver will accept identity assertions issued by
# any BrowserID issuer.  The below restricts it to accept assertions
# from just the production Firefox Account servers.  If you are hosting
# your own account server, put its public URL here instead.
identity_provider = https://accounts.firefox.com/

# This defines the database in which to store all server data.
sqluri = sqlite:////opt/syncserver/syncserver.db

# This is a secret key used for signing authentication tokens.
# It should be long and randomly-generated.
# The following command will give a suitable value on *nix systems:
#
#    head -c 20 /dev/urandom | sha1sum
#
# If not specified then the server will generate a temporary one at startup.
secret = 38ae4684a8eff0664a03806fb93073f0e2635a5c

# Set this to "false" to disable new-user signups on the server.
# Only requests by existing accounts will be honoured.
# allow_new_users = false

# Set this to "true" to work around a mismatch between public_url and
# the application URL as seen by python, which can happen in certain reverse-
# proxy hosting setups.  It will overwrite the WSGI environ dict with the
# details from public_url.  This could have security implications if e.g.
# you tell the app that it's on HTTPS but it's really on HTTP, so it should
# only be used as a last resort and after careful checking of server config.
force_wsgi_environ = false

Punkt 4: Apache 2.4 konfigurieren

Wir erstellen uns einen Firefox Sync Benutzer und setzten die Rechte.

useradd -d /opt/syncserver/ -l -r -U ffsync
chown -R ffsync:ffsync /opt/syncserver/

Bitte passt eure Domain im virtuellen Host entsprechend an.

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName sync.adminforge.de
DocumentRoot /opt/syncserver

        SSLEngine on
        SSLCertificateFile /etc/ssl/private/sync.adminforge.de_ecc/fullchain.cer
        SSLCertificateKeyFile /etc/ssl/private/sync.adminforge.de_ecc/sync.adminforge.de.key
        SSLCertificateChainFile /etc/ssl/private/sync.adminforge.de_ecc/ca.cer

        WSGIProcessGroup ffsync
        WSGIDaemonProcess ffsync user=ffsync group=users processes=2 threads=25 python-path=/opt/syncserver/local/lib/python2.7/site-packages/
        WSGIPassAuthorization On
        WSGIScriptAlias / /opt/syncserver/syncserver.wsgi

        CustomLog /var/log/apache2/access_sync.adminforge.de.log combined
        ErrorLog /var/log/apache2/error_sync.adminforge.de.log
        LogLevel warn
<Directory /opt/syncserver>
        Require all granted
        Options -Indexes
</Directory>
</VirtualHost>
</IfModule>

WICHTIG: Nutzt unbedingt SSL! Ich erkläre in diesem Artikel wie ihr einfach an ein Let’s Encrypt Zertifikat kommt: Let’s Encrypt via acme.sh für Apache und Nginx

Punkt 5: vHost aktivieren und Apache neu starten

a2ensite sync.adminforge.de.conf
systemctl restart apache2.service

Punkt 6: Firefox einrichten

  1. Öffnet Firefox und gebt in der Adressleiste about:config ein, bestätigt den Warnhinweis.
  2. Sucht nach identity.sync.tokenserver.uri. Es sollte ein Eintrag erscheinen.
  3. Ändert mit Doppelklick den Wert auf eure Sync Server-Adresse: https://sync.adminforge.de/token/1.0/sync/1.5
  4. Startet Firefox neu.

Nun könnt ihr im Menü rechts oben auf „Bei Sync anmelden“ klicken, dort dann auf „Anmelden“ und auf „Konto erstellen“ gehen.

Punkt 7: Neue Benutzer verbieten

Nachdem ihr euren Benutzer auf den Firefox Sync Server losgelassen habt, sperren wir weitere Benutzer.

Dazu einfach allow_new_users in der Konfiguration einkommentieren (auf false setzen).

allow_new_users = false

Punkt 8: Updates

Updates führen wir wie folgt durch. Sollte es ein Update gegeben haben muss der Webserver neu gestartet werden.

cd /opt/syncserver
git stash       # to save any local changes to the config file
git pull        # to fetch latest updates from github
git stash pop   # to re-apply any local changes to the config file
make build      # to pull in any updated dependencies

 

PS: Das Konto selbst liegt auf den Mozilla Servern, die Daten auf eurem eigenen! Ich finde das ist der relevante Part.

Viel Spaß beim Syncen!

Dominion

Dominion

Linux Systemadministrator

6 Antworten

  1. Avatar Thomas‎ sagt:

    Super Anleitung, vielen Dank!
    Kann man denn auch die Daten aus seinem Firefox-Account löschen ohne den Account selbst zu löschen?

  2. Bei „Punkt 1: Debian 9 vorbereiten“ fehlt `make` noch.

  3. Avatar Dissi sagt:

    Für alle die das ganze auf nem Plesk System nachbauen. Der Anleitung kann man soweit folgen, natürlich sollte man die Pfade anpassen. Allerdings der vHost (Punkt 4) etwas ab:

    –>

    < IfModule wsgi_module >
    WSGIProcessGroup psaserv
    WSGIDaemonProcess psaserv user=domainuser group=psaserv processes=2 threads=25 python-path=/var/www/vhosts/domain.de/sync.domain.de/local/lib/python2.7/site-packages/
    WSGIPassAuthorization On
    WSGIScriptAlias / /var/www/vhosts/domain.de/sync.domain.de/syncserver.wsgi
    < /IfModule >

    <–

    Das ifModule scheint hier notwendig zu sein. Ohne ging es bei mir nicht.

  4. Avatar Don sagt:

    hier brauchte es noch $ sudo chown ffsync:www-data syncserver.db

    Ubuntu 16.04.4 LTS

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.