So führen Sie ein verteiltes Open Source-Netzwerk mit Diaspora unter CentOS 7 aus

Einführung

Die Diaspora ist ein Open Source verteiltes soziales Netzwerk.

Es unterscheidet sich von den meisten anderen sozialen Netzwerken dadurch, dass es dezentralisiert ist - ein echtes Netzwerk ohne zentrale Basis. Es gibt Server (genannt pods) auf der ganzen Welt, von denen jeder die Daten von Benutzern enthält, die sich dafür entschieden haben, sich bei ihm zu registrieren. Diese Pods kommunizieren nahtlos miteinander, sodass Sie sich bei jedem Pod registrieren und ungehindert mit Ihren Kontakten kommunizieren können, unabhängig davon, wo sie sich im Netzwerk befinden. Weitere Informationen finden Sie auf der about page der Diaspora.

In diesem Tutorial werden wir einen Diaspora-Pod einrichten und konfigurieren. Unter anderem lernen Sie:

  • So richten Sie eine Rails-Anwendung (Diaspora) für die Produktion ein

  • So konfigurieren Sie MariaDB mit Diaspora

  • So richten Sie Nginx als Reverse-Proxy-Server für die Diaspora ein

  • Die Best Practices für eine SSL-Konfiguration für Nginx

  • Schreiben von benutzerdefinierten System-Unit-Dateien zur Verwendung in einer Rails-Anwendung

  • Für Sicherheitsbewusste gibt es einen Bonusabschnitt, in dem erklärt wird, wie SELinux so konfiguriert wird, dass es gut mit der Diaspora zusammenarbeitet

  • Abweichungen von der offiziellen Diaspora-Installationsanleitung *

Die Diaspora-Installationsanleitungen wiki empfehlen die Verwendung von Ruby Version Manager. Während Sie dies tun können, werden wir stattdessen das Systempaket Ruby verwenden. Auf diese Weise vermeiden wir die Installation von Ruby aus dem Quellcode und müssen uns um eine weitere Abhängigkeit wie RVM sorgen.

Die offizielle Anleitung empfiehlt auch die Verwendung von "+ script / server ", einem Skript, das " Unicorn " und " sidekiq +" startet, zwei Apps, die wir für die Diaspora benötigen. Da CentOS 7 systemd verwendet, schreiben wir stattdessen unsere eigenen Init-Dateien für diese Dienste.

Voraussetzungen

Bitte füllen Sie diese Voraussetzungen aus, bevor Sie mit dem Tutorial beginnen.

  • CentOS 7 mit 1 GB RAM + Für eine kleine Community wird mindestens * 1 GB * RAM benötigt, daher wird das Droplet * 1 GB / 1 CPU * verwendet.

  • Sudo-Benutzer + Die meisten der folgenden Befehle benötigen Root-Rechte. Überprüfen Sie die How, um Benutzer hinzuzufügen Anleitung, um Ihren Benutzer hinzuzufügen und zu geben es Sudo-Privilegien. Dieses Benutzerkonto wird zusätzlich zu dem * diaspora * -Benutzerkonto verwendet, das wir später erstellen und unter dem die Dienste der Diaspora mit eingeschränkteren Berechtigungen ausgeführt werden.

  • SSL-Zertifikat + Obwohl die Diaspora ohne SSL-Zertifikat ausgeführt werden kann, erfordert der Mechanismus der Diaspora zum Herstellen einer Verbindung zu anderen Pods ein gültiges SSL-Zertifikat. Für die Produktion sollten Sie ein paid SSL certificate haben. Wir brauchen nur die beiden in diesem Artikel erstellten Zertifikatsdateien (öffentlich, privat), damit Sie den Teil der Webserverkonfiguration dieses Lernprogramms überspringen können. Das machen wir alleine. + Alternativ können Sie zu Testzwecken ein selbstsigniertes Zertifikat generieren. Weitere Informationen finden Sie unter this tutorial oder führen Sie es einfach aus Dieser Befehl aus Ihrem Home-Verzeichnis:

openssl req \
  -newkey rsa:2048 -nodes -keyout ssl.key \
  -x509 -days 365 -out ssl.crt

Schritt 1 - Dienstprogramme installieren

Lassen Sie uns einige Pakete für Dienstprogramme installieren, die später nützlich sein werden:

sudo yum install deltarpm yum-cron vim

Dann aktualisieren Sie unser System:

sudo yum update

Schritt 2 - Aktivieren Sie das EPEL-Repository

EPEL steht für Extra Packages for Enterprise Linux und enthält einige Pakete, die wir installieren müssen und die nicht Teil der Basis-CentOS-Repositorys sind.

Lassen Sie uns dies aktivieren, indem Sie das Paket "+ epel-release" installieren und nach Updates für + Pakete suchen:

sudo yum install epel-release
sudo yum update

Wenn Sie aufgefordert werden, den EPEL 7-GPG-Schlüssel wie unten gezeigt zu importieren, antworten Sie mit Ja:

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <[email protected]>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-5.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
 Is this ok [y/N]:

Schritt 3 - Installieren Sie Pakete für Ruby und C

Die folgenden Pakete werden von Diaspora und ihren Edelsteinen mit nativen C-Erweiterungen benötigt.

Installieren Sie die Pakete:

sudo yum install git ruby ruby-devel libxslt-devel libxml2-devel gcc gcc-c++ automake net-tools libcurl-devel libffi-devel make redis nodejs ImageMagick-devel

Redis ist ein Open-Source-Schlüsselwertdatenspeicher, den die Diaspora als Datenbank verwendet. Nachdem Redis installiert ist, konfigurieren wir es so, dass es beim Booten aktiviert wird, und starten den Dienst:

sudo systemctl enable redis
sudo systemctl start redis

Schritt 4 - Fügen Sie einen dedizierten Diaspora-Benutzer hinzu

Erstellen Sie ein Benutzerkonto, um Diaspora auszuführen. Sie können dieses Konto beliebig benennen, in diesem Lernprogramm wird jedoch davon ausgegangen, dass dieser Benutzer * diaspora * heißt.

sudo useradd diaspora

Schritt 5 - Konfigurieren Sie die Firewall

Das Konfigurieren und Verschärfen der Firewall ist beim Einrichten einer Produktionsumgebung von großer Bedeutung. Das Tool, das wir verwenden werden, ist "+ firewalld ", was die Dinge im Vergleich zu reinen " iptables +" - Befehlen vereinfacht.

Starten Sie zuerst den Dienst + firewalld + und aktivieren Sie ihn, um beim Booten zu starten:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Jetzt erlauben wir "+ ssh " an Port " 22 ", " http" an Port "+ 80 ", " https" an Port "+ 443 " und " smtp" an Port "+25 + `. Fügen Sie als sudo-Benutzer die folgenden Dienste hinzu:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=smtp

Laden Sie die Firewall-Regeln neu:

sudo firewall-cmd --reload

Weitere Informationen zur Verwendung von "+ firewalld +" finden Sie unter Additional Recommended Steps for New CentOS 7 Servers Lernprogramm.

Schritt 6 - MariaDB installieren und sichern

Der nächste große Schritt ist die Einrichtung einer Datenbank für die Diaspora. In diesem Tutorial werden wir MariaDB verwenden, obwohl wir im gesamten Tutorial ein paar Kleinigkeiten für PostgreSQL enthalten werden.

Installieren Sie die erforderlichen Pakete:

sudo yum install mariadb-server mariadb-devel

Stellen Sie sicher, dass MariaDB beim Booten gestartet und aktiviert ist:

sudo systemctl start mariadb
sudo systemctl enable mariadb

Sichern Sie die MariaDB-Installation, indem Sie den folgenden Befehl ausführen:

sudo mysql_secure_installation

Beantworten Sie die folgenden Fragen im Text und fügen Sie ein sicheres Root-Passwort hinzu, wenn Sie dazu aufgefordert werden:

Enter current password for root (enter for none):
Set root password? [Y/n]
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]

Schritt 7 - Diaspora-Benutzer und -Datenbank erstellen

Als nächstes melden wir uns bei MariaDB an, um den Benutzer * diaspora * zu erstellen. Wenn Sie dazu aufgefordert werden, geben Sie das oben erstellte Passwort * root * ein:

mysql -u root -p

Erstellen Sie einen Benutzer für die Diaspora. Ändern Sie "+" im folgenden Befehl in ein echtes Passwort. Dies sollte nicht mit dem * root * -Passwort identisch sein, das Sie während der ` mysql_secure_installation +` angegeben haben.

