Nextcloud - Plateforme d'échange sécurisés

Tout déplier Tout replier

Mis à jour le 01 mars 2022 (PJ)

Nextcloud - Description

Nextcloud est une solution open source d'hébergement de fichiers.

Sunnikan dispose et administre une machine virtuelle hébergée chez le prestataire OVH qui héberge une solution Nextcloud afin de pouvoir échanger avec ses clients des fichiers de manière sécurisé. Cette solution est accessible à :

Les spécifications complète, tests et documentation techniques se trouvent sur le SharePoint :

Procédure de création d'un espace d'échange Nextcloud

Le consultant Demandeur fait la demande de création par email en précisant :

Le Sysadmin :

Une vidéo de la création de compte utilisateur est disponible ici :

Template Email Client

Important : Prévenir le Sysadmin (PJ) en cas de modification !
(il utilise des draft email pour accélérer la création)

Email Client initial (Fr)

Bonjour,

Comme convenu hier, je reviens vers vous pour vous proposer une solution de partage des documents afin que vous puissiez me transmettre les documents nécessaires à la préparation de l'audit.

Comme convenu, je reviens vers vous pour vous proposer une solution de partage des documents afin que je puisse vous transmettre les documents suite à l'audit xxx.

Pour cela, je vous invite à vous connecter à l'adresse suivante : https://nextcloud.sunnikan.com Puis à vous identifier à l'aide du compte utilisateur suivant (Attention à bien respecter les majuscules/minuscules) :

Utilisateur : AAAA-CCC

Mot de passe : ***

Vous pourrez ensuite rentrer dans le dossier nommé " AAAA-CCC " pour y déposer vos documents. Il est important que vous déposiez les documents dans ce dossier car sinon nous n'y auront pas accès.

Vous pourrez ensuite rentrer dans le dossier nommé " AAAA-CCC " pour y télécharger le rapport.

Si vous rencontrez le moindre souci, n'hésitez pas à contacter notre administrateur, en copie de ce mail.

En vous remerciant, je reste à votre disposition pour tout complément d'information.

Bien cordialement,

Email client initial (En)

Dear xxx,

As agreed, I am coming back to you to propose a document sharing solution so that you can provide me the documents necessary to prepare the audit.

To do so, I invite you to connect to the following address: https://nextcloud.sunnikan.com. Then to identify yourself with the following user account (Be careful to respect upper/lower case):

User: AAAA-CCC

Password: it will be sent in a separate email

You will then be able to enter the folder named " AAAA-CCC " to put the documents. It is important that you put the documents in this folder because otherwise we will not have access to them.

If you have any problem, please do not hesitate to contact our administrator.

With my best regards,

Email Client (En) - Password

Dear xxx,

Password: ***

With my best regards,

Procédure d'installation du serveur (Pour Sysadmin uniquement)

INSTALL LAMP

Récupérer l'ip de la machine (assigner une ip en dhcp si serveur local)

```
hostname -I
```

Mettre à jour le serveur

```
sudo apt-get update && sudo apt-get upgrade && sudo apt-get autoremove
sudo reboot now
```

Installer Apache et php

```
sudo apt-get install apache2
sudo apt-get install php
```

