Cloud storage : Nextcloud

On oublie Owncloud, on passe directement sur son fork : Nextcloud.

Utilisateurs de MariaDB, Nextcloud demande de modifier une option MariaDB avant de commencer :

nano /etc/mysql/my.cnf
[mysqld]
    binlog-format=mixed

On redémarre le serveur MariaDB et tout est prêt :

service mariadb restart

On télécharge le package server (vérifier la dernière version ici) et on décompresse :

wget https://download.nextcloud.com/server/releases/nextcloud-11.0.2.zip
unzip nextcloud-11.0.2.zip
mv nextcloud /var/www/
#si autre utilisateur utilisé, on redonne les droits :
chown -R www-data:www-data /var/www/nextcloud

Se rendre à l'adresse voulue, et lancer l'installation (avec configuration MySQL/MariaDB ici).

Si vous obtenez une erreur avec Apache qui ressemble à :
Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.
Vérifiez dans votre fichier de configuration Apache, au niveau des balises directory :

<Directory />
        [...]
        AllowOverride None
        [...]
</Directory>

Si AllowOverride est sur None, passez le à All, pour autoriser la prise en charge des fichiers .htaccess et relancez Apache :

service apache2 restart

Utiliser un cache est recommandé par Nextcloud/Owncloud, on va donc y remédier.
On commence par installer les paquets requis :

apt-get install redis-server php7.0-apcu php7.0-redis

On configure Redis :

nano /etc/redis/redis.conf
#On vérifie qu'on écoute bien en local :
bind 127.0.0.1
#On supprime le port 6379 pour 0
port 0
#On a désactiver l'écoute réseau, on passera par le socket local.
#Décommenter la ligne "unixsocket /var/run/redis/redis.sock", et en profiter pour changer la permission en "770" au lieu de "700".
unixsocket /var/run/redis/redis.sock
unixsocketperm 770

On ajoute notre utilisateur www-data au groupe redis :

usermod -a -G redis www-data

Et on relance Apache et Redis :

service apache2 restart
service redis-server restart

Nextcloud est installé, Redis est installé et configuré. Il reste à configurer Nextcloud pour prendre en compte le cache Redis.
On va éditer manuellement le fichier de configuration Nextcloud et lui rajouter à la fin :

nano /var/www/nextcloud/config/config.php
#APCu pour le local,
'memcache.local' => '\OC\Memcache\APCu',
#Redis pour les locks de fichiers,
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'filelocking.enabled' => 'true',
'redis' => 
array (
#Configuration avec le socket, pas de connexion TCP,
'host' => '/var/run/redis/redis.sock',
'port' => 0,
'timeout' => 0.0,
),

On redémarre le tout pour avoir une base propre, et le cache devrait fonctionner correctement.
Documentation officielle : https://docs.nextcloud.com/server/11/admin_manual/configuration_server/caching_configuration.html.

On va activer les URL simples, pour nettoyer un peu tout ça.
on vérifie que les mods Apache nécessaires sont bien activés :

a2enmod env rewrite

On va encore éditer manuellement le fichier de configuration Nextcloud pour ajouter la ligne (/nextcould est le dossier ou se situe notre instance Nextcloud) :

nano /var/www/nextcloud/config/config.php
'htaccess.RewriteBase' => '/nextcloud',

Enfin, on se place dans le dossier de Nextcloud, et on met à jour le fichier .htaccess :

cd /var/www/nextcloud
sudo -u www-data php occ maintenance:update:htaccess

On passe donc d'url du style :

https://my.domain.tld/nextcloud/index.php/settings/admin

à :

https://my.domain.tld/nextcloud/settings/admin

Le lecteur RSS intégré à Nextcloud sous la forme d'une application, s'appelle News.
De base, sous Nextcloud 11, je ne la vois pas dans le marketplace, je l'installe manuellement :

#On se place dans le dossier des apps Nextcloud
cd /var/www/nextcloud/apps
#On télécharge l'archive, dont on a récupéré l'adresse ici : https://apps.nextcloud.com/apps/news
wget https://github.com/nextcloud/news/releases/download/10.1.0/news.tar.gz
#On décompresse
tar zxvf news.tar.gz
#On applique les droits au dossier
chown -R www-data:www-data news/
#On supprime l'archive devenue inutile
rm news.tar.gz

Finalement, on se rend dans les applications de notre Nextcloud, et on active News.

On va préférer utiliser cron pour gérer la tâche de maintenance :

  • Configurer l'utilisation de CRON sur la page d'administration de l'instance Nextcloud.

Créer la tâche système :

crontab -e -u www-data

On ajoute la ligne (bien vérifier le chemin vers le fichier cron.php) :

*/15  *  *  *  * php -f /var/www/nextcloud/cron.php

logrotate

On vérifie la présence des paquets :

apt-get install fail2ban logrotate

On crée le script de rotation des logs (toujours vérifier le chemin vers Nextcloud) :

nano /etc/logrotate.d/nextcloud
/var/www/nexcloud/data/nextcloud.log {
    weekly
    missingok
    rotate 8
    compress
    notifempty
    create 640 www-data www-data
}

fail2ban

Création du filtre fail2ban :

nano /etc/fail2ban/filter.d/nextcloud.conf
[Definition]
failregex={"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)","level":2,"time":".*","method":".*","url":".*","user":".*","version":".*"}

Création de la règle :

