Administration Systeme Linux - v2 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

ADMINISTRATION SYSTÈME LINUX

PRÉSENTATION DU FORMATEUR

Josué ROMBA Ingénieur systéme Expert Cybersécurité Intégrateur de Solution Opensource

SOMMAIRE I.

Les fondamentaux 1- Introduction à Linux

2- Le shell 3- Le traitement du texte

4- Arborescence de fichiers

5- Gestion des utilisateurs

SOMMAIRE II. Administration avancée

1- Démarrage et processus

2- Installation de logiciels 3- Script Shell

4- Disques et Stockage LVM

5- Configuration du réseau

SOMMAIRE III.

Hardening 1- Gestion sécurisée

2- Secure Shell 3- Routage et Pare-feu

LES FONDAMENTAUX

Introduction à Linux Une des tâches du système d’exploitation est d’offrir aux utilisateurs une interface simple et conviviale avec le matériel.

Un système d’exploitation (souvent appelé OS pour Operating System) est un ensemble de programmes qui dirige l’utilisation des capacités d’un ordinateur (matériel) par des logiciels applicatifs. Fonction d’un OS

Il s’occupe au minimum de : - La gestion des processus (programmes) - La gestion de la mémoire - Le système de fichiers - La gestion des entrées/sorties

Introduction à Linux

LINUX, kesako?

➔ Linux est un système d’exploitation né en 1991 ➔ C’est un système libre ➔ Il fait partie de la famille des Unix

Le shell (interpréteur de commandes)

➔ C’est un programme qui reçoit les commandes données par un utilisateur et les envoie au système en charge de les exécuter

➔ C’est aussi un langage de programmation ( voir scripting shell) ➔ Plusieurs shell ○ bourne again shell ( bash) ○ Korn shell (ksh) ○ C shell (csh)

Les commandes de base

pwd

man

cd touch

ls

mkdir

rm cat

Les commandes Syntaxe d’une commande commande [option(s)] [arguments(s)] Commandes de base

● ● ● ● ● ● ● ●

man : afficher le manuel d’utilisation d’une commande pwd : savoir où nous sommes dans l’arborescence cd : se déplacer dans l’arborescence ls: lister le contenu touch : créer un fichier rm: supprimer un fichier mkdir: créer un dossier cat: afficher le contenu d’un fichier

Opérateurs conditionnels

Exécutions conditionnelles de base

&& et || sont des séparateurs de commandes conditionnels.

➔ true && echo la commande précédente a réussi

➔ false || echo la commande précédente a échoué

PRATIQUE

Lab- Les commandes de base ● Afficher votre répertoire actuel ● Créer un répertoire testdir dans votre répertoire personnel ● Passer dans le répertoire testdir ● Créer 2 dossiers nommés testchild1 et testchild2 à l'intérieur du répertoire testdir ● Créer un fichier myfile dans le répertoire testchild1 créé précédemment ● Créer un fichier myfile2 dans le répertoire testchild2,tout en restant dans le répertoire testchild1 ● Supprimer le répertoire testchild2 et son contenu

Le traitement de texte ● Les éditeurs de texte: ○ nano ○ vi/vim ○ emacs ● Les flux de redirections Un processus et ses 3 descripteurs de fichiers STDIN (0), STDOUT (1) et STERR (2) STDIN < ------ PROCESSUS ---- > | ---- >> STDOUT | ---- | | 2> STDERR

PRATIQUE

Lab- Les commandes de base ● Ajouter le contenu suivant au fichier myfile créé lors du lab précédent ( testdir/myfile) “Nous suivons la super formation sur l’administration GNU/Linux.” ● Fermer le fichier puis sortez du fichier

● Sans entrer dans le fichier myfile, ajouter ceci à la fin “La distribution utilisée est CentOS” ● Afficher le contenu du fichier testdir/otherfile. Les messages d’erreur doivent être enregistrés dans un fichier error.log

Lab- redirection

La commande suivante donne des erreurs et une sortie standard : find /etc/ -name "*.crt"

-

Isoler la sortie erreur Isoler la sortie standard Diviser les sorties

L’Arborescence

L’Arborescence

● ● ● ● ● ● ● ● ● ● ●

