Linux cours


Sommaire

Mise à jour de Debian

Mise à jour des sources des paquets

sudo apt update

Si des mises à jours sont disponible appliquer ces mises à jours

sudo apt upgrade

Redémarrer la machine

sudo reboot now

Installation de LAMP (Linux Apache2 MariaDB PHP)

sudo apt install apache2 php libapache2-mod-php mariadb-server php-mysql

Installation des modules php utilisés couramment par les CMS

sudo apt install php-curl php-gd php-intl php-json php-mbstring php-xml php-zip

Activer le démarrage auto du service apache2

sudo systemctl enable --now apache2

Activer le démarrage auto du service mariadb

sudo systemctl enable --now mariadb

Configurer MariaDB

sudo mysql_secure_installation

Il va vous afficher plusieurs questions

Premièrement il demande le mot de passe actuel, vu que l'on vient d'installer MariaDB il y en a pas donc il faut juste appuyer sur Entrée

Enter current password for root (enter for none): 

Ensuite il faut créer un nouveau mot de passe il faut d'abord appuyer sur Y et ensuite il faut rentrer 2 fois le nouveau mot de passe

OK, successfully used password, moving on...
Set root password? [Y/n] Y
New password: 
Re-enter new password: 

Ensuite il demande plusieurs questions il faut entrer Y pour toutes

Password updated successfully!
Reloading privilege tables..
 ... Success!
Remove anonymous users? [Y/n] 
 ... Success!
Disallow root login remotely? [Y/n] 
 ... Success!
Remove test database and access to it? [Y/n] 
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reload privilege tables now? [Y/n] 
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

Finalement il faut autoriser le port 80 dans le firewall

sudo ufw allow 80

Il faut maintenant vérifier que le site fonctionne bien en allant sur l'ip du serveur dans un navigateur web

Installation de phpMyAdmin

Installer le paquet

sudo apt install phpmyadmin

Il va poser plusieurs questions pendant l'installation

On peut ensuite accéder à phpmyadmin en allant sur http://ipduserveur/phpmyadmin Le login est root et le mot de passe est celui de MariaDB

Installation de Wordpress

Il faut commencer par se déplacer dans le bon répertoire

cd /var/www/html

Il faut ensuite renommé la page index de base pour la désactiver

sudo mv index.html index.html.bak

Après il faut installer unzip pour décompresser l'archive de wordpress que nous allons télécharger ultérieurement

sudo apt install unzip

Ensuite il faut télécharger Wordpress

sudo wget https://wordpress.org/latest.zip

On décompresse le fichier

sudo unzip latest.zip

On se rend dans le dossier de wordpress

cd wordpress

On déplace les fichiers extraits

