Mise à jour : 27/12/2020 à 14h45
Debian 10 Validé le 27/12/20 avec passage php7.4
Raspbian Non testé le xx/xx/2021
NextCloud : 20.0.4
PHP : 7.4
Habitué de linux et des serveurs web
Savoir lire
Connaître le concept de DNS (l'histoire avec les domaines)
Connaître le concept de virtualhost
Lammers : 2h/4h
Novices : 1h/2h
Habitués de Linux: 30/60 minutes
Habitués apache/mysql : 10/15 minutes
Ce tutoriel est destiné aux utilisateurs Linux pour les sytèmes suivants : Debian 10/Raspbian. Il sera expliqué ici, comment configurer Apache2, créer et configurer une base de données afin de pouvoir installer et faire fonctionner NextCloud 20. Si vous êtes sur un système buster (Debian 10), veuillez vérifier que le chemin /usr/sbin est présent dans votre variable $PATH. Vous pourrez trouver plus d'informations sur cette ressource.
Première étape, la mise à jour :
$su
#apt update && apt upgrade -y
La commande su permet de passer sur un compte administrateur. Partant du principe que vous avez des bases en informatique, toutes les manipulations seront effectuées en tant qu'administrateur système.
La commande apt update va permettre de rechercher toutes les mises à jours disponibles
pour les paquets installés sur linux.
La commande apt upgrade va permettre d'installer toutes les mises à jours disponibles
pour les paquets installés sur linux.
La commande apt update && upgrade -y permet de concaténer les commandes de recherches et
d'installations des mises à jours. L'argument -y permet d'indiquer qu'on approuve bien l'installation.
Dernière maj du module : 27/12/2020 à 15h23
Les commandes citées ci-dessous vous permettront d'installer et configurer apache.
PS : Pour le tutoriel nextcloud ajouté la commande mkdir /var/www/data avant de faire le chown
#apt install apache2
#mkdir /var/www/nom_du_virtualhost_a_configurer
#chown -R www-data:www-data /var/www/nom_du_virtualhost_a_configurer
#ls -lath /var/www/
#mkdir /var/log/apache2/nom_du_virtualhost
#mkdir /etc/ssl/nom_du_virtualhost
#cd /etc/apache2/sites-available/
#a2dissite 000-default.conf
#nano nom_virtualhost.conf
(on fait la combinaison de touche "ctrl+O"
on fait "entrer" puis "ctrl+x")
#a2enmod ssl
#a2enmod headers
#systemctl restart apache2
- La commande apt install [package] permet de lancer l'installation du paquet demandé sur debian.
- La commande mkdir permet la création d'un dossier. Ici le dossier du "nom_du_virtualhost_a_configurer" sera crée et accessible via le chemin indiqué "/var/www/"
- La commande chown permet de changer le propriétaire d'un dossier.
- L'argument chown -R permet d'indiquer la récursivité de la commande,
de manière à ce que tous les sous-dossiers appartiennent au propriétaire du
dossier parent.
- L'argument www-data:www-data est le nom du nouveau propriétaire du dossier. www-data est
l'utilisateur par défaut utilisé par les serveurs web.
- La commande ls -lath est la commande ls suivi des options l, a,
t, h qui ont la signification suivante :
• l = permet d'afficher une liste détaillée des caractéristiques de chaque fichier du répertoire
(aide pour voir les droits du fichier).
• a = permet d'afficher tous les fichiers et dossiers d'un répertoire, y compris ceux qui sont cachés (ceux
qui commencent par un point « . »).
• t = permet de trier le contenu des répertoires en fonction de la date et non par ordre alphabétique.
Les fichiers les plus récents sont présentés en premier.
• h = s'utilise de pair avec l comme suit : ls -lh afin d'obtenir les informations
de poids d'occupation en plus lisible pour un humain plutôt qu'en octet (d'où -h pour human readable, c'est à dire lisible
pour un humain). Avec cette option ls va adapter son affichage en utilisant l'unité la plus adaptée.
Dans notre contexte, la commande ls -lath sur le répertoire /var/www/ va nous permettre de bien confirmer
la présence de "www-data:www-data" comme propriétaire du dossier "nom_du_virtualhost_a_configurer"
- La commande nano permet d'accéder à l'éditeur de texte nano présent sur débian. Cette même commande suivi
du nom d'un fichier comme nano xxx.conf permet d'ouvrir en mode edition le fichier xxx.conf.
Dans le cas où le fichier xxx.conf n'existerait pas, il sera automatiquement créé.
- La combinaison de touche ctrl+O dans nano permet d'enregistrer sous le fichier nouvellement créé.
- La combinaison de touche ctrl+X dans nano permet de quitter l'éditeur de texte. Si aucun enregistrement n'a
été effectué avant, il sera automatiquement demandé une confirmation de sauvegarde.
- La commande apachectl permet d'appeler un suite de commande afin de démarrer, stopper, recharger
le service apache ou vérifier la bonne syntaxe des fichiers de configuration du service.
- L'argument configtest permet de vérifier que tous les fichiers de configurations
soient bien paramétrés.
- La commande a2ensite (= apache2 enable site) permet d'activer les fichiers de configurations
des virtualhosts.
- La commande a2dissite (= apache2 disable site) permet de désactiver les fichiers de configurations
des virtualhosts.
- La commande a2enmod (= apache2 enable module) permet d'activer les modules d'apache. Ici le module ssl
et headers ont été activés.
- La commande a2dismod (= apache2 disable module) permet de désactiver les modules d'apache.
- La commande systemctl permet de gérer les états des services disponibles sur débian ou raspbian (aussi compatible sur la plupart des distributions linux). Pour l'utiliser il faut indiquer comme premier argument l'action voulu [start/restart/stop/reload] puis le service ciblé [apache2]. L'argument reload permet de recharger le fichier de configuration du serveur sur lequel le système se base pour gérer le service.
Les commandes ci-dessous vont vous permettre de configurer votre virtualhost. Le virtualhost correspond au comportement du serveur web lors de l'accès à votre site web.
#nano /etc/apache2/sites-available/nom_virtualhost.conf
(Il faut copier/coller les lignes ci-dessous
dans votre fichiers de configuration)
<VirtualHost *:80>
ServerName [votre nom de domaine ou nom DNS]
ServerAlias [votre alias]
ServerAdmin [mail de contact]
DocumentRoot /var/www/[nom_du_virtualhost_a_configurer]
# RewriteEngine On
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#--GESTION DES DROITS--#
<Directory /var/www/[nom_du_virtualhost_a_configurer]/>
Options -Indexes
Require all granted
</Directory>
#--GESTION ERREURS--#
# ErrorDocument 404 /erreur.html
#--GESTION LOGS--#
ErrorLog /var/log/apache2/[nom_du_virtualhost]/error.log
LogLevel warn
CustomLog /var/log/apache2/[nom_du_virtualhost]/access.log combined
</VirtualHost>
On peut voir deux parties dans le virtualhost présentées ci-dessus.
La première partie est le comportement qu'aura le serveur lorsque qu'un client viendra
le contacter par le port 80 (HTTP). Ainsi la deuxième partie (non présente à ce stade du tutoriel), sera le comportement
qu'aura le serveur lorsque qu'un client le contactera par le port 443 (HTTPS).
Les virtualhosts sont encadrés par les balises suivantes <VirtualHost *:[N° PORT]>
et </VirtualHost>.
Toutes les lignes précédées du caractère # constituent un commentaire au sein du fichier
de configuration. Attention cependant, lorsqu'un commentaire est placé sur la même ligne qu'une instruction,
des erreurs de syntaxe peuvent apparaîtres lors de l'éxecution de la commande apachectl configtest
et ainsi empêcher le systemctl [restart/reload] apache2.
Dans la configuration actuelle, la partie du fichier gérant le comportement à avoir lorsqu'un client souhaite
le contacter par le port 443 est actuellement inexistante. Dans le cas où nous n'avons pas encore généré
de certificat auto signé ou "réel" (ici cad approuvé par une autorité de certification reconnue), il sera impossible
de se connecter au site via le port 443 ; les navigateurs considéront la connexion comme dangereuse et empêcheront l'accès.
Pour adapter le fichier de configuration à vos besoins, il vous sera nécessaire de modifier toutes les valeurs entre crochets.
exemple [votre alias], toutes les valeurs sont arbitraires, vous pouvez mettre ce que vous souhaitez dans la
mesure du raisonnable. Les valeurs doivent correspondres à vos besoins et à ce que vous avez défini dans la partie
"Préparation d'apache"
Par la suite nous allons vérifier la bonne syntaxe de notre virtualhost puis l'activer.
#apachectl configtest
#cd /etc/apache2/sites-available/
#a2ensite nom_virtualhost.conf
#apachectl restart
Plus d'informations sur le fichier de conf : Tuto Apache2
Dernière maj du module : 27/12/2020 à 15h22
Les commandes citées ci-dessous vous permettront de créer et configurer manuellement l'HTTPS.
#openssl genrsa -out /etc/ssl/[nom_du_virtualhost]/[nom_de_la_clef].key 4096
#openssl req -new -x509 -key /etc/ssl/[nom_du_virtualhost]/[nom_de_la_clef].key -subj "/CN=[Nom afficher sur le certificat]" -out /etc/ssl/nextcloud/[nom_de_la_clef].pem
#nano /etc/apache2/sites-availables/nom_virtualhost.conf
On est dans le fichier du configuration du VirtualHost
Ajoutez/Modifiez les lignes manquantes
<VirtualHost *:80>
ServerName [votre nom de domaine ou nom DNS]
ServerAlias [votre alias]
ServerAdmin [mail de contact]
DocumentRoot /var/www/[nom_du_virtualhost_a_configurer]
RewriteEngine On
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#--GESTION DES DROITS--#
# <Directory /var/www/[nom_du_virtualhost_a_configurer]/>
# Options -Indexes
# Require all granted
# </Directory>
#--GESTION ERREURS--#
# ErrorDocument 404 /erreur.html
#--GESTION LOGS--#
ErrorLog /var/log/apache2/[nom_du_virtualhost]/error.log
LogLevel warn
CustomLog /var/log/apache2/[nom_du_virtualhost]/access.log combined
</VirtualHost>
#<VirtualHost *:443>
ServerName [votre nom de domaine ou nom DNS]
ServerAlias [votre alias]
ServerAdmin [mail de contact]
DocumentRoot /var/www/[nom_du_virtualhost_a_configurer]
#--GESTION DES DROITS--#
<Directory /var/www/[nom_du_virtualhost_a_configurer]/>
Options -Indexes
Require all granted
</Directory>
#--GESTION ERREURS--#
# ErrorDocument 404 /erreur.html
#--GESTION LOGS--#
ErrorLog /var/log/apache2/[nom_du_virtualhost]/error.log
LogLevel warn
CustomLog /var/log/apache2/[nom_du_virtualhost]/access.log combined
#--GESTION HTTPS--#
SSLEngine on
SSLCertificateFile /etc/ssl/[nom_du_virtualhost]/[nom_clef_choisit].pem
SSLCertificateKeyFile /etc/ssl/[nom_du_virtualhost]/[nom_clef_choisit].key
#</VirtualHost>
- Dans cette partie du tuto, il s'agit simplement de commenter les lignes du virtualhost 80 et de rajouter celles du virtualhost 443.
Dernière maj du module : 23/12/2020 à 21h30
Les commandes citées ci-dessous vous permettront de créer et configurer automatiquement l'HTTPS. Il est possible que la façon dont est écrit le fichier
de configuration du virtual host (pour rappel xxx.conf) puisse générer une erreur "Could not reverse map the HTTPS VirtualHost to the original" ;
dans ce cas, retournez editer le virtualhost et supprimez toutes les lignes commentées. Vérifier aussi l'absence de tabulation/d'espace à la fin des lignes non-commentées. Vérifiez par la même
occasion que vous n'ayez pas un mélange de tabulations et d'espaces sur la même ligne.
Si le problème persiste appuyez-vous sur
cette ressource (en). N'ouliez pas de stoper/redemarrer le service apache2 et de désactiver/activer votre virtualhost après chaque manipulation sur le virtualhost
lors du traitement de cette erreur.
Nous vous proposons 2 methodes pour installer certbot, en cas de problème n'hésitez pas à vous appuyez sur le site officiel.
#apt install snapd
#snap install core; sudo snap refresh core
#snap install --classic certbot
#ln -s /snap/bin/certbot /usr/bin/certbot
#certbot --apache
La ligne 2 est uniquement à effectuer sur un raspbian
#mv /etc/pip.conf /etc/pip.conf.backup
#mkdir /certbot
#cd /certbot
#wget https://dl.eff.org/certbot-auto
#chmod a+x certbot-auto
#./certbot-auto
#./certbot-auto --apache (ou --nginx)
./Selectionnez le numéro du site
./Selectionner le numéro 2
./Saisissez les commandes suivantes
#./certbot-auto renew -dry-run
#nano crontab -e
*/12 * * * * /CHEMIN/VERS/certbot-auto renew –quiet –no-self-upgrade
ctrl+o ctrl+x
- La commande cd permet de se déplacer au sein de l'arborescence Linux. Ici, on indique qu'on souhaite se déplacer dans le dossier certbot à la racine du système débian.
- La commande wget permet de télécharger un paquet directement via un lien web (URL).
- La commande chmod a+x certbot-auto permet de rendre exécutable un script.
- Les 3 dernières lignes permettent le renouvellement automatique du certificat SSL.
Dernière maj du module : 23/12/2020 à 21h53
HTTP Strict Transport Security (HSTS) est un mécanisme de politique de sécurité proposé pour HTTP, permettant à un serveur web de déclarer à un agent utilisateur (comme un navigateur web), compatible, qu'il doit interagir avec lui en utilisant une connexion sécurisée (comme HTTPS). La politique est donc communiquée à l'agent utilisateur par le serveur via la réponse HTTP, dans le champ d'en-tête nommé « Strict-Transport-Security ». La politique spécifie une période de temps durant laquelle l'agent utilisateur doit accéder au serveur uniquement de façon sécurisée. Source Wikipédia && Complément d'informations via Developper.Mozilla (en).
#nano /etc/apache2/sites-available/nom_du_virtualhost-ssl.conf
Ajoutez les lignes suivantes juste au dessus du </VirtualHost>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</IfModule>
Dernière maj du module : 27/12/2020 à 14h47
Les commandes citées ci-dessous vous permettront d'installer et configurer PHP pour apache. Généralement, on peut choisir la version php en changeant "8.0" par la version voulu exemple : "7.4" (nécessaire pour le fonctionnement du tuto nextcloud).
#apt -y install lsb-release apt-transport-https ca-certificates
#wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
#echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php8.list
#apt update && apt upgrade -y
#apt install libapache2-mod-php8.0 php8.0 php8.0-xml php8.0-curl php8.0-gd php8.0 php8.0-cgi php8.0-cli php8.0-zip php8.0-bcmath php8.0-gmp php8.0-mysql php8.0-mbstring php8.0-intl php8.0-imagick php8.0-gd -y
#nano /etc/php/8.0/apache2/php.ini
Fichier de conf php.ini
CTRL+W pour effectuer une recherche
Ajoutez/Modifiez les valeurs suivantes:
[...]
memory_limit = 512M
upload_max_filesize = 15G
max_execution_time = 360
post_max_size = 200M
output_buffering = Off
date.timezone = Europe/Paris
[...]
cltr+o ctrl+x
- Ici on vient modifier des valeurs du fichier de configuration php si vous avez des infos à nous passer n'hésitez pas : contact@blackhat-out.fr.
Ça va piquer les yeux.
#apt-get install mariadb-server apt-transport-https -y
#wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
#echo "deb https://packages.sury.org/php/ buster main" | tee /etc/apt/sources.list.d/ondrej.list
#apt update && apt upgrade -y
#mysql_secure_installation
Répondez aux questions comme bon vous semble
Puis rendez-vous dans le fichier my.cnf
#nano /etc/mysql/my.cnf
Fichier de conf my.cnf
Ajoutez/Modifiez les lignes suivantes:
[...]
[server]
skip-name-resolve
innodb_buffer_pool_size = 1G
innodb_io_capacity=4000
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
query_cache_type = 1
query_cache_limit = 2M
query_cache_min_res_unit = 2k
query_cache_size = 64M
tmp_table_size= 64M
max_heap_table_size= 64M
slow-query-log = 1
slow-query-log-file = /var/log/mysql/slow.log
long_query_time = 1
[client-server]
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_large_prefix=on
innodb_file_format=barracuda
innodb_file_per_table=1
[...]
ctrl+O ctrl+x
systemctl restart mysql
MySQL est utilisée comme base de données mais ne supporte pas les caractères codés sur 4 octets. Pour pouvoir manipuler les caractères sur 4 octets (comme les émoticônes) sans problème dans les noms de fichiers ou les commentaires par exemple, il est recommandé d'activer le support 4 octets dans MySQL, les manipulations décrites ci-dessous seront nécessaires. (Source ici)
#mysql -u root -p
> show variables like 'innodb_file_format';
Si vous avez l'élement suivant tout est OK
+--------------------+-----------+
| Variable_name | Value |
+--------------------+-----------+
| innodb_file_format | Barracuda |
+--------------------+-----------+
En revanche si vous avez l'élément suivant :
+--------------------+-----------+
| Variable_name | Value |
+--------------------+-----------+
| innodb_file_format | Antelope |
+--------------------+-----------+
Effectuez la commande suivante :
> SET GLOBAL innodb_file_format=Barracuda;
(Maintenant on va créer de la base de données)
(RAPPEL : Les valeurs entre "[xx]" sont à modifier en enlevant les crochets)
>CREATE USER '[userdb]'@'localhost' IDENTIFIED BY '[PASSWORD]';
>CREATE DATABASE IF NOT EXISTS [nextcloud] CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
>GRANT ALL PRIVILEGES on [nextcloud.*] to '[userdb]'@'localhost';
>FLUSH privileges;
- Là c'est pareil, ce sont les fichiers de configuration de la base de données, si vous avez des infos à nous passer n'hésitez pas : contact@blackhat-out.fr.
Pour la partie création de la base on s'y connait un petit peu !
- La commande CREATE est ce qui permet, lorsqu'elle est suivi d'un argument du type USER/DATABASE,
de créer un ou plusieurs élements - qui d'ailleurs se nomme "objet" en base de données (à vérifier).
- L'ensemble CREATE USER '[userdb]'@'localhost' IDENTIFIED BY '[PASSWORD]'; permet, dans l'ordre, de "créer l'utilisateur
[nom_utilisateur_voulut] à l'emplacement [localhost]". Tous les élements entre crochets dans le terminal sont des élements arbitraires que vous
pouvez définir à votre guise.
- L'ensemble CREATE DATABASE IF NOT EXISTS [nextcloud]; permet, dans l'ordre, de "créer
la base, si elle n'existe pas, [nom_de_la_base_voulut]". Pour la partie CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;, on maîtrise moins
mais normalement c'est pour autoriser les caractères UTF8mb4... voilà.
- La commande GRANT ALL PRIVILEGES on [nextcloud.*] to '[userdb]'@'localhost'; permet de donner tous les droits sur la base [nextcloud] à l'utilisateur [userdb].
- Pour finir, la commande FLUSH privileges; permet de re-charger les droits sur la base, c'est une sorte d'actualisation si je ne me trompe pas.
Les commandes citées ci-dessous vous permettront d'installer ENFIN Nextcloud.
#cd /var/www/nextcloud
#wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
Plus qu'à suivre l'assistant d'installation via un client web
https://IP_OU_FQDN/setup-nextcloud.php
"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."
Nous vous recommandons de ne pas mettre le dossier "data" dans le dossier racine de NextCloud
Désormais on est sur de la lecture purement et simplement - vous pouvez accéder à l'installation en renseignant l'adresse de votre serveur suivi de "setup-nextcloud.php" ==> https://adresse_url.fr/setup-nextcloud.php ou https://127.0.0.1/setup-nextcloud.php. On aime pas les utilisateurs assistés qui ne savent pas quoi faire dès qu'un message d'erreur indique "erreur de syntaxe" ou "commande non reconnu", du coup on ne va pas vous mettre les captures d'écran de l'assistant d'installation en vous indiquant de cliquer sur "suivant".
Dernière maj du module : 27/11/2020 à 15h12
L'objectif est d'activer le pare-feu nativement présent et de ne laisser ouvert que les ports dont l'HTTP, l'HTTPS et SSH ont besoin.
#apt-get install ufw -y
#ufw allow 80
#ufw allow 443
#ufw allow 22
#ufw enable
#nano /etc/apache2/conf-available/security.conf
Fichier de conf security.conf
Ajoutez/Modifez les lignes suivantes
[...]
ServerSignature Off
#ServerSignature On
[...]
(ctrl+o + ctrl+x)
#systemctl restart apache2
- La commande ufw est la façon simplifier de gérer NetFilter. NetFilter est le pare-feu Linux généralement géré via son "interface graphique" nommée iptable.
- Ici, on autorise l'accès aux ports 80 , 443, 22 puis on active les règles avec l'argument enable.
Les commandes citées ci-dessous vous permettront de résoudre les messages suivants présents dans la vue d'ensemble.
#apt install -y redis-server php-redis -y
#nano /var/www/[dossier nextcloud]/config/config.php
Fichier de configuration "config.php"
Ajoutez les lignes suivantes avant ");"
'memcache.local' => '\OC\Memcache\Redis', /* contient les scripts php précompilés */
'filelocking.enabled' => 'true',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
'timeout' => 0,
'dbindex' => 0,
),
ctrl+o ctrl+x
systemctl restart apache2
#nano /etc/apache2/conf-available/nom_du_virtualhost-ssl.conf
Fichier de configuration "xxx-ssl.conf"
Ajoutez les lignes suivantes avant </VirtualHost>
[...]
Redirect 301 /.well-known/carddav https://[IP_OU_FQDN]/remote.php/dav
Redirect 301 /.well-known/caldav https://[IP_ou_FQDN]/remote.php/dav
[...]
ctrl+o ctrl+x
systemctl restart apache2
- L'ajout des lignes Redirect 301 /.well-known/carddav https://[IP_OU_FQDN]/remote.php/dav et
Redirect 301 /.well-known/caldav https://[IP_OU_FQDN]/remote.php/dav doivent être ajoutées dans la configuration du
VirtualHost *443. Si vous avez utiliser certbot, cette configuration est présente dans le fichier xxx-ssl.conf.
Si vous avez utiliser l'auto-signature du certificat, la modification doit s'effectuer dans le fichier xxxx.conf.
#apt install sudo
#cd /var/www/repertoire_nextcloud
#sudo -u www-data php occ db:add-missing-indices
#systemctl restart apache2
Il arrive que NextCloud, nous indique un message de type "warning" dans la vue d'ensemble concernant add-missing-indices ou autre message du même type. Dans ce cas, il est nécessaire de se situer dans le repertoire de nextcloud et d'exécuter la commande indiquée ci-dessous avec l'argument correspondant.
Ce tutoriel se termine ici, pour toute question ou rectification, vous pouvez nous contacter par mail à contact@blackhat-out.fr.