/ : Répertoire racine /bin: Exécutables binaires du système cp, ls, mount, rm… /boot: Fichiers de démarrage de Linux. /dev: répertoire des périphériques /etc: Fichiers de configuration du système, des services… /home: Répertoire personnel des utilisateurs. /lib: Bibliothèques système partagées. /media: Point de montage des clés USB, CD-ROM… /mnt: Point de montage temporaire de partitions et périphériques. /proc: Informations sur les processus et le noyau Linux. /root: Répertoire personnel du super utilisateur

Gestion des utilisateurs et permissions

Sous Linux,

● Tout est fichier ● Chaque fichier appartient à un utilisateur ● Les autres utilisateurs ont accès (ou pas) , selon les droits appliqués au fichier

Gestion des utilisateurs et permissions

❖ Chaque utilisateur ● a un identifiant unique appelé UID;

● appartient à un groupe au moins.

❖ Chaque groupe a son identifiant GID

Gestion des utilisateurs et permissions

Il existe 3 types d’utilisateurs

● le compte root: c’est le super utilisateur, l’Administrateur du système. Son UID est 0;

● les utilisateurs système: Utilisés par le système pour la gestion des droits d’accès des applications ; ● les utilisateurs ordinaires: autres comptes permettant de se connecter au système.

Gestion des utilisateurs et permissions Les droits sur les fichiers sont visibles grâce à la commande ls -l -rwxrw-r-x 1 dinho footx 528 nov. 2 01:46 demo01.sh 1 23 4 5 Champ

Description

1

Permissions du propriétaire (user), ici rwx (read,write, execute)

2

Permissions du groupe propriétaire (group), ici rw- (read, write)

3

Permissions des autres utilisateurs (others), ici r-x

4

Propriétaire du fichier

5

Groupe propriétaire du fichier

Gestion des utilisateurs et permissions

useradd

userdel

usermod

chgrp

chown

chmod

Droits étendus

Les droits étendus sont des variantes sur l’exécution :

● SUID sur un exécutable, valeur octale : 4000, valeur symbolique : s ● SGID sur un fichier ou un dossier, Valeur octale : 2000, valeur symbolique : s ● Sticky bit, Valeur octale : 1000, valeur symbolique : t

Les ACLs Access control lists (ACLs) offrent la possibilité de positionner des droits d'accès supplémentaires. Le propriétaire d'un fichier peut grâce aux ACLs accorder des privilèges à un ou plusieurs utilisateurs et/ou groupes qui se substitueront aux droits d'accès de base.

PRATIQUE

Lab- Utilisateurs et permissions ● Créez un compte utilisateur nommé serena, son répertoire personnel et une description (ou commentaire) qui lit Serena Williams. Faites tout cela en une seule commande. ● Créez un compte utilisateur nommé venus, son répertoire personnel et une description (ou commentaire) qui lit Venus Williams. Le shell de cet utilisateur doit être le bash. Faites tout cela en une seule commande. ● Créer un fichier rolandgarros appartenant à serena. serena doit être le seul utilisateur à consulter, modifier ou supprimer ce fichier ● Supprimer l’utilisateur serena ● Faites en sorte que venus soit le nouveau propriétaire du fichier rolandgarros. Les utilisateurs du même groupe que venus doivent lire ce fichier désormais.

Lab- Droit étendu

● Créer un dossier appartenant au groupe “omega”. ● Le dossier est partagé par deux utilisateurs “alfa” et “beta” appartenant au groupe secondaire “omega”. ● Ce dossier partagé est leur dossier d’accueil et personnel. ● Ces utilisateurs peuvent lire le contenu du dossier et ajouter ou modifier des fichiers. Fixer le “sticky bit” et le “SGID” sur ce dossier en démontrant leur utilité. ● En options : ○ Retirer à ces utilisateurs les droits d’accès à une console graphique. ○ Désactiver le compte de “beta” (plusieurs solutions)

