projet_serveur_krkn/applicatif/zone_interne/nextcloud.md

11 KiB

NextCloud

Mise en place du conteneur pour NextCloud et intégration à l'annuaire LDAP.

Le conteneur

Numéro 120 (Beta)

Interface réseau

  • eth0 : vmbr1 / VLAN 30 / IP 10.0.2.20 / GW 10.0.2.254

Le proxy

/root/.wgetrc

http_proxy = http://10.0.0.252:3128/
https_proxy = http://10.0.0.252:3128/
use_proxy = on

/etc/apt/apt.conf.d/01proxy

Acquire::http {
 Proxy "http://10.0.0.252:9999";
};

/etc/ferm/ferm.conf

Configuration du serveur LDAP

Le serveur LDAP est déjà en place sur le conteneur LDAP il faut cependant faire ce qu'il suit pour ajouter le support de NextCloud.

Ajout d'un schéma

schemacloud.ldif

dn: cn=cloudkrhacken,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: cloudkrhacken
olcAttributeTypes: ( 1.3.6.1.4.1.99999.2.3.10 NAME 'cloudaccountquota' DESC 'Quota Cloud' EQUALITY caseExactMatch SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
olcAttributeTypes: ( 1.3.6.1.4.1.99999.2.3.11 NAME 'cloudaccountactif' DESC 'Cloud Actif' EQUALITY caseExactMatch SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
olcObjectClasses: ( 1.3.6.1.4.1.99999.2.3.20 NAME 'cloudaccountkrhacken' SUP TOP AUXILIARY MUST ( cloudaccountquota $ cloudaccountactif))
ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f schemacloud.ldif -ZZ

Ajout d'un nouvel utilisateur

Ce .ldif permet d'ajouter un nouvel utilisateur dans l'anuaire LDAP et de lui autorisé l'accès au mail et au cloud.

addusermailcloud.ldif

dn: uid=identifiant,ou=krhacken,ou=people,dc=krhacken,dc=org
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: mailaccountkrhacken
objectclass: cloudaccountkrhacken
uid: identifiant
cn: Prénom
sn: Nom
displayName: Nom d'affichage
userPassword: PASSWORD
mail: identifiant@krhacken.org
mailaccountquota: 2147483648
mailaccountactif: YES
cloudaccountquota: 5GB
cloudaccountactif: YES
ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f addusermailcloud.ldif -ZZ

Autoriser un utilisateur à utiliser le cloud

Permet d'ajouter la classe cloudaccountkrhacken à un utilisateur, il pourra ensuite utiliser NextCloud.

addtocloud.ldif

dn: uid=NAME,ou=krhacken,ou=people,dc=krhacken,dc=org
changetype: modify
add: objectclass
objectclass: cloudaccountkrhacken
-
add: cloudaccountquota
cloudaccountquota: 5GB
-
add: cloudaccountactif
cloudaccountactif: YES
ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f addtocloud.ldif -ZZ

Lister les utilisateurs :

ldapsearch -xLLL -H ldap://vip.ldap.krhacken.org -D cn=admin,dc=krhacken,dc=org -y /root/pwdldap -b "ou=people,dc=krhacken,dc=org" "(&(objectClass=cloudaccountkrhacken))" -ZZ

Installation des prérequis

apt-get install -y postgresql postgresql-contrib nginx php7.3-cli php7.3-common php7.3-mbstring php7.3-gd php-imagick php7.3-intl php7.3-bz2 php7.3-xml php7.3-pgsql php7.3-zip php7.3-dev php7.3-curl php7.3-fpm php-dompdf redis-server php-redis php-smbclient php7.3-ldap wget curl sudo unzip

Configuration de PostGreSQL

On accède à la console PostGreSQL

sudo -u postgres psql

Création de l'utilisateur et de la table dans la base de données, n'oubliez pas de spécifié le mot de passe

CREATE USER nextcloud WITH PASSWORD 'PASSWORD';
CREATE DATABASE nextcloud TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE nextcloud OWNER TO nextcloud;
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\q

Configuration de Nginx

Dans le conteneur Nginx

/etc/nginx/sites-available/nextcloud

server {
        listen 80;
        server_name cloud.krhacken.org;
        location / {
                proxy_pass http://10.0.2.20/;
                proxy_set_header Host $http_host;
                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 $scheme;
        }
}
sh ~/deploy-webhost.sh nextcloud

Dans le conteneur NextCloud

/etc/nginx/sites-available/nextcloud

server {
    listen 80;
    server_name cloud.krhacken.org;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    #This header is already set in PHP, so it is commented out here.
    #add_header X-Frame-Options "SAMEORIGIN";

    # Path to the root of your installation
    root /var/www/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
       return 301 $scheme://$host/remote.php/dav;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
       rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
       deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
       deny all;
     }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php/php7.3-fpm.sock;
       fastcgi_intercept_errors on;
       fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
       try_files $uri/ =404;
       index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
   }

   location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}