Installer les modules nécessaires php \
(ceux entre parenthèses ne s'installent pas ou sont déjà présent)\
(ceux en erreur sont introuvables)

```
(sudo apt-get install php-ctype)
sudo apt-get install php-dom
sudo apt-get install php-GD
(sudo apt-get install php-iconv)
(sudo apt-get install php-JSON)
(sudo apt-get install php-libxml)
sudo apt-get install php-mbstring
(sudo apt-get install php-openssl)
(sudo apt-get install php-posix)
(sudo apt-get install php-SimpleXML)
(sudo apt-get install php-XMLReader)
(sudo apt-get install php-XMLWriter)
sudo apt-get install php-zip
(sudo apt-get install php-zlib)
sudo apt-get install php-mysql
sudo apt-get install php-curl
ERROR : sudo apt-get install php-fileinfo
sudo apt-get install php-bz2
sudo apt-get install php-intl
ERROR : sudo apt-get install php-mcrypt
sudo apt-get install php-imap
sudo apt-get install php-ldap
sudo apt-get install php-smbclient
sudo apt-get install php-apcu
sudo apt-get install php-memcached
sudo apt-get install php-redis
sudo apt-get install php-imagick
sudo apt-get install php-avconv
```

Installer MariaDB pour la base de données

```
sudo apt-get install mariadb-server
```

Se connecter à la base en tant que root

(pas de mot de passe car accessible uniquement en sudo depuis localhost)

```
sudo mysql -u root
```

Une fois le prompt mysql, créer un utilisateur nc-user avec tous les privilèges

```
CREATE USER 'nc-user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON . TO 'nc-user'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;
```

Normalement je devrai activer php sur apache mais apparemment c'était déjà le cas

```
(sudo a2enmod php7)
```

Créer un fichier phpinfo à la racine du serveur apache (/var/www/html)

```
sudo nano /var/www/html/phpinfo.php
```

Editer le fichier

```
<?php
phpinfo();
?>
```

Accéder au fichier pour confirmer que le serveur tourne

INSTALL NEXTCLOUD

Créer les dossier nécessaires et configurer les droits.
Normalement nextcloud devrait être installé dans son propre répertoire mais baste.

```
sudo mkdir /var/www/data
sudo chown -R www-data:www-data /var/www/html/
sudo chown -R www-data:www-data /var/www/data/
```

Aller chercher le fichier d'install php et le copier à la racine du serveur web

```
wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
sudo cp *.php /var/www/html
```

Accéder au fichier setup-nextcloud.php

install de nextcloud. Note que le compte MySQL à utiliser pour la création de la base est nc-user@localhost et non root

CONFIG SSL

Copier le pfx du certif wildcard sunnikan sur une clef usb et l'insérer dans le serveur

Si serveur externe, passer par un hébergement ?

```
sudo mkdir /mnt/usb
sudo fdisk -l
```

Repérer l'id de la clef usb, ici c'est sdb1. (lsblk est plus propre)

```
sudo mount /dev/sdb1 /mnt/usb
cp /mnt/usb/*.pfx .
sudo umount /dev/sdb1
```

Activer SSL et headers su apache

```
sudo a2enmod ssl
sudo a2enmod headers
sudo systemctl reload apache2
```

Extraire la clé privée depuis le pfx avec openssl. Cette clé est cryptée, il faudra la décrypter :

```
openssl pkcs12 -in wildcard-sunnikan-com2018-10-23.pfx -nocerts -out sunnikan.com-privateencrypted.pem
openssl rsa -in sunnikan.com-private_encrypted.pem -out sunnikan.com-private.pem
```

Extraire le certificat serveur depuis le pfx avec openssl

```
openssl pkcs12 -in wildcard-sunnikan-com_2018-10-23.pfx -clcerts -nokeys -out sunnikan.com.pem
```

Copier le cert et la clef dans les dossiers correspondants

```
sudo cp sunnikan.com.pem /etc/ssl/certs/
sudo cp sunnikan.com-private.pem /etc/ssl/private/
```

Créer le fichier de configuration apache du serveur :

```
sudo nano /etc/apache2/sites-available/sunnikan.com.conf
```

```
<VirtualHost :80>
ServerName nextcloud.sunnikan.com
ServerAlias www.nextcloud.sunnikan.com
Redirect permanent / https://nextcloud.sunnikan.com/
</VirtualHost>
<VirtualHost :443>
ServerName nextcloud.sunnikan.com
ServerAlias www.nextcloud.sunnikan.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options +FollowSymLinks
AllowOverride all
Require all granted
</Directory>
# directives obligatoires pour TLS
SSLEngine on
SSLCertificateFile /etc/ssl/certs/sunnikan.com.pem
SSLCertificateKeyFile /etc/ssl/private/sunnikan.com-private.pem
Header always set Strict-Transport-Security "max-age=15768000"
ErrorLog /var/log/apache2/error.nextcloud.sunnikan.com.log
CustomLog /var/log/apache2/access.nextcloud.sunnikan.com.log combined
</VirtualHost>
```

Ajouter le domaine ainsi créé à la config php de nextcloud

```
sudo nano /var/www/html/config/config.php
```

```
Ajouter à trusted_domains :
```

Ajouter à trusted_domains :

```
1 => 'nextcloud.sunnikan.com',
```

Activer la config

```
sudo a2ensite sunnikan.com
sudo systemctl reload apache2
```

Config Encodage Database


```
sudo mysql -u root
```

```
show variables like 'innodb_large_prefix';
show variables like 'innodb_file_format';
show variables like 'innodb_file_per_table';
SET GLOBAL innodb_large_prefix=1;
SET GLOBAL innodb_file_format=barracuda;
SET GLOBAL innodb_file_per_table=1;
exit;
```

```
cd /var/www/html
sudo -u www-data php occ maintenance:mode --on
sudo mysql -u root
```

```
ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
exit;
```

```
sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
sudo -u www-data php occ maintenance:repair
sudo -u www-data php occ maintenance:mode --off
service mysql restart
```

_____