Lab- ACL Nous souhaitons sauvegarder des repertoires web distants avec rsbackup, un utilitaire qui utilise rsync pour réaliser des sauvegardes incrémentales. Pour pouvoir l'utiliser il faut sur le serveur distant un utilisateur accessible par ssh ayant des droits de lecture sur tous les éléments que l'on veut sauvegarder. Les ACLs permettront de donner à un utilisateur rbackup le droit de lecture seule sur des répertoires entiers sans avoir à jongler avec les groupes, SGID et autres, car les droits unix ont souvent le défaut de conduire à des permissions trop larges ou trop étroites. Pour rappel, sous Debian les sites web sont par défaut dans un répertoire /var/www/html

ADMINISTRATION AVANCEE

Processus de démarrage Ordre

Processus

Description

1

BIOS

Contenu dans la mémoire morte (ROM) de la carte mère permettant d'effectuer sa mise sous tension

2

MBR

Contient le chargeur d'amorçage( bootloader)

3

GRUB

GRUB charge et exécute le noyau sélectionné

4

Noyau

Le noyau charge et exécute le programme /sbin/init

5

Init

Il consulte le fichier /etc/inittab pour décider quel niveau d'exécution démarrer

6

Runlevel

Ce sont les programmes du niveau d'exécution sur lequel votre système fonctionne qui sont chargés à partir du répertoire représentant le niveau d'exécution du système.

Gestion des processus Chaque processus dispose :

• d’un PID : Process IDentifiant, identifiant unique de processus ; • d’un PPID : Parent Process IDentifiant, identifiant unique de processus parent

Par filiations successives, le processus init est le père de tous les processus. • Un processus est toujours créé par un processus père ; • Un processus père peut avoir plusieurs processus fils

Gestion des processus

Gestion des processus

ps

kill

fg

nohup

bg

nice

PRATIQUE

Lab- Gestion des processus

Ouvrez la commande man ps, puis suspendez le processus. Ouvrez la commande man top, puis suspendez le processus. Ouvrez la commande man kill, puis suspendez le processus. Ouvrez la commande man ls, puis suspendez le processus. Affichez la liste des PIDs des processus suspendus à l'aide de la commande jobs. À l'aide d'une substitution, tuez tous les processus suspendus en une seule commande. Si cela ne fonctionne pas, utilisez le signal SIGKILL au lieu du signal par défaut (SIGTERM).

Installation de logiciels

Sur un système Linux, il est possible d’installer un logiciel de deux façons : • en utilisant un gestionnaire de paquets ; • en compilant les fichiers sources.

Installation de logiciels

Les gestionnaires de paquets les plus connus sont: • apt pour les Debian-based ;

• yum pour les Red Hat-based.

PRATIQUE

Lab install

● Installez le paquet apache2 ● Ensuite installez le paquet nginx

● Assurez vous que les services nginx et httpd sont actifs. Vous pouvez changer le port si besoin ● Configurer un reverse proxy avec nginx en frontend et apache2 en backend

Lab install reverse proxy avec nginx en frontend et apache2 en backend

ServerName xxxxxx ServerAlias xxxxxx ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

Lab install reverse proxy avec nginx en frontend et apache2 en backend server { listen 80; root /var/www/html/; index index.html index.htm; server_name example; location \ { proxy_pass http://127.0.0.1:7080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; }

}

Script shell Principe: réunir dans un même fichier toutes les commandes nécessaires pour réaliser une action ● Le script commence par le shebang (#! ) suivi de l’interpréteur choisi. Pour bash, ce sera #!/bin/bash. Pour le shell classique, on aura #!/bin/sh ● Le nom du script devra respecter quelques règles : ○ pas de majuscule, ○ pas de nom de commandes existantes ○ extension en .sh pour indiquer qu’il s’agit d’un script shell

Script shell Concepts à maîtriser:

● ● ● ● ● ●

Variables Fonctions tests Conditions boucles debug

Script shell Concepts à maîtriser:

Variables ● Déclarer une variable nomdelavariable=valeur (sans espace) ● Les variables d’environnement ( voir la commande env) ● Les variables de paramètres. ./variables.sh param1 param2 param3 $1 est le 1er paramètre $2 le second paramètre $# le nombre de paramètres

Script shell Les fonctions

function ma_fonction { echo hello world }

Script shell Les tests

Voir “man test”

Script shell Les structures conditionnelles et tests

if condition;then instruction(s) else instruction(s) fi

[expression] Ou test expression

case word in pattern1 | pattern3 ) Statement(s) to be executed if pattern1 or pattern matches ;; pattern2) Statement(s) to be executed if pattern2 matches ;; *) Default condition to be executed ;; esac

