Dies ist eine alte Version des Dokuments!
Nextcloud unter CentOS 7.x installieren und betreiben
Mit Hilfe von Nextcloud kann man einen sicheren Datenraum z.B. auf eigenen Servern für seine Nutzer bereitstellen, so dass diese ihre vertraulichen Daten nicht bei einem der diversen Cloud-Dienste nutzen müssen.
Nextcloud wurde vom Owncloud-Gründer Frank Karlitschek zusammen mit ehemaligen Owncloud-Developern als fork der aktuellen Owncloud-Version 9 ins Leben gerufen. Im Gegensatz zum ursprünglichen Projekt Owncloud soll die Weiterentwicklung des forks alle Funktionen des bisherigen Projekts beinhalten, inklusive der kostenpflichtigen Enterprise-Features von Owncloud.
Dokumentation
Eine ausführliche Dokumentation findet sich in der Nextcloud Server Administration Manual Release 13.
vorbereitende Konfiguration
SQL-Datenbank MariaDB
Bei unserer Nextcloud-Installation wollen wir als Datenbank unsere MariaDB verwenden. Eine ausführliche Installation und Konfigurationsbeschreibung ist hier zu finden.
Als erstes legen wir uns eine Datenbank nextcloud_db an. Anschließend legen wir uns eine zugehörigen Datenbanknutzer an und weisen ihm die erforderlichen Rechte zu.
# mysql -h localhost -u root -p
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 73466 Server version: 5.5.47-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database nextcloud_db; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE USER 'nextcloud_user'@'10.0.0.97' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\'; Query OK, 0 rows affected (0.18 sec) MariaDB [(none)]> CREATE USER 'nextcloud_user'@'vml000097.dmz.nausch.org' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud_user'@'10.0.0.97' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud_user'@'vml000097.dmz.nausch.org' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.05 sec) MariaDB [(none)]> exit Bye
Download
Bevor wir uns das aktuelle Programmpaket von nextcloud herunterladen, wechseln wir in unser lokales Paketverzeichnis.
# cd /usr/local/src/packages/
Anschliessend holen wir uns das aktuelle tar.bz2-Archiv und dessen zugehörige sha512 Prüfsumme auf unseren Server.
# wget https://download.nextcloud.com/server/releases/nextcloud-13.0.4.tar.bz2 # wget https://download.nextcloud.com/server/releases/nextcloud-13.0.4.tar.bz2.sha512
Vom heruntergeladenen Archiv nextcloud-13.0.4.tar.bz2 generieren wir einen eigenen Hash-Wert und legen diesen in einer lokalen Datei ab.
# sha512sum nextcloud-13.0.4.tar.bz2 > nextcloud-13.0.4.tar.bz2.sha512.local
Nun können wir die beiden Hash-Werte vergleichen und somit prüfen, ob dem Archiv soweit vertraut werden kann.
# diff nextcloud-13.0.4.tar.bz2.sha512.local nextcloud-13.0.4.tar.bz2.sha512
Sind beide Werte identisch, erfolgt keine Ausgabe - wir können also mit der Installation und Konfiguration fortschreiten.
Entpacken
Nun entpacken wir das heruntergeladene tar.bz2-Archiv an Ort und Stelle.
# tar -jxpvf nextcloud-13.0.4.tar.bz2 -C /srv/www/html/
Berechtigungen anpassen
Anschliessend passen wir die Berechtigungen des Verzeichnisses /srv/www/html/nextcloud an, so dass unser Apache-User unter dem der HTTP-Daemon läuft darauf zugreifen kann.
# chown -R apache:apache /srv/www/html/nextcloud
Apache vHost
Als Webserver nutzen wir unseren Apache-Webserver 2.4, dessen Installation und Konfiguration ist in diesem Kapitel beschrieben. Zur Absicherung des Web-Traffic kommt selbstredend TLS zum Einsatz. Die Installation und Konfiguration hierzu findet sich im Kapitel SSL gesicherter Webserver mit mod_ssl für Apache httpd 2.4 unter CentOS 7.x.
Für unseren virtuellen Host legen wir uns nun noch eine passende Konfigurationsdatei an:
# cat /etc/httpd/conf.d/nextcloud.conf
- /etc/httpd/conf.d/nextcloud.conf
# # Django : 2016-07-29 # vHost cloud.nausch.org (nextcloud) # <VirtualHost 10.0.0.97:80> ServerAdmin webmaster@nausch.org ServerName cloud.nausch.org RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} # Welche Logdateien sollen beschrieben werden SetEnvIf Remote_Addr "10\.0\.0\.20" dontlog CustomLog logs/nextcloud_access.log combined ErrorLog logs/nextcloud_error.log </VirtualHost> <VirtualHost 10.0.0.97:443> ServerAdmin webmaster@nausch.org ServerName cloud.nausch.org ServerPath / # URL Vereinfachung RedirectMatch ^/*$ https://cloud.nausch.org/nextcloud/ # Wer soll Zugriff auf die Webseite(n) bekommen? <Location /> Options -Indexes +FollowSymLinks Require all granted </Location> # Welcher Inhalt soll angezeigt bzw. auf welchen Server sollen die HTTP-Requests weitergeleitet werden? <Directory "/srv/www/html/nextcloud"> Options FollowSymLinks AllowOverride none Require all granted </Directory> <LocationMatch "/(data|config)/"> Require all denied </LocationMatch> # Welche Logdateien sollen beschrieben werden SetEnvIf Remote_Addr "10\.0\.0\.20" dontlog CustomLog logs/nextcloud_access.log combined ErrorLog logs/nextcloud_error.log # Absicherung der Übertragung mit Hilfe von TLS # Konfiguration bei Verwendung von mod_gnutls <IfModule !mod_ssl.c> <IfModule mod_gnutls.c> # Django : 2015-10-29 - TLS-Verschlüsselung mit Hilfe von mod_gnutls GnuTLSEnable on # Definition der anzubietenden Protokolle und Ciphers GnuTLSPriorities PFS:-VERS-TLS-ALL:+VERS-TLS1.2:-ARCFOUR-128:+COMP-NULL:+CURVE-SECP384R1:+CURVE-SECP521R1 # Schlüsseldatei, mit der der CSR erstellt wurde GnuTLSKeyFile /etc/pki/tls/private/lists.nausch.org.serverkey.pem # Zertifikatsdatei inkl. ggf. notwendiger Zwischen- und Root-Zertifikaten # 1) Server-Zertifikat, 2) Intermediate-Root-Zertifikat und 3) Root-Zertifikat der CA GnuTLSCertificateFile /etc/pki/tls/certs/lists.nausch.org.certificatechain_151019.pem # Definition der Schlüssellänge für DHE und ECDHE # DHE Schlüssel mit einer Schlüssellänge von 4096 Bit verwenden; dieser wird 1x pro Tag via cronjob # (/etc/cron.daily/edh_keygen) neu generiert und der Neustart des nginx-Daemon veranlasst! GnuTLSDHFile /etc/pki/tls/private/dh_4096.pem # Session-Tickets für Clients nicht anbieten (dieser könnte versuchen über Tickets die Session zu cachen). GnuTLSSessionTickets off </IfModule> </IfModule> # Konfiguration bei Verwendung von mod_ssl <IfModule mod_ssl.c> <IfModule !mod_gnutls.c> # Django : 2015-10-04 - TLS-Verschlüsselung mit Hilfe von mod_ssl SSLEngine on # Definition der anzubietenden Protokolle SSLProtocol All -SSLv2 -SSLv3 # Definition der Cipher #SSLCipherSuite "AES256+EECDH +AEAD" SSLCipherSuite DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXP:!MD5:!DSS:!LOW # Schlüsseldatei, mit der der CSR erstellt wurde SSLCertificateKeyFile /etc/pki/tls/private/cloud.nausch.org.serverkey.pem # Zertifikatsdatei inkl. ggf. notwendiger Zwischen- und Root-Zertifikaten SSLCertificateFile /etc/pki/tls/certs/cloud.nausch.org.certificate_160801.pem #SSLCertificateChainFile /etc/pki/tls/certs/RapidSSL_certificatechain.pem SSLCertificateChainFile /etc/pki/tls/certs/RapidSSL_SHA256_CA_-_G3.pem # Änderung der Cipherorder der Clienets verneinen SSLHonorCipherOrder on # TLS 1.0 Kompremmierung deaktivieren (CRIME attacks) SSLCompression off # SSLUseStapling on </IfModule> </IfModule> # special stuff ### # HTTP Strict Transport Security (HSTS), bei dem der Server dem Client im HTTP-Header mitteilt, # dass dieser nur noch verschlüsselt mit dem Server kommunizieren soll. Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" # This header enables the Cross-site scripting (XSS) filter built into most recent web browsers. # It's usually enabled by default anyway, so the role of this header is to re-enable the filter for # this particular website if it was disabled by the user. # https://www.owasp.org/index.php/List_of_useful_HTTP_headers Header set X-XSS-Protection "1; mode=block" # when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header, # to disable content-type sniffing on some browsers. # https://www.owasp.org/index.php/List_of_useful_HTTP_headers # currently suppoorted in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx # http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx # 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020 Header set X-Content-Type-Options nosniff # config to don't allow the browser to render the page inside an frame or iframe # and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking # if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri # https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options header set X-Frame-Options SAMEORIGIN </VirtualHost>
Konfiguration über die WEB-GUI
Die weitere Konfiguration erfolgt dann direkt über die Web-GUI, die wir über unsere URL https://cloud.nausch.org erreichen.
Zunächst definieren wir den Admin-Account und weisen diesem ein passendes sicheres Passwort zu.
Da wir unsere zuvor definierte Maria-DB nutzen wollen, klicken wir auf die Schaltfläche Speicher & Datenbank. Dort tragen wir dann die benötigten Daten ein.
Haben wir alle Daten richtig eingegeben beenden wir die Konfiguration über die Schaltfläche [ Installation abschließen ]. uns wir anschliessend eine Hinweis-Seite zu den zur Verfügung stehenden Clients angezeigt.
Dieses Hinweisfenster beenden wir über das x in der rechten oberen Ecke des eingeblendeten Hinweisfensters und gelangen so zum Hauptfenster von Nextcloud.
Update/Upgrade
Download
Bevor wir uns das aktuelle (Update-)Programmpaket von nextcloud herunterladen, wechseln wir in unser lokales Paketverzeichnis.
# cd /usr/local/src/packages/
Anschließend holen wir uns das aktuelle tar.bz2-Archiv und dessen zugehörige sha512 Prüfsumme auf unseren Server.
# wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.tar.bz2 # wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.tar.bz2.sha512
Vom heruntergeladenen Archiv nextcloud-13.0.6.tar.bz2 generieren wir einen eigenen Hash-Wert und legen diesen in einer lokalen Datei ab.
# sha512sum nextcloud-14.0.4.tar.bz2 > nextcloud-14.0.4.tar.bz2.sha512.local
Nun können wir die beiden Hash-Werte vergleichen und somit prüfen, ob dem Archiv soweit vertraut werden kann.
# diff nextcloud-14.0.4.tar.bz2.sha512.local nextcloud-14.0.4.tar.bz2.sha512
Sind beide Werte identisch, erfolgt keine Ausgabe - wir können also nun mit dem Update unserer Installation beginnen.
Webserver anhalten
Bevor wir nun unsere bestehende Installation updaten, versetzen wir erst noch unseren NextCloud-Server in den Wartungsmodus.
# sudo -u apache php /srv/www/html/cloud/occ maintenance:mode --on
Maintenance mode enabled
Optional können wir auch unseren laufenden NextCloud-Webserver. Dazu deaktivieren wir die Konfigurationsdatei unseres Apache-vHosts indem wir diese umbenennen und den Webserver einmal durchstarten.
# mv /etc/httpd/conf.d/3rd_cloud.conf /etc/httpd/conf.d/3rd_cloud.conf.deaktiviert
# systemctl restart httpd.service
bestehendes Installations-Verzeichnis sichern
Nun sichern wir das bestehende Installationsverzeichnis indem wir es umbenennen.
# mv /srv/www/html/nextcloud /srv/www/html/nextcloud.old
# cp -ra /srv/www/html/cloud /srv/www/html/cloud.$(date +%y%m%d)
Entpacken
Nun entpacken wir das heruntergeladene tar.bz2-Archiv an Ort und Stelle.
# tar -jxpvf /usr/local/src/packages/nextcloud-14.0.4.tar.bz2 -C /srv/www/html/
# rm -rf /srv/www/html/cloud && mv /srv/www/html/nextcloud /srv/www/html/cloud
Berechtigungen anpassen
Anschliessend passen wir die Berechtigungen des Verzeichnisses /srv/www/html/cloud an, so dass unser Apache-User unter dem der HTTP-Daemon läuft darauf zugreifen bzw. dort auch hineinschreiben kann.
# chown -R apache:apache /srv/www/html/cloud
Konfiguration erneuern
Die Konfigurationsdatei config.php unserer bestehenden Installation kopieren wir nun in unser neues Updateverzeichnis.
# cp -a /srv/www/html/nextcloud.old/config/config.php /srv/www/html/nextcloud/config/config.php
Datenverzeichnis sichern/kopieren
Haben wir das Datenverzeihnis im Web-ROOT-Verzeichnis unseres Apache-Webservers müssen wir nun noch die Daten zurücksichern. Hierzu kopieren wir den Inhalt der gesichterten NextCloud-Installation in das zuvor neu angelegte Verzeichnis.
# cp -avr /srv/www/html/nextcloud.old/data/ /srv/www/html/nextcloud/data/
Befindet sich das Datrenverzeichnis ausserhalb unseres Web-ROOT-Verzeichnisses brauchen wir nichts unternehmen, da lediglich die Pfadangabe in der Konfigurationsdatei /srv/www/html/nextcloud/config/config.php vermerkt ist und das Datenverzeichnis vom anschliessenden manuellen Update nicht erfasst wird!
Webserver starten
Nun können wir unseren NextCloud-Webserver wieder starten. Dazu aktivieren wir die Konfigurationsdatei unseres Apache-vHosts indem wir diese umbenennen und den Webserver einmal durchstarten.
# mv /etc/httpd/conf.d/nextcloud.conf.deaktiviert /etc/httpd/conf.d/nextcloud.conf
# systemctl restart httpd.service
Da wir nach wie vor unseren NextCloud-Server im Wartungsmodus laufen haben, wird einem Nutzer, der versucht sich an der WEB-GUI anzumelden ein entsprechender Hinweis eingeblendet.
Upgrade starten
Nun starten wir den Upgrade unserer Intsallation. Je nach Grösse und Umfang unserer Installation wir es nun ein Weilchen Dauern bis die Aktualisierung unserer Installation abgeschlossen ist.
# sudo -u apache php /srv/www/html/nextcloud/occ upgrade
Nextcloud or one of the apps require upgrade - only a limited number of commands are available You may use your browser or the occ upgrade command to do the upgrade Set log level to debug Checking whether the database schema can be updated (this can take a long time depending on the database size) Done 27/27 [============================] 100% Checked database schema update Checking updates of apps Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 2/2 [============================] 100% Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 10/10 [============================] 100% Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 1/1 [============================] 100% Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 1/1 [============================] 100% Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 1/1 [============================] 100% Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 1/1 [============================] 100% Checking whether the database schema forcan be updated (this can take a long time depending on the database size) Done 3/3 [============================] 100% Checked database schema update for apps Updating database schema Updated database Updating... Updated Fix classification for calendar objects Done 16/16 [============================] 100% Updatedto 1.0.1 Updating ... Updated to 1.0.1 Updating ... Updated to 1.5.2 Updating ... Updated to 2.3.2 Updating ... to 1.0.0 Updating Drop old database tables Done 31/31 [============================] 100% Remove old (< 9.0) calendar/contact shares Done 4/4 [============================] 100% Fix permissions so avatars can be stored again Done 2/2 [============================] 100% Repair unmerged shares Done 16/16 [============================] 100% Starting code integrity check... Finished code integrity check Update successful Maintenance mode is kept active Reset log level... Updated to 1.0.0 Updating ... Updated to 1.0.0 Updating ... Updated to 1.3.0 Updating ... Updated to 1.0.0 Updating ... Updated to 0.3.0 Updating ... Updated to 1.0.2
Da der Upgrade nun erfolgreich abgeschlossen ist, können wir den Wartungsmodus unserer NextCloud-Installation wieder beenden.
# sudo -u apache php /srv/www/html/nextcloud/occ maintenance:mode --off
Nextcloud is in maintenance mode - no app have been loaded Maintenance mode disabled
Zu guter Letzt melden wir uns nun an der WEB-GUI unserer NextCloud-Instanz an und überprüfen die Funktionen.