nano /etc/fail2ban/jail.local
[nextcloud]
enabled = true
filter  = nextcloud
port    = https
protocol = tcp
bantime  = 3600
findtime = 600
maxretry = 3
logpath = /var/www/nextcloud/data/nextcloud.log

Redémarrer le service fail2ban :

service fail2ban restart

CalDAV URL :

https://my.domain.tld/nextcloud/remote.php/dav/

Pour iOS / OSX :

https://my.domain.tld/nextcloud/remote.php/dav/principals/users/<my-user>/

CardDAV URL :

https://my.domain.tld/nextcloud/remote.php/dav/addressbooks/users/<my-user>/contacts/

DAVdroid

CalDAV & CardDAV :

https://my.domain.tld/nextcloud/remote.php/dav/

Plus d'infos ici.

RFC 6764

Définition : This specification describes how DNS SRV records, DNS TXT records, and well-known URIs can be used together or separately to locate CalDAV (Calendaring Extensions to Web Distributed Authoring and Versioning (WebDAV)) or CardDAV (vCard Extensions to WebDAV) services.

En gros : utiliser le serveur DNS (ou .well-known, comme le fait Let's Encrypt pour son service) pour gérer la découverte automatique de service CardDAV / CalDAV.

Les entrées disponibles sont :

  • Une entrée de type SRV pour définir le serveur,
  • Une entrée de type TXT pour définir le chemin sur le serveur.

Les noms des entrées sont différentes suivant l'utilisation ou non de TLS (le s final si TLS), exemples :

Entrée SRV CalDAV sans TLS :

_caldav._tcp SRV 0 1 80 my.domain.tld.

Entrée SRV CalDAV avec TLS :

_caldavs._tcp SRV 0 1 443 my.domain.tld.

Entrée SRV CardDAV sans TLS :

_carddav._tcp SRV 0 1 80 my.domain.tld.

Entrée SRV CardDAV avec TLS :

_carddavs._tcp SRV 0 1 443 my.domain.tld.



La même chose pour l'entrée de type TXT :

Entrée TXT CalDAV sans TLS :

_caldav._tcp TXT "path='/nextcloud/remote.php/dav/'"

Entrée TXT CalDAV avec TLS :

_caldavs._tcp TXT "path='/nextcloud/remote.php/dav/'"

Entrée TXT CardDAV sans TLS :

_carddav._tcp TXT "path='/nextcloud/remote.php/dav/'"

Entrée TXT CardDAV avec TLS :

_carddavs._tcp TXT "path='/nextcloud/remote.php/dav/'"



Au final, on aura normalement 4 entrées, suivant les choix faits (TLS ou non, choix du serveur et du chemin). Ici avec TLS :

_caldavs._tcp SRV 0 1 443 cloud.libox.fr.
_carddavs._tcp SRV 0 1 443 cloud.libox.fr.
_caldavs._tcp TXT "path='/remote.php/dav/'"
_carddavs._tcp TXT "path='/remote.php/dav/'"

Utilisation de .well-known

Tout se passe dans le fichier .htaccess, pour Apache du moins.
Il nous faudra les 2 lignes (qui sont déjà incluses de base dans Nextcloud, juste pour voir le fonctionnement ici) :

RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]

Qui redirigent bien les services correctement vers le bon emplacement (voir page documentation officielle).

Export des données *DAV

Contacts :

https://<server>/remote.php/dav/addressbooks/<user>/<carnet>?export

Calendriers :

https://<server>/remote.php/dav/calendars/<user>/<calendrier>?export

Plus d'informations sur le post : z-push-sync-and-how-it-works.

Avec le client Owncloud CLI

PPA Client

add-apt-repository ppa:nextcloud-devs/client
apt-get update
apt-get install nextcloud-client

Voir plus sur la page du dépôt : https://github.com/nextcloud/client_theming

Android

Modifier manuellement la configuration du client

Trouver le bon fichier de configuration du client :

  • Linux :
$HOME/.local/share/data/ownCloud/owncloud.cfg
  • Windows :
%LOCALAPPDATA%\ownCloud\owncloud.cfg
  • MAC OS X :
$HOME/Library/Application Support/ownCloud

Chercher la section [General] et ajouter (pour le transfert de gros fichiers, augmenter la taille des chunks et les transferts simultanés) :

[General]
#Taille d'un block, ici 10M
chunkSize 10485760
#Nombre de tâches en parallèle
maxParallel 5
#Augmenter le timeout
timeout 3600

Via Documentation Client Owncloud (pas encore de documentation client spécifique Nextcloud).

Test sécurité et hardening d'une instance Nextcloud :

Via https://memo-linux.com/owncloud-vider-la-corbeille-sur-le-serveur/
& https://doc.owncloud.org/server/9.1/admin_manual/configuration_server/config_sample_php_parameters.html
Vider la corbeille manuellement, pour tous les utilisateurs :

sudo -u www-data php occ trashbin:cleanup

Pour un ou des utilisateurs spécifiques :

sudo -u www-data php occ trashbin:cleanup <user1> <user2> [...] <userX>

Configuration du délais de suppression automatique, dans le fichier de configuration config/config.php :

#Suppression automatique des fichiers dans la corbeille après 10 jours (''auto'' pour supprimer au bout de 30 jours SI besoin de place, sinon les fichiers restent en place) :
trashbin_retention_obligation => '10, 10',
#Désactiver la suppression :
trashbin_retention_obligation => 'disabled',
  • applications/cloud.txt
  • Dernière modification: 2023/08/05 16:22
  • (modification externe)