Script shell Les boucles

for VARIABLE in file1 file2 file3 do command1 on $VARIABLE command2 commandN done

while [ condition ] do command1 command2 command3 done

PRATIQUE

Lab- script shell

● Ecrire un script shell qui affiche à l’écran “Hello World” ● Ecrire un script qui permet d’installer apache et permet d’afficher une page web “Hello apache, welcome here”

● Écrire un script qui demande deux nombres et affiche la somme et le produit

Lab2- script shell

● Écrivez un script qui vérifie l’existence d’au moins un paramètre dans la commande. ● Écrivez un script qui vérifie que deux paramètres sont compris dans un intervalle de 0 à 100. ● Écrivez un script qui demande O/o/Oui/oui et N/n/Non/non dans toutes ses formes et qui rend la valeur. ● Écrivez un script qui ajoute un utilisateur existant dans un groupe.secondaire ● Écrivez un script qui utilise les options de la commande test (ou [ ]) pour décrire le fichier qui lui est passé en argument.

Gestion des disques

Les systèmes de fichiers

Sur chaque partition, les fichiers sont organisés selon ce qu'on appelle un système de fichiers. C'est en quelque sorte une façon d'organiser les fichiers. Système de fichiers Windows

FAT16, FAT32, NTFS

Système de fichiers Linux

EXT2, EXT3, EXT4

Gestion des disques

Commandes de gestion de disque Linux couramment utilisés

du

df

fdisk

mkfs

fsck

Le réseau sous Linux

Les hommes utilisent des adresses postales pour s’envoyer des lettres, des adresses email pour s’envoyer des e-mails. Dans un réseau TCP/IP, les machines d’un réseau communiquent entre elles grâce à une adresse appelée adresse IP

Le réseau sous Linux

Deux versions d’adresses IP sont utilisées à l'heure actuelle :



IPv4 : comprend quatre chiffres, chacun compris entre 0 et 255, séparés par des points. Exemple : 5.62.42.77



IPv6: se compose de huit groupes de quatre chiffres hexadécimaux. Exemple:2002:0de6:0001:0042:0100:8c2e:0370:7234

Le réseau sous Linux

Il existe 2 méthodes d’attribution des adresses IP à des machines dans un réseau:

● L’adresse IP statique : se fait en générale manuellement via une commande ou l’édition de fichiers ● L’adresse IP dynamique: il existe un serveur DHCP qui attribue les adresses de façon automatique aux machines du réseau

Le réseau sous Linux

Il existe 2 méthodes d’attribution des adresses IP à des machines dans un réseau:

● L’adresse IP statique : se fait en générale manuellement via une commande ou l’édition de fichiers ● L’adresse IP dynamique: il existe un serveur DHCP qui attribue les adresses de façon automatique aux machines du réseau

Le réseau sous Linux

Adressage statique sous CentOS 7 Méthode 1: Outil en ligne de commande

1. Identifier les cartes réseaux présentes sur la machine, exécuter la commande suivante: nmcli d 2. Lancer l’assistant, de configuration des cartes réseaux: nmtui 3. Redémarrer le service réseau, Une fois la configuration réseau terminée: systemctl restart network

Le réseau sous Linux

Méthode 2: Fichier de configuration

Il faut créer le fichier ifcfg-name_of_interface dans le dossier /etc/sysconfig/network-scripts Exemple: interface eth0, fichier ifcfg-eth0 # vim /etc/sysconfig/network-scripts/ifcfg-eth0

Le réseau sous Linux

DEVICE="eth0"

BOOTPROTO=static ONBOOT="yes" IPADDR=172.16.1.115 NETMASK=255.255.255.0

Il faut redémarrer le service network après la configuration

* L’instruction BOOTPRO mis à dhcp permet de basculer la carte réseau en configuration dynamique DHCP

INTEGRATION DE SERVICES

Nginx - Labs

Lien: shorturl.at/egmH4