sudo mv ./* ../

On retourne en arrière

cd ..

On supprime le dossier wordpress vide

sudo rm -R wordpress

On supprime l'archive de wordpress

sudo rm latest.zip

On retourne en arrière

cd ..

On change les permissions pour que Wordpress puisse modifier des fichiers

sudo chown -R www-data:www-data ./html

Après on crée une base de données dans phpMyAdmin

phpMyAdmin_create_database_4.4

Il faut choisir le type d'encodage utf8mb4_general_ci

Il faut ensuite se connecter au serveur via un navigateur web http://ipduserveur/wp-admin/install.php

On commence par choisir sa langue

Après on clic sur C'est parti !

Ensuite il faut configuer Wordpress

On clic sur Envoyer

Puis on clic sur Lancer l'installation

Il faut ensuite renseigner les informations du site

Finalement il faut juste cliquer sur Installer WordPress

Il redonne une dernière fois les infos

Et il n'y a plus qu'a cliquer sur Se connecter

Voila Wordpress est installé !

Installation d'un thème Wordpress

Il faut se rendre dans le panel d'administration http://ipduserveur/wp-admin

Aller dans Apparence

Et cliquer sur le bouton ajouter en haut

Ensuite il faut choisir un thème et cliquer sur Installer

Après il faut l'activer

Si le thème demande des extensions suplémentaire il faut les installer

Il faut cocher toutes les extensions, changer le menu déroullant sur Installer et cliquer sur Appliquer

Après Wordpress peut demander d'activer ces extensions

Il faut cliquer sur lancer l'activation des extensions

Ensuite il faut cocher toutes les extensions, changer le menu déroullant sur Activer et cliquer sur Appliquer

Voila le site possède maintenant un jolie thème !

Mise en place de la sauvegarde sur Wordpress

Il faut se rendre dans les extensions dans le panel d'administration et cliquer sur Ajouter

Ensuite il faut chercher BackWpup et cliquer sur Installer maintenant

Il faut ensuite cliquer sur Activer

Ensuite on se rend dans Ajouter une tâche et change le nom de la tache

Il faut aussi cocher Dans le dossier local

Finalement on clique sur Enregistrer les modifications

Après on peut se rendre dans le panneau Tâches et cliquer sur Lancer maintenant

Voila la sauvegarde a été faite !

Supprimer Wordpress

ATTENTION : AVANT DE SUPPRIMER WORDPRESS RECUPERER LA SAUVEGARDE SUR LE SERVEUR VIA L'ONGLET SAUVEGARDE DE BackWPup EN ALLANT SUR UNE SAUVEGARDE ET EN CLIQUANT SUR TELECHARGER. UNE FOIS LE ZIP TELECHARGER VOUS POUVEZ SUIVRE LES INSTRUCTIONS CI-DESSOUS.

Pour supprimer toute trace de Wordpress pour par exemple le réinstaller dans un vhosts on commence par ce rendre dans le dossier où on l'a installer

cd /var/www/html

Une fois dans le dossier on vérifier que l'on a bien les fichiers de Wordpress

ls

Si on est bien au bon endroit on peut passer à la suppresion des fichiers

sudo rm -R ./*

Voila les fichiers de Wordpress on bien été supprimer. Il ne nous reste maintenant plus qu'a supprimer la base de données

Pour ça il faut aller sur phpMyAdmin, se rendre sur la base de données aller dans l'onglet Opérations et cliquer sur Supprimer la base de données (DROP)

Création d'un vhost

Il faut commencer par créer le dossier qui sera utilisé pour stocker les fichiers (changer example.com par le nom du site web)

cd /var/www
sudo mkdir example.com

On va ensuite créer un fichier d'exemple pour vérifer que le vhost fonctionne

On commence par ce rendre dans le dossier

cd example.com

On créer un fichier index.php et on l'édite

sudo nano index.php

On entre un script php simple pour afficher sa version

<? phpinfo(); ?>

On sauvegarde avec CTRL + S et on quitte avec CTRL + X

Ensuite il faut ce rendre dans le dossier de configuration d'apache

cd /etc/apache2/sites-available

Il faut ensuite créer un fichier et l'éditer

sudo nano example.com.conf

Il faut coller ce texte et modifier certaines informations

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example.com
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

On peut maintenant enregistrer le fichier avec CTRL + S et quitter avec CTRL + X

Il faut ensuite activer le vhost

sudo a2ensite example.com.conf

On peut ensuite redémarrrer le service d'apache

sudo systemctl restart apache2

Réinstallation de Wordpress dans le vhost

Il faut ouvrir Filezilla sur Windows et entrez les informations nécessaire à la connexion

Une fois la connexion effectué on va copier l'archive de sauvegarde dans le dossier de notre utilisateur car c'est le seul endroit où l'on possède les droits de le coller

Le chemin est donc /home/NotreNomDutilisataeur/

Une fois cela effectué on peut fermer Filezilla et retourner sur le terminal

Ensuite on se rend sur le dossier de l'utilisateur

cd /home/NotreNomDutilisateur

Ensuite on va copier l'archive dans le dossier du vhost précédement crée

On cherche d'abord le nom du ficher

ls

Une fois qu'on a trouvé le nom

sudo cp 2022-11-02_15-09-41_AYK3D3O501.zip /var/www/example.com/

On se rend ensuite dans le dossier du vhost

cd /var/www/example.com

Ensuite en décompresse l'archive

sudo unzip 2022-11-02_15-09-41_AYK3D3O501.zip

On peut ensuite supprimer l'archive

sudo rm 2022-11-02_15-09-41_AYK3D3O501.zip

Après on retourne en arrière

cd ..

On change les droits du dossier

sudo chown -R www-data:www-data example.com

Il ne nous reste plus maintenant qu'a importer la base de données

Il faut donc commencer par décompresser le zip sur Windows

Récuperer le fichier sql par exemple wordpress.sql

Ensuite il faut se rendre sur phpMyAdmin et créer une base de données

Ensuite il faut se rendre sur la base de données et dans l'onglet importer.

Choisir le fichier.

Cliquer tout en bas sur executer.

Normalement tout devrait fonctionner.

Si jamais ce n'est pas le cas il est possible qu'il faille expliquer à Wordpress où sont ses fichiers

Pour cela il suffit de modifier le fichier wp-config.php

sudo nano wp-config.php

Après il faut changer l'adresse de Wordpress pour le mettre sur le vhost

define( 'WP_SITEURL', 'http://example.com' );

Ensuite il faut juste remettre les droits sur le fichier

sudo chown www-data:www-data wp-config.php

Voila la sauvegarde à été remis sur le serveur !

Installation d'un serveur Samba

Il faut commencer par installer samba

sudo apt install samba

On créer un dossier pour le partage dans le dossier de l'utilisateur changer nomdutilisateur par son nom d'utilisateur utilisé pour la connexion en terminal

mkdir /home/nomdutilisateur/sambashare/

Modifier le fichier de configuration de samba

sudo nano /etc/samba/smb.conf

On va à la fin du fichier et on ajoute

[sambashare]
    comment = Samba on Ubuntu
    path = /home/username/sambashare
    read only = no
    browsable = yes

[sambashare] est le nom du partage

comment est la description du partage

path est le chemin crée précédement

Il faut ensuite sauvegarder les changements avec CTRL + S et quitter avec CTRL + X

Après il faut redémarrer le service de samba

sudo service smbd restart

Et il faut autoriser le port de samba dans le pare-feu

sudo ufw allow samba

Il faut créer un mot de passe pour l'utilisateur

sudo smbpasswd -a $USER

Après on peut se connecter sur la machine Windows depuis l'explorateur de fichier dans la barre en haut, en utilisant le nom d'utilisateur de la machine Linux et le mot de passe crée précédement

\\adressip\sambashare

Installation d'un serveur RDP / Bureau à distance

Il faut commencer par installer xrdp

sudo apt install xrdp

Ensuite si on veut un environnement de bureau (interface graphique) il faut en installer un par exemple xfce4

sudo apt install xfce4

Il faut ensuite redémarrer

sudo reboot now

Il faut aussi ouvrir le port dans le pare-feu

sudo ufw allow 3389

Il faut après ouvrir Bureau à distance sur Windows et entrer l'adresse IP du serveur et accepté le message d'alerte

Ensuite il faut se connecter avec les identifiants de la machine Linux

Installation d'un serveur d'envoi de mail SMTP

Il faut d'abord installer postfix

sudo apt install mailutils postfix

On commencer par appuyer sur Ok

Il faut choisir l'option Site Internet

Il faut ensuite appuyer sur Ok

Il faut ensuite entrer le nom de la machine

Après il faut modifier la config de postfix

sudo nano /etc/postfix/main.cf

Il faut chercher ces lignes (avec CTRL + W) le plus simple est de rechercher mailbox_size

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

Il faut changer la valeur de inet_interfaces en loopback-only

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

On enregistre en faisant CTRL + S et on quitte avec CTRL + X

Il faut ensuite redémarrer le service de postfix

sudo systemctl restart postfix

Il faut ouvrir les ports de SMTP

sudo ufw allow 25
sudo ufw allow 465
sudo ufw allow 587
sudo ufw allow 2525

Ensuite on peut tester la configuration en envoyant un mail

echo "Contenu du mail" | mail -s "Sujet du mail" mail@uha.fr

Le fichier htaccess

Le fichier htaccess permet l'accès à un vhost, par exemple en ajoutant un nom d'utilisateur et un mot de passe.

On commence par se rendre dans le dossier des fichiers de configuration des vhosts :

cd /etc/apache2/sites-available

On modifie le fichier de configuration du vhost que l'on souhaite sécuriser :

sudo nano example.com.conf

On ajoute la balise Directory à la fin de la balise VirtualHost :

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName vhost.test
        ServerAlias www.vhost.test
        DocumentRoot /var/www/example.com
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/example.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
</Directory>
</VirtualHost>-

Il faut modifier le chemin dans la première balise Directory pour pointer sur le chemin précédemment mis dans DocumentRoot plus haut dans le fichier.

On sauvegarde le fichier avec CTRL+S et on quitte avec CTRL+X.

On peut ensuite redémarrer le service d'apache :

sudo systemctl restart apache2

On va maintenant créer un utilisateur et un mot de passe pour la connexion au site web :

sudo htpasswd -c /etc/apache2/.htpasswd mathias

On peut changer l'utilisateur en changer le nom à la fin (dans ce cas mathias)

La commande va demander 2 fois le même mot de passe

New password:
Re-type new password: 

On va ensuite dans le dossier du vhost que l'on veut sécuriser :

cd /var/www/example.com

Il faut ensuite créer un fichier et l'éditer :

sudo nano .htaccess

On colle ce texte dans le fichier

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

On peut changer ce que le navigateur va afficher à l'utilisateur en modifier le AuthName ici "Restricted Content".

On peut ensuite redémarrer le service d'apache :

sudo systemctl restart apache2

Maintenant si on se connecte sur son vhost on a un message nous demandant le login et le mot de passe crée précédemment.

La gestion des utilisateurs et des groupes

Sur un système UNIX comme Linux, un administrateur peut créer des utilisateurs et des groupes et les gérer.

Création d'un utilisateur

Pour faire cela nous allons commencer par créer un utilisateur :

sudo adduser nomdutilisateur

On peut ajouter plusieurs paramètres à cette commande :

Pour appliquer ces options il suffit de les ajouter dans la commande comme ceci :

sudo adduser nomdutilisateur --no-create-home

Une fois le mot de passe de l'utilisateur défini, le système va nous demander plusieurs informations :

Nouveau mot de passe :
Retapez le nouveau mot de passe :
passwd: password updated successfully
Changing the user information for testusr
Enter the new value, or press ENTER for the default
    Full Name []: Test USR
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
Cette information est-elle correcte ? [O/n]

La seule information importante dans cette liste est Full Name, c'est le nom qui s'affiche quand il faut un "joli" nom c'est à dire un nom qui puisse contenir des espaces et des majuscules. Les autres paramètres ne servent généralement à rien.

Création d'un groupe

Pour faire cela nous allons commencer par créer un groupe :

sudo addgroup nomgroupe

On peut changer le nom du groupe ici nomgroupe

On peut ensuite assigner un utilisateur à ce groupe :

sudo adduser nomdutilisateur nomgroupe

Gestion des droits

L'intérêt de créer des utilisateurs et des groupes est de restreindre les droits à un utilisateur ou au membre d'un groupe.

Prenons comme exemple un dossier data à la racine de la machine (/data)

De base les dossiers à la racine appartiennent à l'utilisateur et au groupe root, ce qui fait que l'utilisateur root est la seule personne qui puisse avoir tous les droits sur ce dossier, on peut voir cela avec la commande ls -al

Il y a aussi un autre facteur à prendre en compte les droits sur le dossier en lui même.

Dans la capture d'écran plus haut on voit qu'au début il y est écrit drwxr-xr-x ce n'est pas un language alien mais bien des droits, c'est assez simple à comprendre, si on le découpe :

Premièrement d : c'est pour dire que c'est un dossier (directory) s'il n'est pas présent c'est que c'est un fichier

Ensuite il faut découper la suite en 3 blocs de 3 caractères (en comptant les tirets). Le premier bloc ici rwx correspond au droit que l'utilisateur qui possède le dossier a.

Le second bloc ici r-x lui correspond au droit du groupe qui possède le dossier a.

Finalement le troisème bloc ici r-x correspond au droit qu'on tous les utilisateurs de la machine sur ce dossier

Je vais maintenant rapidement parler de la signification de r, w et x

Evidemment comme toujours sous Linux ça ne s'arrête pas la chaque droit à une valeur en lettre, r par exemple et une valeur en chiffre 4 par exemple :

On peut additionner ces chiffres pour créer les droits pour un bloc (utilisateurs, groupes ou tous le monde)

Par exemple si je veux que l'utilisateur qui possède le dossier /data ai tous les droits, que le groupe ne puisse que lire, et que le reste des utilisateurs ne puissent rien faire je fais :

Donc les droits sur ce dossier en chiffres seront de 740.

ATTENTION : il ne faut jamais donner tous les droit à tous le monde, c'est dire rwxrwxrwx ou 777 en chiffre, car cela veut dire que tous le monde peut tout faire, c'est donc une faille de sécurité MAJEURE (donc pitié arrêtez les chmod 777 (la personne se reconnaitera))

Maintenant que je suis revenu sur les bases des droits, on va les appliquer.

Donc je rappelle que notre dossier est /data.

Maintenant on veut que l'utilisateur michel soit le propriétaire de ce dossier

Et que le groupe de ce dossier soit le groupe dupont

On commence par changer le propriétaire et le groupe du dossier :

sudo chown -R michel:dupont /data

Donc chown permet de changer cela.

L'option -R permet de rendre l'action récursive, c'est à dire que tous les dossiers et fichiers que contient ce dossier aurons les mêmes changements

L'utilisateur propriétaire de dossier et le groupe de ce dossier sont séparés par :

Ensuite imaginons maintenant que l'on veut que l'utilsateur possèdant le dossier ainsi que le groupe de ce dossier ai tous les droits (lecture, écriture et exécution) mais que les autres personnes n'ont que le droit de lecture.

On commence par réfléchir en "lettre" :

Ce qui donne rwx pour l'utilisateur et aussi rwx pour le groupe et r-- pour les autres.

Maintenant il ne reste plus qu'à convertir cela en chiffres pour chaque partie :

Cela donne donc en chiffre 774.

On peut donc appliquer les nouvelles permissions de façon récursive sur le dossier /data :

sudo chmod -R 774 /data

On peut vérifier que cela a bien fonctionné :

ls -al /

On voit bien qu'on l'on a les permissions que l'on souhaitait ainsi que les bons propriétaires et groupe sur le dossier /data

Faire un script bash pour sauvegarder un dossier

On peut vouloir créer un script pour sauvegarder un répertoire de son serveur.

Pour créer un script bash on commence par faire un fichier .sh

Mais avant de faire ça on se rend dans son répertoire home :

cd /home/mathias

On peut ensuite créer le fichier du script :

nano backup.sh

Sachant que backup est le nom du fichier.

Ensuite une fois dans l'éditeur de texte on commence toujours un script bash avec :

#!/bin/bash

On commence par définir la date du jour dans une variable pour différencier les fichiers les uns des autres :

day=$(date +%F)

On va ensuite compresser les fichiers du dossier que l'on veut sauvegarder, par exemple /www/var qui contient tous les sites web hébergé sur ce serveur. Et on va directement le mettre dans le répertoire de sauvegarde :

tar czf "/home/mathias/backup/$day.tgz" /var/www

ATTENTION : Il faut bien sur avoir préalablement créer le dossier backup

On peut maintenant sauvegarder CTRL+S et fermer l'éditeur de texte CTRL+X

Pour exécuter le script il faut d'abord lui donner le droit d'exécution :

sudo chmod +x backup.sh

On peut maintenant l'exécuter pour voir si ça fonctionne

./backup.sh

Utilisation d'une tâche cron

Une tâche cron permet d'automatiser une commande ou un script.

On commence par modifier le ficher de configuration de la tache cron :

sudo crontab -e

Si un choix pour l'éditeur est proposé on choisit nano

Ensuite on va à la fin du fichier

On peut ensuite créer une nouvelle tâche cron via la structure suivante :

mm hh jj MMM JJJ [user] tâche > log

On va donc créer une tâche pour exécuter notre script crée précédement :

00 01 * * * /home/mathias/backup.sh >> backup.log

Cette tache va s'exécuter tous les jours à 01h00 et va mettre le résultat de son exécution dans backup.log

Source : Merci à Linuxtricks pour les informations sur crontab : Cron et crontab : le planificateur de tâches ! - Wiki - Wiki

Mise en place d'un certificat SSL auto-signé

Il faut commencer par ajouter le port 443 dans le firewall :

sudo ufw allow 443

Il faut ensuite activer le mod_ssl d'apache :

sudo a2enmod ssl

On redémarre le service d'apache :

sudo systemctl restart apache2

On peut ensuite créer le certificat SSL :

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Il va ensuite nous demander certaines informations pour créer le certificat :

Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:Mulhouse
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mathias Corp
Organizational Unit Name (eg, section) []:MC
Common Name (e.g. server FQDN or YOUR name) []:Mathias
Email Address []:test@test.fr

On va ensuite se rendre dans le dossier des vhosts :

cd /etc/apache2/sites-available/

Et on va modifier le fichier de configuration du vhost que l'on veut sécuriser :

sudo nano example.com.conf

On commence par modifier le port du vhost :

<VirtualHost *:443>

Et on ajoute après CustomLog :

SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

On enregistre avec CTRL+S et on ferme avec CTRL+X

On vérifie ensuite que la syntaxe du fichier est ok :

sudo apache2ctl configtest

On ajoute le ssl via a2ensite :

sudo a2ensite default-ssl

On peut ensuite redémarrer le service d'apache :

sudo systemctl restart apache2

On se retrouve ensuite sur une page qui nous indique qu'il y a un risque de sécurité, ce qui n'est pas le cas c'est juste que le certificat n'est pas signé :

On clique sur avancé puis accepter le risque et poursuivre