rm /etc/nginx/{sites-enabled,sites-available}/default
ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled
systemctl restart nginx

Installation de NextCloud

cd /var/www
wget https://download.nextcloud.com/server/releases/latest-18.zip
unzip latest-18.zip
chown -R www-data:www-data /var/www/nextcloud/

Sur le conteneur HAProxy

Obtention du certificat

certbot certonly --webroot -w /home/hasync/letsencrypt-requests/ -d cloud.krhacken.org
sh ~/install-certs.sh

Configuration de départ

/var/www/nextcloud/config/config.php

[...]
  'trusted_domains' =>
  array (
    'cloud.krhacken.org',
  ),
[...]
  'overwrite.cli.url' => 'https://cloud.krhacken.org',
[...]

Se rendre à l'adresse https://cloud.krhacken.org

  • Nom d'utilisateur root
  • Répertoire des données /var/www/nextcloud/data
  • Utilisateur de la base de données nextcloud
  • Nom de la base de données nextcloud
  • Hôte de la base de données localhost:5432

Connexion à l'annuaire LDAP

Il faut commencer par copier le certificat de la CA (/etc/ldap/ca_certs.pem qu'il faudra copier via scp)

cat ca_certs.pem | tee -a /etc/ldap/ca_certs.pem

Il faut ensuite modifier la configuration en modifiant la ligne suivante

/etc/ldap/ldap.conf

...
TLS_CACERT /etc/ldap/ca_certs.pem
...

Activation du module

On active le module LDAP dans NextCloud

Applications / LDAP user and group backend cliquer sur Activer

Exécuter la commande suivante pour activer le TLS pour LDAP.

sudo -u www-data php /var/www/nextcloud/occ ldap:set-config "s01" "ldapTLS" "1"

Configuration du module

Paramètres / Intégration LDAP/AD

Serveur

  • Hôte vip.ldap.krhacken.org
  • Port 389
  • DN Utilisateur cn=viewer,ou=system,dc=krhacken,dc=org
  • Mot de passe PASSVIEWER
  • DN de base ou=people,dc=krhacken,dc=org
  • Cocher Saisir les filtres LDAP

Utilisateurs

  • Modifier la requête LDAP (&(objectClass=cloudaccountkrhacken)(cloudaccountactif=YES))

Attributs de login

  • Modifier la requête LDAP (&(objectClass=cloudaccountkrhacken)(cloudaccountactif=YES)(|(uid=%uid)(mail=%uid)))

Groupes

  • Modifier la requête LDAP objectClass=cloudaccountkrhacken

Avancé

  • Cocher Configuration active
  • Champ "nom d'affichage" de l'utilisateur displayName
  • DN racine de l'arbre utilisateurs ou=people,dc=krhacken,dc=org
  • Champ "nom d'affichage" du groupe cn
  • DN racine de l'arbre groupes cn=cloud,ou=people,dc=krhacken,dc=org
  • Champ du quota cloudaccountquota
  • Quota par défaut 3GB
  • Champ Email mail
  • Règle de nommage du répertoire utilisateur uid

Expert

  • Nom d'utilisateur interne uid

Une fois que c'est fait tester la configuration normalement les utilisateurs correspondants au filtre apparaisse dans l'onglet Utilisateur.

Optimisation de NextCloud

Tâches de fond

Sur le panel administration Paramètre de base/Tâches de fond et sélectionner Cron

Ensuite on ajoute une tâche cron dans le conteneur NextCloud.

crontab -u www-data -e
*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

On lance un premier cron

sudo -u www-data php -f /var/www/nextcloud/cron.php