Nginx - Labs

eunice.mxdjo.xyz kouame.mxdjo.xyz brou.mxdjo.xyz

yao.mxdjo.xyz

INTEGRATION DE SERVICES

Docker

Introduction - Docker



Pourquoi Docker? L'organisation des applications

Introduction - Docker



Pourquoi Docker? L'organisation des applications

Introduction - Docker

● ● ●

Pourquoi Docker? L'organisation des applications La portabilité La sécurité

Introduction - Docker

Installation de Docker

Reference: https://docs.docker.com/engine/

Introduction - Docker

Terminologie docker



Container: enveloppe une application dans “une boîte” avec tout ce dont il a besoin pour

s'exécuter ●

Image: Un package avec toutes les dépendances et informations nécessaires pour créer un conteneur



Registry: Endroit ou sont stockés les images

Introduction - Docker Architecture Docker

Commandes de base Docker ●

docker run xxxx



docker ps



docker stop nom_du_containeur



docker rm nom_container



docker images



docker pull nom_image



docker rmi nom_image



docker run -d nom_container



docker attach id_du_container



docker run -p 80:5000 xxxx



docker run -v /chemin/client:/chemin/container/

Commandes de base Docker labs



Déterminer la version de Docker server installée



Exécutez un container avec l'image redis



Exécutez un container nginx en background



Télécharger l'image nginx:1.14-alpine sans exécuter un container avec



Exécutez un container avec l'image redis, en background et donner lui le nom my-redis



Exécuter un container avec l'image nginx:1.20.1 et exposer le sur le port 80 du server



Supprimer tous les containers

Créer une image Docker

Créer à partir d’un container existant



Exécuter le container



Mener les actions voulues



Faire un docker commit pour sauvegarder nos actions (création de l’image)



Changer le tag de l’image avec docker tag

Créer une image Docker - labs



Télécharger l’image nginx



Créer un container nginx nommé nginx_test.



Créer un index.html et le copier sur le container en étant sur le CLI (chemin vers le index.html)



Créer une image docker à partir de ce container

Créer une image Docker - labs



Télécharger l’image nginx docker image pull nginx



Créer un container nginx nommé nginx_test.



Créer un index.html et le copier sur le container en étant sur le CLI (chemin vers le index.html)



Créer une image docker à partir de ce container

Créer une image Docker - labs ●

Télécharger l’image nginx

docker image pull nginx ●

Créer un container nginx nommé nginx_test. Exposer le container vers le port 8080 du host

docker run -d --name nginx_test nginx ●

modifier le index.html de ce container en étant sur le CLI (chemin vers le index.html)



Créer une image docker à partir de ce container

Créer une image Docker - labs ●

Télécharger l’image nginx docker image pull nginx



Créer un container nginx nommé nginx_test. Exposer le container vers le port 8080 du host docker run -d --name nginx_test -p 80:8080 nginx



modifier le index.html de ce container en étant sur le CLI (chemin vers le index.html) docker cp index.html nginx_test:/usr/share/nginx/index.html



Créer une image docker à partir de ce container

Créer une image Docker - labs ●

Télécharger l’image nginx docker image pull nginx



Créer un container nginx nommé nginx_test. Exposer le container vers le port 8080 du host docker run -d --name nginx_test -p 80:8080 nginx



modifier le index.html de ce container en étant sur le CLI (chemin vers le index.html) docker cp index.html nginx_test:/usr/share/nginx/index.html



Créer une image docker à partir de ce container docker commit nginx_test docker tag id_du_commit user/nouveau_nom

Créer une image Docker - labs ●

Télécharger l’image nginx docker image pull nginx



Créer un container nginx nommé nginx_test. Exposer le container vers le port 8080 du host docker run -d --name nginx_test -p 80:8080 nginx



modifier le index.html de ce container en étant sur le CLI (chemin vers le index.html) docker cp index.html nginx_test:/usr/share/nginx/index.html



Créer une image docker à partir de ce container docker commit nginx_test docker tag id_du_commit user/nouveau_nom



partager docker login docker push user/nouveau_nom

Créer notre image Docker



La construction d’une image se fait avec le Dockerfile