CREATE USER 'diaspora'@'localhost' IDENTIFIED BY '';

Erstellen Sie die Diaspora-Produktionsdatenbank:

CREATE DATABASE IF NOT EXISTS `diaspora_production` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_bin`;

Gewähren Sie dem Benutzer MariaDB * diaspora * die erforderlichen Berechtigungen für die Datenbank:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `diaspora_production`.* TO 'diaspora'@'localhost';

Beenden Sie die Datenbanksitzung.

\q

Versuchen Sie, mit dem Benutzer * diaspora * eine Verbindung zu der neuen Datenbank herzustellen (verwenden Sie das Kennwort, das Sie oben für + IDENTIFIED BY '' + eingegeben haben).

mysql -u diaspora -p -D diaspora_production

Sie sollten jetzt die Eingabeaufforderung sehen: + MariaDB [diaspora_production]> +. Beenden Sie die Datenbanksitzung +, indem Sie Folgendes eingeben:

\q

Jetzt ist die Installation der MariaDB-Datenbank abgeschlossen.

Weitere Informationen zur Sicherheit finden Sie im ausführlichen Artikel unter How To Secure MySQL und MariaDB-Datenbanken.

Als Nächstes greifen wir auf den Diaspora-Quellcode zu und konfigurieren ihn für die Ausführung auf Ihrem VPS.

Schritt 8 - Bundler installieren

Bundler ist der Paketmanager für Ruby-Edelsteine. Wir werden es installieren, um es global verfügbar zu machen.

sudo gem install bundler

Da die ausführbare Datei "+ bundle " in " / usr / local / bin / bundle " installiert ist, erstellen Sie eine symbolische Verknüpfung, um sie in " PATH +" des Benutzers aufzunehmen.

sudo ln -sf /usr/local/bin/bundle /usr/bin/bundle

Schritt 9 - Holen Sie sich den Diaspora-Quellcode

Diaspora wird in drei Hauptzweigen entwickelt. + stable + enthält Code, der als stabil gilt und veröffentlicht werden soll, + master + hat die Versionen mit stabilen Tags, die wir verwenden werden, während + develop + den neuesten Code mit möglichen Fehlern enthält.

Wechseln Sie in das Benutzerkonto * diaspora *.

sudo su - diaspora

Überprüfen Sie den Master-Zweig. Zum Zeitpunkt dieses Schreibens enthält es die Diaspora-Version "+ 0.5.1.1 +".

git clone -b master https://github.com/diaspora/diaspora.git

Schritt 10 - Konfigurieren Sie die Diaspora-Datenbank

Wechseln Sie nun in das Arbeitsverzeichnis.

cd ~/diaspora/

Kopieren Sie die Beispiel-Datenbankkonfigurationsdatei und öffnen Sie + database.yml + mit Ihrem bevorzugten Editor.

cp config/database.yml.example config/database.yml
vim config/database.yml

Jetzt bearbeiten wir die Konfigurationsdatei so, dass sie mit den zuvor erstellten Datenbankeinstellungen übereinstimmt.

Bearbeiten Sie die allerersten Zeilen, in denen der Adapter "+ mysql2 " definiert ist. (MariaDB ist ein Drop-In-Ersatz für MySQL.) Ersetzen Sie * root * durch * diaspora * und ändern Sie das `+` in das Passwort für den zuvor erstellten Datenbankbenutzer * diaspora *. Entfernen Sie nicht die Anführungszeichen. Wenn Sie fertig sind, speichern und schließen Sie die Datei.

mysql: &mysql
 adapter: mysql2
 host: "localhost"
 port: 3306
 username: ""
 password: ""
 encoding: utf8mb4
 collation: utf8mb4_bin

Schritt 11 - Konfigurieren Sie die Grundeinstellungen der Diaspora

Beginnen wir mit dem Kopieren der Beispielkonfigurationsdatei.

cp config/diaspora.yml.example config/diaspora.yml

Sie müssen einige Einstellungen in dieser Datei bearbeiten, damit die Diaspora ordnungsgemäß funktioniert. Lesen Sie die gesamte Datei sorgfältig durch, um zu verstehen, was und wie sie funktioniert. Es ist ziemlich selbsterklärend, aber schauen wir uns einige der wichtigsten Einstellungen an.

Öffnen Sie die Datei in einem Texteditor.

vim config/diaspora.yml

Zeile 39 - Kommentieren Sie die Zeile "+ url +" aus, damit sie wie folgt aussieht:

url: ""

Ersetzen Sie ++ durch Ihren eigenen Domainnamen. Die URL, die Sie hier verwenden, wird in der Datenbank fest codiert. Stellen Sie daher sicher, dass sie korrekt ist. * Lesen Sie die Kommentare über dieser Konfigurationszeile für Details *.

Zeile 47 - Kommentieren Sie die Zeile "+ certificate_authorities +" aus, damit sie wie folgt aussieht:

certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt'

Zeile 166 - Kommentieren Sie die Zeile "+ rails_environment " aus und ersetzen Sie " development " durch " production", so dass es wie folgt aussieht:

rails_environment: ''

Speichern und schließen Sie die Datei.

Dies sind die minimalen Änderungen, die erforderlich sind, um eine funktionierende Diaspora-Kapsel zu haben. Es gibt viele weitere Optionen, die Sie erkunden und nach Ihren Wünschen konfigurieren können, beispielsweise die Verbindung mit anderen sozialen Netzwerken (Twitter, WordPress, Tumblr, Facebook). Bitte lesen Sie die Datei durch und nehmen Sie die gewünschten Konfigurationsänderungen vor.

Schritt 12 - Installieren Sie Gems und richten Sie die Datenbank ein

Installieren Sie die benötigten Gems, richten Sie die Datenbank ein und kompilieren Sie die Assets vor.

Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden:

cd /home/diaspora/diaspora/

Zuerst weisen wir das nokogiri-Juwel an, die zuvor installierte libxm2-Systembibliothek zu verwenden:

bundle config build.nokogiri --use-system-libraries

Verwenden Sie als Nächstes den Bundler, um die benötigten Edelsteine ​​zu installieren:

RAILS_ENV=production bin/bundle install --without test development --deployment

Richten Sie die Datenbank ein:

RAILS_ENV=production bin/rake db:create db:schema:load

Assets vorkompilieren:

RAILS_ENV=production bin/rake assets:precompile

Zu diesem Zeitpunkt können Sie das Benutzerkonto * diaspora * verlassen und zu dem Sudo-Benutzer zurückkehren, den Sie erstellt haben, als Sie die Voraussetzungen für dieses Lernprogramm befolgt haben.

exit

Schritt 13 - Konfigurieren Sie die Diaspora systemd Services

Die Diaspora besteht aus zwei Hauptdiensten, die ausgeführt werden müssen:

  • Einhorn, der Anwendungsserver

  • sidekiq für die Verarbeitung von Hintergrundjobs

Für diesen Fall wird ein Skript bereitgestellt, das sich in "+ script / server +" befindet. Wir verwenden jedoch stattdessen "systemd". systemd ist das in CentOS 7 verwendete Init-System.

Lesen Sie zum besseren Verständnis der Funktionsweise von systemd die folgenden Artikel:

Erstellen Sie das Verzeichnis tmpfiles

Erstellen Sie das Verzeichnis, in dem sich der Unix-Socket "+ Unicorn +" befindet.

sudo mkdir /run/diaspora

Ändern Sie den Besitzer des Benutzers * diaspora * und legen Sie die Berechtigungen fest.

sudo chown diaspora:diaspora /run/diaspora
sudo chmod 750 /run/diaspora

Da die Verzeichnisse "+ / run " und " / var / run " flüchtig sind, überlebt das soeben erstellte Verzeichnis " / run / diaspora +" einen Systemneustart nicht. Mit systemd können wir tmpfiles verwenden, um dieses Verzeichnis zwischen Neustarts beizubehalten.

Öffnen Sie + / etc / tmpfiles.d / diaspora.conf + zum Bearbeiten.

sudo vim /etc/tmpfiles.d/diaspora.conf

Füge folgende Zeile ein:

/etc/tmpfiles.d/diaspora.conf

d /run/diaspora 0750 diaspora diaspora - -

Das Konfigurationsformat ist eine Zeile pro Pfad, die Felder für Typ, Pfad, Modus, Eigentümer, Alter und Argument enthält. Weitere Informationen zu "+ tmpfiles.d +" finden Sie unter official web page oder in der zugehörigen Manpage.

Einhorn

Zuerst bearbeiten wir + diaspora.yml + so, dass der Dienst einen Unix-Socket abhört. Wir werden dafür auf den diaspora-Benutzer zurückgreifen.

sudo su - diaspora

Öffnen Sie die Konfigurationsdatei zum Bearbeiten:

vim /home/diaspora/diaspora/config/diaspora.yml

Kommentarzeile 157 mit folgendem Wortlaut:

/home/diaspora/diaspora/config/diaspora.yml

listen: 'unix:/run/diaspora/diaspora.sock'

Speichern und schließen Sie die Datei.

Kehren Sie nun zu Ihrem sudo-Benutzer zurück.

su -

Erstellen Sie die Datei "+ unicorn.service +".

sudo vim /etc/systemd/system/diaspora-unicorn.service

Fügen Sie den folgenden Inhalt genau ein, um das Skript zu erstellen. Denken Sie daran, die früheren Links zu systemd zu überprüfen, wenn Sie Hilfe benötigen, um zu verstehen, was in dieser Datei enthalten ist:

/etc/systemd/system/diaspora-unicorn.service

[Unit]
Description=Diaspora Unicorn Server
Requires=redis.service
After=redis.service network.target

[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-unicorn
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres

PIDFile=/run/diaspora/unicorn.pid
Restart=always

CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true
NoNewPrivileges=true

ExecStart=/usr/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"

[Install]
WantedBy=multi-user.target

Starten Sie den Unicorn-Dienst und aktivieren Sie ihn beim Booten.

sudo systemctl start diaspora-unicorn
sudo systemctl enable diaspora-unicorn

Überprüfen Sie nun den Servicestatus:

systemctl status diaspora-unicorn

Wenn alles geklappt hat, sollte dieser Befehl eine Ausgabe ähnlich der folgenden zurückgeben:

diaspora-unicorn.service - Diaspora Unicorn Server
Loaded: loaded (/etc/systemd/system/diaspora-unicorn.service; enabled)
Active: active (running) since Tue 2015-06-23 10:18:25 EDT; 16s ago
Main PID: 16658 (ruby)
CGroup: /system.slice/diaspora-unicorn.service
└─16658 ruby /home/diaspora/diaspora/vendor/bundle/ruby/bin/unicorn_rails -c config/unicorn.rb -E production

Sidekiq

Erstellen wir ebenfalls mit "+ sidekiq " die Datei " sidekiq.service +".

sudo vim /etc/systemd/system/diaspora-sidekiq.service

Fügen Sie Folgendes ein:

/etc/systemd/system/diaspora-sidekiq.service

[Unit]
Description=Diaspora Sidekiq Worker
Requires=redis.service
After=redis.service network.target

[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-sidekiq
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres

Restart=always

CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true

ExecStart=/usr/bin/bundle exec "sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1"

[Install]
WantedBy=multi-user.target

Starten Sie den sidekiq-Dienst und aktivieren Sie ihn beim Booten:

sudo systemctl start diaspora-sidekiq
sudo systemctl enable diaspora-sidekiq

Führen Sie nun Folgendes aus:

systemctl status diaspora-sidekiq

Die Ausgabe sollte ungefähr so ​​aussehen:

diaspora-sidekiq.service - Diaspora Sidekiq Worker
  Loaded: loaded (/etc/systemd/system/diaspora-sidekiq.service; enabled)
  Active: active (running) since Mon 2014-12-29 08:21:45 UTC; 44s ago
Main PID: 18123 (sh)
  CGroup: /system.slice/diaspora-sidekiq.service
          ├─18123 sh -c sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1
          └─18125 sidekiq 2.17.7 diaspora [0 of 5 busy]

Schritt 14 - Installieren Sie Nginx

Nginx wird als Reverse-Proxy fungieren, sodass nahezu alle Anfragen an Unicorn gesendet werden. Nur die Dateien in + public / + werden direkt von Nginx bereitgestellt.

Lassen Sie uns zuerst den Webserver installieren.

sudo yum install nginx

Starten Sie den Dienst und aktivieren Sie ihn beim Booten:

sudo systemctl start nginx
sudo systemctl enable nginx

Schritt 15 - Nginx-Berechtigungen erteilen

Damit Nginx auf den Benutzerordner * diaspora * zugreifen kann, müssen wir den Benutzer * nginx * zur Gruppe * diaspora * hinzufügen:

sudo usermod -a -G diaspora nginx

Schließlich werden wir die Zugriffsrechte des Benutzers * diaspora * für das Basisverzeichnis lockern, um den Lese- und Ausführungszugriff auf die Diaspora-Gruppe zu ermöglichen:

sudo chmod 750 /home/diaspora/

Schritt 16 - SSL-Zertifikat hochladen und Weiterleitungsgeheimnis aktivieren

Sie benötigen jetzt die SSL-Zertifikatdateien von Ihrer Zertifizierungsstelle. Im folgenden Konfigurationsbeispiel verwenden wir "+ / etc / ssl / diaspora / ssl.crt " für das öffentliche Zertifikat und " / etc / ssl / diaspora / ssl.key +" für den privaten Schlüssel.

Erstellen Sie ein Verzeichnis zum Speichern der Zertifikatdateien.

sudo mkdir /etc/ssl/diaspora

Laden Sie die Zertifikats- und Schlüsseldateien auf den Server hoch, oder verschieben Sie sie, und platzieren Sie sie im soeben erstellten Verzeichnis +. Hierzu kann SFTP oder SCP verwendet werden. Siehe this tutorial.

Das Vorwärtsgeheimnis ist zu einem wesentlichen Bestandteil der SSL / TLS-verschlüsselten Kommunikation geworden. Eine detailliertere Erklärung der Forward-Geheimhaltung finden Sie in diesem Mozilla-Server-Sicherheits-Wiki-Eintrag.

Wechseln Sie erneut zum Benutzer * root * des Systems.

sudo su -

Erstellen Sie die Datei + dhparam.pem +.

openssl dhparam 2048 > /etc/ssl/dhparam.pem

Die Fertigstellung der dhparam-Datei kann einige Minuten dauern. Wenn dies abgeschlossen ist, melden Sie sich erneut bei Ihrem sudo-Benutzerkonto an.

su -

Schritt 17 - Deaktivieren Sie die Standard-Site in nginx.conf

Wir werden nun "+ / etc / nginx / nginx.conf +" ändern, damit die Standardnachricht "Willkommen bei Nginx" nicht die von uns erstellte Diaspora-Konfigurationsdatei beeinträchtigt.

sudo vim /etc/nginx/nginx.conf

Suchen Sie im Block "+ server " nach den Zeilen, die " default_server; " enthalten. Entfernen Sie ` default_server +` aus diesen Einträgen, so dass der Bereich des Serverblocks folgendermaßen aussieht:

/etc/nginx/nginx.conf

server {


server_name localhost;
root /usr/share/nginx/html;

Schritt 18 - Erstellen Sie die eigene Nginx-Konfigurationsdatei der Diaspora

Erstellen Sie eine neue Nginx-Konfigurationsdatei für unseren Diaspora-Pod:

sudo vim /etc/nginx/conf.d/diaspora.conf

Fügen Sie den folgenden Inhalt ein; Erklärungen finden Sie direkt unter dem Code:

/etc/nginx/conf.d/diaspora.conf

upstream diaspora {
 server unix:/run/diaspora/diaspora.sock fail_timeout=0;
}
server {
 listen [::]:80;
 listen 80;
 server_name _;
 return 301 https://$request_uri;
}
server {
 listen [::]:443 ssl spdy;
 listen 443 ssl spdy;
 server_name ;
 root /home/diaspora/diaspora/public;
 server_tokens off;
 error_log /var/log/nginx/diaspora_error.log;

 # Configure maximum picture size
 # Note that Diaspora has a client side check set at 4M
 client_max_body_size 4M;

 ## SSL settings
 ssl_certificate ;
 ssl_certificate_key ;

 # https://wiki.mozilla.org/Security/Server_Side_TLS
 ssl_dhparam /etc/ssl/dhparam.pem;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
 ssl_session_timeout 5m;
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:50m;
 add_header Strict-Transport-Security "max-age=31536000";

 location / {
   # Proxy if requested file not found
   try_files $uri $uri/index.html $uri.html @diaspora;
 }

 location @diaspora {
   gzip off;
   proxy_set_header  X-Forwarded-Ssl   on;
   proxy_set_header  X-Real-IP         $remote_addr;
   proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
   proxy_set_header  X-Forwarded-Proto https;
   proxy_set_header  Host              $http_host;
   proxy_set_header  X-Frame-Options   SAMEORIGIN;
   proxy_redirect                      off;
   proxy_pass http://diaspora;
 }
}

Ersetzen Sie die folgenden Variablen:

  • ++ mit Ihrem eigenen registrierten Domainnamen; Sie müssen dies an zwei Stellen tun

  • ++ mit dem Pfad zu Ihrem eigenen öffentlichen Zertifikat

  • ++ mit dem Pfad zu Ihrem eigenen privaten Schlüssel

Erläuterung:

  • Im + upstream + - Block stellen wir den Unix-Socket ein, den Diaspora abhört (den wir auch zuvor in Unicorn eingestellt haben). Dies wird später als "+ proxy_pass +" - Direktive verwendet.

  • Der erste "+ Server" -Block lauscht dem Standard-HTTP-Port "+ 80" und leitet alle Anfragen an HTTPS um.

  • Der zweite "+ server " -Block lauscht dem Port " 443 +" (SSL) und legt einige starke SSL-Parameter fest, die aus dem Mozilla-Wiki stammen.

Weitere Informationen zu Nginx-Serverblöcken im Allgemeinen finden Sie unter this tutorial.

Überprüfen Sie nach Abschluss aller Änderungen die Konfigurationsdatei auf Fehler.

sudo nginx -t

Wenn alles gut gegangen ist, sollte dies zurückkehren:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starten Sie Nginx neu, um die Änderungen zu übernehmen.

sudo systemctl restart nginx

Wenn Sie jetzt den Domain-Namen Ihres Diaspora-Pods in Ihrem Browser aufrufen (z. B. "+ https: // example.com +"), sollten Sie die Willkommensseite von Diaspora aufrufen. Herzliche Glückwünsche!

Schritt 19 - Diaspora-Benutzer erstellen

Lassen Sie uns Ihren ersten Diaspora-Benutzer erstellen. Klicken Sie auf den Link in * Beginnen Sie mit der Erstellung eines Kontos. *

Füllen Sie die Details aus, um einen neuen Diaspora-Benutzer zu erstellen. Anschließend sollten Sie die Startseite Ihres Benutzers anzeigen und das soziale Netzwerk der Diaspora nutzen können.

Schritt 20 - SELinux konfigurieren (optional)

_ * Warnung: * Wenn Sie nicht mit SELinux vertraut sind, beachten Sie bitte, dass * dies zu Problemen führen kann *. Sie können diesen Abschnitt überspringen und Diaspora verwenden. _

In CentOS 7 Droplets ist SELinux standardmäßig deaktiviert. Für maximale Sicherheit können Sie SELinux aktivieren und so konfigurieren, dass es mit den Diensten Ihres Diaspora-Pods zusammenarbeitet. Wenn Sie SELinux noch nicht kennen, finden Sie hier eine Reihe von Tutorials, in denen Sie weitere Informationen finden:

Aktivieren Sie SELinux

Öffnen Sie "+ / etc / selinux / config +" in einem Texteditor.

sudo vim /etc/selinux/config

Ändern Sie die Einstellung von "+ SELINUX " von " disabled " in "+" (siehe unten). Es ist erforderlich, zuerst einen zulässigen Status festzulegen, da jeder Datei im System ein Kontext zugewiesen werden muss, bevor SELinux erzwungen werden kann.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Speichern und schließen Sie die Datei.

Nachdem Sie diese Änderung vorgenommen haben, starten Sie das Droplet neu, damit die Einstellung wirksam wird. Einfach eintippen:

sudo reboot

Geben Sie das Passwort Ihres sudo-Benutzers ein, um das System neu zu starten. Dann kehren Sie mit SSH in das Droplet zurück und wechseln wieder in das Konto Ihres sudo-Benutzers mit:

su -

Bearbeiten Sie nun + / etc / selinux / config + noch einmal und setzen Sie die Einstellung + SELINUX + auf ++.

sudo vim /etc/selinux/config

Wenn Sie fertig sind, sollte in der Zeile Folgendes stehen:

SELINUX=

Speichern und schließen Sie die Datei. * Starte das Droplet noch einmal neu. *

sudo reboot

Dann kehren Sie mit SSH zu Ihrem Droplet zurück, nachdem es wieder online ist.

SELinux Nginx Policy

Von hier aus möchten Sie als Benutzer "+ root" bleiben. Wenn Sie jetzt Ihre Domain besuchen, wird ein * 502 * -Fehler angezeigt. In unserem Fall blockiert SELinux den Socket von Nginx und den Zugriff auf das Home-Verzeichnis des Benutzers * diaspora *.

Sie können die Überwachungsprotokolle überprüfen mit:

grep denied /var/log/audit/audit.log

Sie sollten Nachrichten wie die folgenden sehen:

type=AVC msg=audit(1424394514.632:385): avc:  denied  { search } for  pid=1114 comm="nginx" name="diaspora" dev="vda1" ino=783369 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_dir_t:s0 tclass=dir
type=AVC msg=audit(1424394514.632:386): avc:  denied  { write } for  pid=1114 comm="nginx" name="diaspora.sock" dev="tmpfs" ino=21382 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_run_t:s0 tclass=sock_file

Installieren Sie die folgenden Tools, um das Problem zu beheben:

yum install policycoreutils-{python,devel} setroubleshoot-server

Wir durchsuchen die Datei "+ audit.log +" und lassen die Denied-Einträge in unserer SELinx-Richtlinie zu. Run:

grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora

Die generierte SELinux-Richtlinie wird in der Datei "+ nginx_diaspora.te " im " / home " -Verzeichnis Ihres Stammverzeichnisses gespeichert (Sie können Ihre SELinux-Richtlinien jedoch an jedem Ort organisieren). Die Binärdatei " nginx_diaspora.pp " sollte an den Befehl " semodule " übergeben werden, um die Richtlinie zu importieren. Öffnen Sie " nginx_diaspora.te +", um zu sehen, was SELinux jetzt erlaubt.

vim nginx_diaspora.te

Es sollte die folgenden Einträge enthalten. Wenn nicht, ersetzen Sie den Inhalt von "+ nginx_diaspora.te +" durch den folgenden.

module nginx_diaspora 1.0;

require {
       type var_run_t;
       type httpd_t;
       type user_home_t;
       type init_t;
       class sock_file write;
       class unix_stream_socket connectto;
       class file { read open };
}


#============= httpd_t ==============
allow httpd_t init_t:unix_stream_socket connectto;

#!!!! This avc can be allowed using the boolean 'httpd_read_user_content'
allow httpd_t user_home_t:file { read open };
allow httpd_t var_run_t:sock_file write;

Viele der erlaubten Kontexte könnten wahrscheinlich eingegrenzt werden, aber dies ist ein geeigneter Ausgangspunkt. Dann importieren wir das Richtlinienmodul.

semodule -i nginx_diaspora.pp

Wenn Sie jetzt die Seite in Ihrem Browser aktualisieren, sollte die Willkommensseite der Diaspora erneut angezeigt werden. Herzlichen Glückwunsch zum Konfigurieren eines SELinux-gehärteten Diaspora-Pods unter CentOS 7!

Kurze SELinux-Fehlerbehebung

Gehen Sie folgendermaßen vor, wenn die Begrüßungsseite geladen wird, jedoch fehlerhafte Bildplatzhalter und keine tatsächlichen Bilder enthält:

  1. Führen Sie den folgenden Befehl zu "+ grep " bis " audit.log +" aus und fügen Sie der Nginx-Richtlinie neue Denied-Einträge hinzu.

grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
  1. Laden Sie das Richtlinienmodul neu.

semodule -i nginx_diaspora.pp

Sie können diese Schritte einige Male wiederholen.

tail -f /var/log/messages

Hier ist ein Beispiel:

. . .

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that nginx should be allowed write access on the  sock_file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep nginx /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

. . .

Fazit

Nachdem Sie Ihren Diaspora-Pod eingerichtet haben, können Sie Ihre Freunde und Familie einladen, sich mit ihm zu verbinden. Es fehlen zwar einige Funktionen in den großen kommerziellen, geschlossenen sozialen Netzwerken, aber einer der Vorteile der Diaspora besteht darin, dass Sie Ihre Daten besitzen.

Hier können Sie das Diaspora-Wiki für pod maintainers lesen und Ihren Pod in einer globalen Pod-Liste registrieren, damit andere von Ihrer Installation profitieren können.