Налаштування свого сервера синхронізації Firefox Sync

image

Firefox Sync, це служба, яка дозволяє користувачам повністю переносити свою історію, паролі, закладки, відкриті вкладки і навіть доповнення між різними пристроями, на яких встановлений браузер Firefox, як для десктопної версії, так і для Android.

Firefox Sync реалізується двома сутностями — сервісом авторизації (Firefox account API) і сервером синхронізації (Firefox Sync).

Давно виникла ідея налаштувати свій сервер для синхронізації паролів, закладок та інших радощів життя. За родом діяльності, не дуже довіряю публічних сервісів, таких, як LastPass або Google Account. На мій погляд, приватні дані повинні зберігатися на своєму сервері.

Ну да вистачить лірики, приступимо до налаштування.

Налаштування пропонується для сервера під керуванням ОС Debian.
Є можливість реалізації декількох схем синхронізації:
1. Firefox account API + Firefox Sync Server
2. Firefox account API + свій Sync Server
3. Свій account API + свій Sync Server

Я зупинився на другому варіанті.

Передбачається, що на сервері вже стоїть веб-сервер apache2 і сервер баз даних mysql. Останнє, втім, необов'язково, оскільки я не знайшов способу осудна подружити сервер синхронізації з БД mysql, і використовував sqlite. При використанні mysql коннектор періодично відвалювався від бази даних.

Нехай наш сервер синхронізації буде доступний за адресою sync.domain.com.

Встановимо необхідні пакети:

$ sudo apt-get install python-dev git-core python-virtualenv libapache2-mod-wsgi

Встановлення сервера синхронізації будемо вести в директорію /var/www/

$ cd /var/www/
$ git clone https://github.com/mozilla-services/syncserver
$ cd syncserver
$ make build

Зробимо базова конфігурація сервера:

$ cat syncserver.ini


[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 5000

[app:main]
use = egg:syncserver

[syncserver]
public_url = https://sync.domain.com/

sqluri = sqlite:////var/www/db.sql
secret = your_server_key


your_server_key може бути будь фрази, я її згенерував так:

head /dev/urandom |md5sum

Створимо файл бази даних:

$ touch /var/www/db.sql

Поправимо права на директорію:

$ chown-R www-data:www-data /var/www/
$ chmod 777 /var/www/db.sql


ЗВЕРНІТЬ УВАГУ!
В своїй конфігурації я розташував файл db.sql у каталозі /var/www/, оскільки сервер використовується тільки для синхронізації, і apache не дивиться на цей файл.

У разі, якщо в /var/www у вас дивляться інші виртхосты, помістіть файл з БД куди-небудь в інше місце.

Звертатися до sync-сервера будемо по HTTPS.
Для цього налаштуємо apache.

$ cat /etc/apache2/sites-available/sync.domain.com.conf


<VirtualHost *:80>
ServerName sync.domain.com
Redirect permanent / https://sync.domain.com/
ErrorLog /var/log/apache2/sync/error.log
CustomLog /var/log/apache2/sync/access.log combined
</VirtualHost>
<VirtualHost *:443>
Servername sync.domain.com 
ServerAdmin webmaster@domain.com 
DocumentRoot /var/www/syncserver
WSGIProcessGroup sync.domain.com
WSGIDaemonProcess sync.domain.com user=www-data group=www-data processes=2 threads=25 python-path=/var/www/syncserver/local/lib/python2.7/site-packages
WSGIPassAuthorization On
WSGIScriptAlias / /var/www/syncserver/syncserver.wsgi

ErrorLog /var/log/apache2/sync/error-ssl.log
CustomLog /var/log/apache2/sync/access-ssl.log combined

SSLEngine on
SSLProtocol-ALL +SSLv3 +TLSv1
SSLHonorCipherOrder On
SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
SSLCertificateFile /etc/apache2/ssl/sync.domain.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/sync.domain.com.key
<Directory /var/www/syncserver>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>

Згенеруємо самоподписанные ключі:

$ cd /etc/apache2/ssl/
$ openssl genrsa-des3-out server.key 1024
$ openssl req-new-key server.key-out server.csr
$ cp server.key sync.domain.com.key
$ openssl rsa-in sync.domain.com.key-out server.key
$ openssl x509-req-days 365-in server.csr-signkey server.key-out server.crt
$ cp server.crt sync.domain.com.crt
$ cp server.key sync.domain.com.key

Створимо директорію для логів:
$ mkdir /var/log/apache2/sync/
$ touch /var/log/apache2/sync/error-ssl.log
$ touch /var/log/apache2/sync/access-ssl.log
$ touch /var/log/apache2/sync/error.log
$ touch /var/log/apache2/sync/access.log
$ chown-R www-data:www-data /var/log/apache2/sync/

Активуємо новий виртхост:

$ a2ensite sync.domain.com


І перезапустим apache:

service apache2 restart

Якщо ми все зробили правильно, то при зверненні до
https://sync.domain.com/token/1.0/sync/1.5 
веб-сервер віддасть нам щось на кшталт:

{"status": "error", "errors": [{"location": "body", "name": "", "description": "Unauthorized"}]}

Обов'язково додайте свій сертифікат виключення браузера, інакше синхронізація не запрацює!

Залишилося налаштувати сам браузер.

Заходимо у about:configі змінюємо значення ключа services.sync.tokenServerURI
https://sync.domain.com/token/1.0/sync/1.5

Після цього авторізуємось в Меню -> Налаштування -> Синхронізація, використовуючи аккаунт Mozilla, і користуємося.
До речі, якщо ми відключимося від аккаунта синхронізації, то ключ services.sync.tokenServerURI прийме значення за замовчуванням.

P.S.
На жаль, не вдалося налаштувати синхронізацію з мобільним телефоном на Android, використовуючи fxa-custom-server-addon, якщо у когось вийде — відпишіться, будь ласка, в коментарі.

Всім дякую за увагу.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.