Ensuite on fait le build (docker build )



Après on partage ○

Connexion au docker hub



push vers le docker hub

Créer notre image Docker



La construction d’une image se fait avec le Dockerfile



Ensuite on fait le build (docker build )



Après on partage ○

Connexion au docker hub



push vers le docker hub

Créer notre image Docker Instructions du DOCKERFILE ●

FROM php:7.2-apache



WORKDIR



COPY



ENV



RUN



EXPOSE



CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Créer une image Docker - labs



Créer une image d’une application php avec un index.php





Partager l’image sur le Hub



Créer un container avec cette image

Ansible

Gestion de configuration Ansible C’est quoi, Ansible?

Ansible est un outil de gestion de configuration. Expliqué simplement, on dira qu’il aide à effectuer les tâches (ex: éditer un fichier de configuration, redémarrer un service, installer un paquet), cela sur plusieurs serveurs en même temps.

Gestion de configuration Ansible

Pré-requis ●

python sur la machine de contrôle et sur les machines à contrôler



Une connexion SSH entre le client et le serveur ansible

Installation https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

Gestion de configuration Ansible

Fonctionnement On désire faire tourner le service nginx sur un serveur ubuntu. Il faut donc ●

● ●

Installer le paquet nginx Générer un fichier de configuration nginx Démarrer le service nginx

Toutes ces actions seront définis dans un fichier YAML appelé playbook

Gestion de configuration Ansible

Fonctionnement Ansible va: 1. 2. 3. 4. 5.

générer un script Python qui installe le paquet nginx copier le script sur le serveur distant Exécuter le script sur le serveur Attendre que l'exécution soit complète Passer à la prochaine tâche dans le playbook

Gestion de configuration Ansible Les playbooks Les actions à effectuer sont définis dans un fichier YAML appelé playbook. Au début de chaque playbook, on définit les hôtes ou groupes d’hôtes auxquelles ils s’appliquent

Gestion de configuration Ansible Les playbooks Après avoir défini les hosts, on définit les tâches (tasks)

Gestion de configuration Ansible Les actions pré et post-playbook

Avant d’écrire le playbook, il faut: ● ●

générer une clé ssh et la copier sur les hôtes à configurer par Ansible définir les hôtes dans un fichier appelé inventory

Après écriture du playbook, il faut le lancer avec la commande ansible-playbook

HARDENING

Gestion sécurisée



Désactiver le shell ou l'accès élevé pour les utilisateurs standard/intégrés



Vérifiez qu'aucun compte non root n'a un UID défini sur 0



Désactiver la connexion en tant que root



Désactiver tous les services en cours d'exécution inutiles (init.d et xinetd)



Désinstaller/désactiver toutes les applications inutiles ou non sécurisées (ftp, telnet, X11)

Gestion sécurisée



Activer SELinux



Utiliser des mots de passe complexes pour tous les comptes



Installer et configurer un pare-feu



Désinstaller/désactiver toutes les applications inutiles ou non sécurisées (ftp, telnet, X11)



Chiffrer la communication ( Utiliser SSH, VPN, SSL, SFTP )

Gestion sécurisée



Mettre à jour le système (yum, apt, etc.)



Configurer le chiffrement du disque



Désactiver les périphériques USB et périphériques



Créer un utilisateur non root pour une utilisation quotidienne



Supprimer tous les comptes inutilisés

Secure Shell (SSH)

Dans la plupart des cas, l’administrateur devra se connecter à distance pour gérer le système. Il y’a 2 protocoles pour ce besoin : telnet et SSH.

SSH envoie toutes les données dans un format crypté, mais Telnet envoie les données en texte brut. Par conséquent, SSH utilise un canal sécurisé pour transférer des données sur le réseau, mais Telnet utilise une manière normale de se connecter au réseau et de

communiquer

Secure Shell (SSH)

Configuration basique SSH ●

Désactiver IPv6 si ce n'est pas utilisé



Interdire les connexions en tant que root



Ne pas autoriser les connexions à l'aide d'un mot de passe



Si connexion par mot de passe, définir un nombre limité de tentatives



Installer et configurer Fail2ban pour bloquer les tentatives d’intrusion échouées

MERCI