Nextcloud hatte ich vor kurzem kennengelernt, als ich die Frage stellte, was man für Cloudsoftware denn nehmen solle. Die Frage nach Owncloud hätte ich besser nicht stellen sollen. Mit Verlaub, solltest Du eine Wolke selber bauen, bist Du dann auch für die Sicherheit verantwortlich. Das ist alles noch so ziemlich BETA, wie ich finde. Sofern Du Dir das aber zutraust, geht es so, denke ich. Das hier ist eine vereinfachte Bereitstellung, diese VM hat nix anders zu tun als Nextcloud bereitzustellen. Nextcloud wird direkt im document-root bereitgestellt, hat also keine gesonderte vhost, um die korrekte Konfiguration des Apache mit TLS kümmert sich da letsencrypt, Du brauchst Dir also auch keine Sorgen zu machen, bei Qualys ein schlechtes Ergebnis zu bekommen – das kann das Ding so recht gut. Es gibt kein nginx, auch nur APCu Memcache, das sollte aber für sehr kleine Umgebungen mehr als reichen.
Für meinen Freund Marko Ruschin.
Vorraussetzungen:
- Ubuntu 16.04 Xenial Xerus mit Openssh-server (Link)
- VM=2vCPU, 2048G+
- Statische, interne IP (Link)
- DNS-Einträge für <servername.domain.tld> zeigen auf die öffentliche IP der Hütte
- Öffentlich Erreichbarkeit von 443 und 80 (Firewall, NAT/Maskerade) – Ich hasse übrigens NAT
Dynamisches DNS, Anmerkungen gesondert für Lancom:
- Mit SPDNS geht das so: Link
Ich schreibe bald mal eine Howto, wie das mit All-Inkl und Lancom direkt geht
Mit All-Inkl geht das so: Link
Variablen:
URI der Wolke: <servername.domain.tld>/nextcloud Datenbank Root Kennwort: <mysqlrootpassword> Kennwort des Datenbanknutzers nextcloud: <ncdbpassword> Dein Adminbenutzer bei Nextcloud: <ncwebadmin> Dein Adminpasswort bei Nextcloud: <ncwebadminpassword>
Losgehts.
Nachfolgendes im Kontext von root (sudo)
Hütte aktualisieren:
apt update && apt upgrade && apt dist-upgrade
Pakete installieren und <mysqlrootpassword> vergeben:
apt install apache2 mysql-server libapache2-mod-php php-gd php-json php-mysql php-curl php-intl php-mcrypt php-imagick php-dom php-zip php-mbstring php-apcu python-letsencrypt-apache unzip
MySQL zumachen:
mysql_secure_installation
mySQL Kommandos am besten zu Fuß tippen, Hochkommata mag Dein Computer eventuell nicht kopieren
Datenbank anlegen
mysql -u root -p <mysqlrootpassword> create database nextcloud; CREATE USER 'nextcloud'@‚'localhost' IDENTIFIED BY '<ncdbpassword>'; grant all on nextcloud.* to 'nextcloud'@'localhost'; quit;
Nextcloud Datenverzeichnis anlegen, außerhalb von document-root
mkdir /var/www/ncdata chown www-data:www-data /var/www/ncdata -R
Nextcloud herunterladen, entpacken und nach html schubsen. Nextcloud könnte es ggf. in neuerer Version geben, also da auch mal nachgucken: Link. Diese Anleitung bezieht sich auf Version 10.0
wget https://download.nextcloud.com/server/releases/nextcloud-10.0.0.zip unzip nextcloud-10.0.0.zip mv nextcloud /var/www/html/nextcloud chown www-data:www-data /var/www/html/nextcloud/ -R rm nextcloud-10.0.0.zip
Letsencrypt Zertifikate erstellen, im Menü korrekte Emailadresse eintragen, Secure wählen:
letsencrypt --apache -d <servername.domain.tld> letsencrypt renew
Apache anpassen (wer weiß, ob was fehlt, doppelt gemoppelt hält besser)
a2enmod rewrite a2enmod headers a2enmod env a2enmod dir a2enmod mime a2enmod setenvif a2enmod ssl
PHP Upload Größe editieren
nano /etc/php/7.0/apache2/php.ini
Nach Dokumentation (Link) folgende Einstellungen definieren:
php_value upload_max_filesize = 16G php_value post_max_size = 16G php_value max_input_time 3600 php_value max_execution_time 3600
Apache-Default-Konfiguration anpassen
nano /etc/apache2/sites-available/000-default-le-ssl.conf
und am Ende der conf hinzufügen, frei nach Doku (Link):
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </IfModule>
Apache durchstarten:
service apache2 restart
Nextcloud einmalig starten und damit config.php generieren:
http://<servername.domain.tld>/nextcloud
Folgendes müsstest Du da einklappern:
Nutzer ist <ncwebadmin> Kennwort ist <ncwebadminpassword> Datenverzeichnis ist /var/www/ncdata (ACHTUNG - BITTE ZWINGEND ANPASSEN) Datenbankusername ist nextcloud Kennwort ist <ncdbpassword> Datenbank ist nextcloud Ort ist localhost
Beispielhafter Screenshot dafür hier:
Wenn Du schon da bist, kannst Du gleich die Cron-Konfiguration im Admininterface anpassen:
Den Cronjob dafür bauen wir aber gleich erst.
Dann kannst Du die config.php anpassen:
nano /var/www/html/nextcloud/config/config.php
und vor ); folgende Zeilen einfügen, frei nach Doku (Link, Link):
'memcache.local' => '\OC\Memcache\APCu', 'enable_previews' => 'false',
Jetzt noch die Cronjobs bauen, einmal für www-data frei nach Doku (Link)
crontab -u www-data -e
hier 2, Nano wählen und folgende Zeile hinzufügen
*/15 * * * * php -f /var/www/html/nextcloud/cron.php
und einmal für den normalen:
crontab -e
und mit 2 nano diese Zeile hinzufügen:
30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
Anschließend ansurfen:
https://www.ssllabs.com/ssltest/analyze.html?d=<servername.domain.tld>&hideResults=on&latest
Sollte so aussehen:
Freuen. Jetzt kannst Du Dir User für Dich und Deine Freunde anlegen.
Anmerkungen zu 10.0
Solltest Du intern, in dem Ding noch teilen wollen und die Version 10.0 noch 10.0 sein, so kannst Du bitte prüfen, ob
nano /var/www/html/nextcloud/apps/files_sharing/lib/sharedstorage.php
folgendem entspricht: Link
Sicherheit:
- Wenn Du willst, kannst Du Deine Instanz noch weiter dicht machen – Hier gibt’s eine Anleitung dafür (Link).
- Sascha Meinel wirft einen guten Tipp hinterher: Fail2Ban – Wie das geht, steht hier, bei Joachim Wilke: Link.
Das sollte es soweit sein.
Hinweis:
- Nextcloud bietet einen Dienst an, welcher Deine Instanz auf korrekte Konfiguration hinsichtlich Sicherheit überprüfen kann. Du findest ihn hier: Link
Noch ein paar Gedanken zum Update:
Ich fand‘ die Dokumentation im Bereich Upgrade nicht wirklich hilfreich, da hier viel zwischen den einzelnen Distributionen gesprungen wird oder auf inoffizielles SNAP verwiesen wurde. Möglicherweise ist das ja auch schon korrigiert.
Nextcloud befindet sich bei mir in /var/www/html/nextcloud. Um es zu sichern, habe ich zunächst die Rechte des Verzeichnis übernommen:
chown root:root /var/www/html/nextcloud -R
Anschließend habe ich es umbenannt:
mv /var/www/html/nextcloud /var/www/html/ncold
Dann habe ich in /var/www/html die aktuelle NC-Version heruntergeladen und anschließend entpackt:
cd /var/www/html wget https://download.nextcloud.com/server/releases/nextcloud-11.0.1.zip unzip nextcloud-11.0.1.zip
Nextcloud entpackt nach /var/www/html/nextcloud. Mir fehlte noch meine Konfigurationsdatei, also habe ich die aus meiner alten Nextcloud-Sicherung geholt:
cp /var/www/html/ncold/config/config.php /var/www/html/nextcloud/config/config.php
Danach habe ich die Besitzrechte von /var/www/html/nextcloud wieder korrigiert:
chown www-data:www-data /var/www/html/nextcloud/ -R
Danach habe ich im Nextcloud-Verzeichnis unter dem www-data User das manuelle Update ausgeführt:
cd /var/www/html/nextcloud sudo -u www-data php occ upgrade
Es hat nicht lange gedauert und das Update war durch:
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 Turned on maintenance mode Updating database schema Updated database Updating <federatedfilesharing> ... Updated <federatedfilesharing> to 1.1.1 Updating <files_pdfviewer> ... Updated <files_pdfviewer> to 1.0.1 Updating <firstrunwizard> ... Updated <firstrunwizard> to 2.0 Updating <password_policy> ... Updated <password_policy> to 1.1.0 Updating <provisioning_api> ... Updated <provisioning_api> to 1.1.0 Updating <updatenotification> ... Updated <updatenotification> to 1.1.1 Updating <user_ldap> ... Updated <user_ldap> to 1.1.1 Updating <files> ... Updated <files> to 1.6.1 Updating <activity> ... Updated <activity> to 2.4.1 Updating <dav> ... Updated <dav> to 1.1.1 Updating <files_sharing> ... Updated <files_sharing> to 1.1.1 Updating <files_trashbin> ... Updated <files_trashbin> to 1.1.0 Updating <files_versions> ... Updated <files_versions> to 1.4.0 Updating <workflowengine> ... Updated <workflowengine> to 1.1.1 Updating <comments> ... Updated <comments> to 1.1.0 Updating <notifications> ... Updated <notifications> to 1.0.1 Updating <systemtags> ... Updated <systemtags> to 1.1.3 Updating <theming> ... Updated <theming> to 1.1.1 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% Starting code integrity check... Finished code integrity check Update successful Turned off maintenance mode Reset log level
Nach einer Prüfung habe ich die alte sicherung entfernt:
rm -rf /var/www/html/ncold
Also, alles doch recht simpel.