Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🐧 Linux Red Hat (RHEL) – Admin. & SĂ©curitĂ©

Guide complet IDEO‑Lab sur RHEL, Rocky, Alma : DNF, firewalld & SELinux.

1.1

Famille RHEL

RHEL, Fedora, CentOS, Rocky, AlmaLinux.

RHEL Rocky Linux Fedora
1.2

Install & Repos

Anaconda, AppStream, EPEL.

Anaconda AppStream EPEL
1.3

Partitionnement

LVM (gestion) & XFS (systĂšme de fichiers).

LVM XFS /boot
2.1

Paquets : dnf

dnf install, search, repolist, .repo.

dnf yum install
2.2

dnf (Avancé)

groupinstall, Modules, History (undo).

groupinstall module history
2.3

Paquets : rpm

Gestion manuelle des .rpm (-i, -q, -V).

rpm -q -V
3.1

Systemd (Services)

systemctl, journalctl, httpd.

systemctl journalctl
3.2

Réseau (NetworkManager)

nmcli, nmtui, config IP statique.

nmcli nmtui
4.1

FirewallD (Zones)

Concept de Zones, firewall-cmd, Services.

firewalld Zones
4.2

FirewallD (RĂšgles)

--add-port, --add-rich-rule, --permanent.

firewall-cmd Rich Rules
4.3

SELinux (Concepts)

MAC, Enforcing, Permissive, sestatus.

SELinux Enforcing
4.4

SELinux (Contextes)

ls -Z, chcon, semanage fcontext, restorecon.

restorecon semanage
4.5

SELinux (Booleans & Logs)

setsebool, ausearch, audit2allow.

setsebool ausearch
5.1

Utilisateurs & Sudo

useradd, usermod, groupe wheel.

useradd wheel
5.2

Permissions

chmod, chown, umask, SUID, SGID.

chmod chown
6.1

Outils: Fichiers & Nav.

ls, cd, cp, mv, rm, cat, less.

ls cp rm
6.2

Outils: Recherche

find (fichiers), grep (texte).

find grep
6.3

Outils: SystĂšme

ps, top, htop, df, du, free.

ps df free
7.1

Cheat-sheet RHEL

dnf, firewall-cmd, nmcli, semanage.

cheat RHEL
1.1 Vue d'ensemble : La famille Red Hat
L'écosystÚme Red Hat

La "famille Red Hat" désigne un ensemble de distributions Linux basées sur **Red Hat Enterprise Linux (RHEL)**. Elles partagent une base commune : gestion de paquets RPM, DNF/YUM, firewalld, et SELinux.

L'arbre généalogique
[Fedora] -> (Laboratoire, "upstream", bleeding-edge)
   |
   ▌
[RHEL (Code Source)] -> (Rendu public)
   |
   ├──â–ș [CentOS Stream] (Rolling release, "preview" de RHEL)
   |
   ├──â–ș [RHEL] (Commercial, stable, support payant)
   |
   └──â–ș [Clones 1:1 (libres)]
        ├──â–ș Rocky Linux
        ├──â–ș AlmaLinux
        └──â–ș (Anciennement CentOS Linux)
Quelle distribution choisir ?
DistributionCas d'usage
FedoraPoste de travail (Desktop), développeurs, tester les nouveautés.
RHELProduction entreprise (avec support payant).
Rocky / AlmaLinuxServeurs de production. C'est l'équivalent gratuit et 1:1 de RHEL. Le successeur de CentOS.
CentOS StreamDéveloppement, CI/CD, tester ce qui arrivera *demain* dans RHEL.
1.2 Installation : Anaconda, AppStream & EPEL
Anaconda (L'installeur)

L'installeur graphique/TUI de la famille RHEL s'appelle **Anaconda**. Lors de l'installation, les points clés sont :

  • SĂ©lection de logiciels : "Minimal Install" est recommandĂ© pour les serveurs. "Server with GUI" installe un bureau GNOME.
  • Destination de l'installation : Gestion du partitionnement (voir 1.3).
  • RĂ©seau & Nom d'hĂŽte : À configurer pour un accĂšs immĂ©diat.
  • Mot de passe Root : À dĂ©finir (et verrouiller le compte).
  • CrĂ©ation d'un utilisateur : CrĂ©ez un utilisateur admin (cochez "Make this user administrator"). Cet utilisateur sera ajoutĂ© au groupe wheel (le groupe sudo de RHEL).
DépÎts (Repos) : BaseOS, AppStream, EPEL

La gestion des paquets de RHEL 8+ repose sur des dépÎts clés :

  • BaseOS : Le cƓur du systĂšme (noyau, systemd...).
  • AppStream (Application Streams) : Fournit les logiciels, services, et surtout **plusieurs versions** des langages/BDD (voir 2.2).
  • EPEL (Extra Packages for Enterprise Linux) : Le dĂ©pĂŽt communautaire **indispensable**. Il contient tout ce qui manque Ă  RHEL (nginx, htop, fail2ban...).
Post-installation (Rocky/Alma/RHEL)
# Mettre Ă  jour le systĂšme
sudo dnf update -y

# Installer EPEL
sudo dnf install -y epel-release

# Installer des outils de base
sudo dnf install -y htop wget curl git bash-completion
1.3 Partitionnement : LVM & XFS
XFS : Le SystÚme de Fichiers par Défaut

Contrairement à Debian/Ubuntu qui utilisent ext4, RHEL et ses clones utilisent XFS comme systÚme de fichiers par défaut.

  • Avantages : TrĂšs performant pour les I/O parallĂšles et les trĂšs gros fichiers (64-bit), journalisation robuste.
  • InconvĂ©nient : Ne peut ĂȘtre que **agrandi** Ă  chaud, jamais **rĂ©trĂ©ci**.
Schéma de partitionnement serveur (Recommandé)
Point de MontageTailleFormatDescription
/boot/efi~512MFAT32SystĂšme EFI (pour GPT/UEFI).
/boot~1GXFSNoyau Linux, initramfs. Séparé = bonne pratique.
[swap]RAM (ou 8G)swapMémoire virtuelle.
(Reste)(Reste)Physical Volume (LVM)Le reste du disque est donné à LVM (voir onglet 2).
LVM (Logical Volume Management)

LVM (Logical Volume Management) est activé par défaut par Anaconda. Il crée une couche d'abstraction entre vos disques et vos partitions.

Principe : On ne formate pas /, /home, /var directement. On les crée comme des "Volumes Logiques" (LV) flexibles à l'intérieur d'un "Groupe de Volumes" (VG).

[Disque /dev/sda2]
   |
   ▌
[Physical Volume (PV)]
   |
   ▌
[Volume Group (VG) "rl_hostname"]
   |
   ├──â–ș [Logical Volume (LV) "root"] -> FormatĂ© en XFS -> MontĂ© sur /
   |
   ├──â–ș [Logical Volume (LV) "swap"] -> FormatĂ© en swap
   |
   └──â–ș [Logical Volume (LV) "home"] -> FormatĂ© en XFS -> MontĂ© sur /home

Avantage : Si /home est plein, vous pouvez le rétrécir (si ext4) et agrandir /root à chaud (avec lvextend et resize2fs/xfs_growfs). Vous pouvez aussi ajouter un nouveau disque (/dev/sdb) au VG pour étendre les volumes existants.

2.1 Gestion des paquets : dnf (Bases)

dnf (Dandified YUM) est l'outil principal. yum est un alias symbolique vers dnf.

Installation & Mise Ă  jour
# Mettre Ă  jour tous les paquets
sudo dnf update -y
# (ou 'sudo dnf upgrade -y')

# Installer un paquet
sudo dnf install httpd

# Réinstaller un paquet
sudo dnf reinstall httpd
Suppression
# Supprimer un paquet
sudo dnf remove httpd

# Supprimer un paquet ET ses dépendances inutiles
sudo dnf autoremove
Recherche & Information
# Chercher un paquet
sudo dnf search "serveur web"

# Lister les paquets installés (filtré)
sudo dnf list installed | grep php

# Informations sur un paquet (installé ou non)
sudo dnf info nginx

# À quel paquet appartient un fichier ?
sudo dnf provides /etc/nginx/nginx.conf
DépÎts (Repos)

Les configurations sont dans /etc/yum.repos.d/.

# Lister les dépÎts activés
sudo dnf repolist

# Lister tous les dépÎts (activés et désactivés)
sudo dnf repolist --all
2.2 dnf (Groupes, Modules & Historique)
dnf groupinstall

Permet d'installer des "méta-paquets" (collections logiques).

# Lister les groupes
sudo dnf grouplist

# Installer les outils de compilation (gcc, make...)
sudo dnf groupinstall "Development Tools"

# Installer un serveur web avec GUI
sudo dnf groupinstall "Web Server"
Modules (AppStream)

Permet de gérer plusieurs versions d'un logiciel (voir 1.2).

# Lister les versions (streams) de PHP
sudo dnf module list php

# Activer le "stream" 8.2 (désactivera les autres)
sudo dnf module enable php:8.2 -y

# Installer PHP (installera la 8.2)
sudo dnf install php

# Réinitialiser (si vous voulez changer de stream)
sudo dnf module reset php
dnf history (Rollback)

dnf trace chaque transaction, vous permettant d'annuler (rollback).

# Lister les transactions
sudo dnf history list

ID | Command line
---|------------------------------
10 | install nginx
 9 | update
 
# Voir les détails de la transaction 10
sudo dnf history info 10
# (Montre les paquets qui ont été installés)

# Annuler l'installation de nginx (Transaction 10)
# (Ceci va *supprimer* nginx)
sudo dnf history undo 10

# Répéter la transaction 10
sudo dnf history redo 10
2.3 Paquets : rpm (Gestion manuelle)
rpm (Niveau bas)

rpm est l'outil sous-jacent. Il gÚre les fichiers .rpm individuels mais **ne résout pas les dépendances** (dnf s'en charge).

Installer / Mettre Ă  jour (-i, -U)
# -i (Install)
# -v (Verbose)
# -h (Hash marks - barre de progression)
sudo rpm -ivh mon-paquet.rpm
# (Échouera s'il manque des dĂ©pendances)

# Utiliser 'dnf' est plus malin (il gÚre les dépendances)
sudo dnf install ./mon-paquet.rpm

# -U (Upgrade)
sudo rpm -Uvh nouveau-paquet.rpm
Interroger (-q) & Vérifier (-V)
# -q (Query)

# 'httpd' est-il installé ?
rpm -q httpd
# httpd-2.4.57-5.el9.x86_64

# Lister les fichiers installés par un paquet
rpm -ql httpd

# À quel paquet appartient ce fichier ?
rpm -qf /etc/httpd/conf/httpd.conf
# httpd-2.4.57-5.el9.x86_64

# Vérifier l'intégrité d'un paquet
# (Compare les fichiers sur disque avec la BDD RPM)
rpm -V httpd
# (N'affiche rien si OK)
# S.5....T.  c /etc/httpd/conf/httpd.conf (Signifie que la config a changé)
3.1 Systemd (Gestion des Services)
systemctl (Gestion des services)

La commande unique pour gérer les "units" (services, timers, sockets...).

Commandes de base (ex: httpd.service)
# Démarrer un service
sudo systemctl start httpd

# ArrĂȘter un service
sudo systemctl stop httpd

# Redémarrer un service
sudo systemctl restart httpd

# Recharger la configuration (sans couper)
sudo systemctl reload httpd

# Activer au démarrage
sudo systemctl enable httpd

# Démarrer ET Activer
sudo systemctl enable --now httpd

# Désactiver au démarrage
sudo systemctl disable httpd
Statut & Logs (Intégration Journald)
# Voir le statut (TrĂšs utile !)
sudo systemctl status httpd

● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
     Active: active (running) since Sun 2025-11-02 00:10:00 CET
   Main PID: 1234 (httpd)
     Status: "Running, ...
      Tasks: 5 (limit: 1111)
     Memory: 25.4M
        CPU: 1.1s
     CGroup: /system.slice/httpd.service
             ├─1234 /usr/sbin/httpd -DFOREGROUND
             ...

# (journalctl est intégré dans 'status' pour les 10 derniÚres lignes)

# Voir tous les logs du service 'httpd'
sudo journalctl -u httpd

# Suivre les logs de 'httpd' en direct
sudo journalctl -f -u httpd
3.2 Journald (Logs centralisés)
journalctl (Lecteur de logs)

Systemd (via Journald) capture le stdout/stderr de tous les services qu'il gÚre, et les stocke dans un journal binaire (centralisé, non dans /var/log).

(Note: RHEL utilise aussi rsyslog qui lit le journald et écrit dans /var/log/messages, /var/log/secure, etc. pour la rétrocompatibilité).

# Suivre TOUS les logs en direct (tail -f)
sudo journalctl -f

# Voir les 50 derniĂšres lignes
sudo journalctl -n 50

# Voir les logs du kernel (erreurs disque, OOM)
sudo journalctl -k

# Voir les logs du boot actuel
sudo journalctl -b 0

# Voir les logs du boot précédent
sudo journalctl -b -1
Filtrage (Puissant)
# Filtrer par service (Unit)
sudo journalctl -u httpd.service

# Filtrer par service (et suivre)
sudo journalctl -f -u sshd

# Filtrer par exécutable
sudo journalctl /usr/sbin/sshd

# Filtrer par PID
sudo journalctl _PID=1234

# Filtrer par priorité (erreurs et plus grave)
sudo journalctl -p err
# (p: emerg, alert, crit, err, warning, notice, info, debug)

# Filtrer par date/heure
sudo journalctl --since "2025-11-01 10:00:00"
sudo journalctl --since "1 hour ago"

# Combiner (erreurs sshd depuis 1h)
sudo journalctl -u sshd -p err --since "1 hour ago"
3.3 Réseau : NetworkManager (nmcli & nmtui)
nmcli (Ligne de commande)

L'outil principal pour gérer NetworkManager. Il gÚre les "Devices" (interfaces physiques) et les "Connections" (profils de configuration).

Commandes de statut
# Statut global
nmcli general status

# Statut des interfaces (devices)
nmcli device status
DEVICE | TYPE    | STATE      | CONNECTION
eth0   | ethernet| connected  | eth0

# Lister les profils (connexions)
nmcli connection show
NAME | UUID | TYPE     | DEVICE
eth0 | ...  | ethernet | eth0

# Voir la config IP (similaire Ă  'ip a')
nmcli device show eth0
Modifier une connexion (IP Statique)
# (Supposons que la connexion s'appelle 'eth0')
# 1. Passer en IP manuelle
sudo nmcli connection modify eth0 ipv4.method manual

# 2. Définir l'IP/Gateway
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1

# 3. Définir les DNS
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 1.1.1.1"

# 4. Appliquer les changements (ré-active la connexion)
sudo nmcli connection up eth0
nmtui (Interface TUI)

Si nmcli est trop complexe, nmtui (Text UI) est une interface "semi-graphique" simple pour la console.

sudo nmtui

Cela ouvre un menu interactif (navigable au clavier) :

  • Edit a connection : Modifier une connexion (IP, DNS...).
  • Activate a connection : Activer/DĂ©sactiver.
  • Set system hostname : Changer le nom d'hĂŽte.

C'est la méthode la plus simple pour configurer une IP statique en console sans mémoriser les commandes nmcli.

4.1 FirewallD : Concepts & Zones
firewalld (Firewall Dynamique)

Le pare-feu par défaut de RHEL (remplace iptables direct). Il est basé sur des **Zones**.

Une **Zone** est un ensemble de rÚgles. Chaque interface réseau (eth0) est assignée à une zone (par défaut: public).

Zone (Exemple)ConfianceUsage
dropNulleRejette tout (silencieusement).
blockNulleRejette tout (avec réponse ICMP).
publicFaibleZone par défaut (internet). TrÚs restrictif.
internalÉlevĂ©eRĂ©seau interne (LAN). Plus permissif.
trustedTotaleFait confiance Ă  toutes les machines.
Gestion des Zones & Services

On n'ouvre pas des ports, on ajoute des "Services" (ex: http, ssh) Ă  une Zone.

# Démarrer et activer
sudo systemctl enable --now firewalld

# Voir la zone par défaut et les interfaces
sudo firewall-cmd --get-active-zones
# public
#   interfaces: eth0

# Changer l'interface 'eth0' vers la zone 'internal'
sudo firewall-cmd --zone=internal --change-interface=eth0

# Lister les services (rĂšgles) de la zone 'public'
sudo firewall-cmd --zone=public --list-all
# services: cockpit dhcpv6-client ssh

# Lister tous les services prédéfinis (ex: http, mysql...)
sudo firewall-cmd --get-services
4.2 FirewallD : Gestion des RĂšgles
Runtime (Temporaire) vs Permanent

Les changements sont temporaires (runtime) sauf si on ajoute --permanent. Si on utilise --permanent, il faut --reload.

Ajouter un Service (ex: Nginx)
# 1. Ajouter 'http' Ă  la config permanente
sudo firewall-cmd --zone=public --add-service=http --permanent
# success

# 2. Recharger pour appliquer
sudo firewall-cmd --reload
# success
Ajouter un Port (ex: 8080)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
Supprimer
sudo firewall-cmd --zone=public --remove-service=http --permanent
sudo firewall-cmd --reload
Rich Rules (RĂšgles riches)

Pour des rÚgles complexes (ex: autoriser une IP spécifique).

# Syntaxe (Complexe)
rule family="ipv4"
     source address="[IP]"
     service name="[SERVICE]"
     (ou port port="[PORT]" protocol="tcp")
     accept (ou reject)
Exemple : Autoriser l'IP 1.2.3.4 sur SSH
sudo firewall-cmd --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="1.2.3.4"
    service name="ssh"
    accept' --permanent

sudo firewall-cmd --reload
4.3 SELinux : Concepts (MAC)
La bĂȘte noire : SELinux

SELinux (Security-Enhanced Linux) est un module de sécurité **Mandatory Access Control (MAC)**. C'est ce qui bloque 99% des tutoriels qui marchent sur Ubuntu mais pas sur Rocky.

DAC vs MAC
  • DAC (Discretionary) : C'est chmod (rwx). Le propriĂ©taire (ex: root) dĂ©cide. Si un hacker devient root, il a tous les droits.
  • MAC (Mandatory) : C'est SELinux. L'accĂšs est basĂ© sur des **Ă©tiquettes (contextes)** dĂ©finies par l'admin. MĂȘme si vous ĂȘtes root, si la politique l'interdit, l'accĂšs est bloquĂ©.
Les 3 Modes d'exécution
ModeDescription
EnforcingMode par défaut. Applique les rÚgles ET bloque les violations.
PermissiveMode debug. N'applique pas les rĂšgles (ne bloque rien), mais **logue** les violations (dans /var/log/audit/audit.log).
DisabledSELinux est désactivé (nécessite un reboot).
Commandes de gestion
# 1. Voir le statut (La commande N°1)
sestatus
# Current mode:   enforcing

# 2. Voir le mode actuel
getenforce
# Enforcing

# 3. Changer de mode (Temporaire, jusqu'au reboot)
# (Passer en mode "debug")
sudo setenforce 0
# (Mode: Permissive)

# (Remettre en mode "prod")
sudo setenforce 1
4.4 SELinux : Gérer les Contextes (ls -Z, semanage, restorecon)
Le Problùme : Le Contexte (Étiquette)

Apache (httpd_t) n'a le droit de lire que les fichiers avec le contexte httpd_sys_content_t.

$ ls -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

# Scénario : Vous déplacez un fichier (pas 'cp')
$ sudo mv /home/ideo_user/site.html /var/www/html/
$ ls -Z /var/www/html/site.html
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 site.html

Résultat : Apache (httpd_t) ne peut pas lire user_home_t. Le fichier site.html est en 403 Forbidden (malgré un chmod 777).

Fix Temporaire (chcon)

chcon (Change Context) change l'étiquette. C'est temporaire (un restorecon ou un "autorelabel" l'effacera). Utile pour tester.

sudo chcon -t httpd_sys_content_t /var/www/html/site.html
$ ls -Z /var/www/html/site.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 site.html
Fix Permanent (semanage + restorecon)

La "bonne" méthode est de dire à SELinux quelle est la rÚgle permanente.

restorecon

Si le fichier est au *bon endroit* (ex: /var/www/html) mais a le mauvais contexte (aprĂšs un mv), utilisez restorecon.

# (Reprend l'exemple 1)
# 'restorecon' lit la BDD SELinux et applique le "bon" contexte
sudo restorecon -vR /var/www/html/
# Relabeled /var/www/html/site.html from user_home_t to httpd_sys_content_t
semanage fcontext

Si vous voulez utiliser un dossier *non-standard* (ex: /srv/www) :

# 1. Installer l'outil (si absent)
sudo dnf install policycoreutils-python-utils

# 2. Ajouter une rĂšgle "permanente" Ă  la BDD SELinux
# (Dire que /srv/www est un répertoire web)
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"

# 3. Appliquer la nouvelle rĂšgle
sudo restorecon -vR /srv/www
4.5 SELinux : Booleans & Logs (ausearch)
getsebool / setsebool

Les "booleans" sont des interrupteurs (On/Off) qui modifient la politique SELinux sans la réécrire.

Exemple : PHP (Apache) doit se connecter à une BDD distante (réseau).

# 1. Lister les booleans liés à httpd
sudo getsebool -a | grep httpd_can_network
# httpd_can_network_connect --> off
# httpd_can_network_connect_db --> off

# 2. Autoriser (Permanent)
# -P (Permanent)
sudo setsebool -P httpd_can_network_connect_db 1

# 3. Vérifier
sudo getsebool httpd_can_network_connect_db
# httpd_can_network_connect_db --> on
Debugger les refus (ausearch)

Quand SELinux bloque (en mode Enforcing ou Permissive), il logue dans /var/log/audit/audit.log.

# 1. Installer l'outil
sudo dnf install setroubleshoot-server

# 2. Chercher les 'AVC' (refus) récents
sudo ausearch -m AVC -ts recent
# time->... avc:  denied  { read } ...
# pid=1234 comm="httpd" path="/srv/www/index.html"
# scontext=... tcontext=... tclass=file

# 3. (La méthode magique) Utiliser 'audit2allow'
# (Lit le log, et génÚre la rÚgle de contexte manquante)
sudo ausearch -m AVC -ts recent | audit2allow -m "HTTPD custom"

# (Affiche la rÚgle qu'il faudrait créer)
#
# module HTTPD_custom 1.0;
# require {
#    type httpd_t;
#    type default_t;
#    class file { read };
# }
# allow httpd_t default_t:file { read };

# 4. (Avancé) Créer et installer le module
sudo ausearch -m AVC -ts recent | audit2allow -M "HTTPD_custom"
sudo semodule -i HTTPD_custom.pp
5.1 Utilisateurs & Sudo (Groupe 'wheel')
Commandes Utilisateur (root ou sudo)
# Ajouter un utilisateur (non-interactif)
sudo useradd -m -s /bin/bash dev_user
# -m : Crée le /home
# -s : Définit le shell

# Définir le mot de passe
sudo passwd dev_user

# Modifier un utilisateur
# (Ex: Ajouter 'dev_user' au groupe 'wheel' (sudo))
sudo usermod -aG wheel dev_user
# -a (Append) -G (Groupes secondaires)

# Supprimer un utilisateur (et son /home)
sudo userdel -r dev_user
sudo & Groupe wheel

Sur la famille RHEL, le groupe qui donne les droits sudo n'est pas sudo, mais wheel.

Pour donner les droits sudo Ă  un utilisateur, il suffit de l'ajouter au groupe wheel.

# (Fichier /etc/sudoers)
# ...
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
5.2 Permissions (chmod, chown, umask)
chmod (Changer les permissions)

Octal (4=r, 2=w, 1=x)

# rwxr-xr-x (755) - Dossiers/Scripts
sudo chmod 755 mon_dossier/

# rw-r--r-- (644) - Fichiers web
sudo chmod 644 index.html

# rw------- (600) - Clés privées
sudo chmod 600 /home/user/.ssh/id_rsa
chown (Changer le propriétaire)
# Changer le propriétaire
sudo chown ideo_user rapport.pdf

# Changer le propriétaire ET le groupe
sudo chown ideo_user:developpeurs rapport.pdf

# Récursif (pour un dossier web)
sudo chown -R httpd:httpd /var/www/html
# (Utiliser 'apache:apache' sur RHEL < 8)
umask (Masque par défaut)

Définit les permissions *inverses* qui sont appliquées par défaut.

umask commun : 0022

# Calcul Fichier
  666 (base) - 022 (umask) = 644 (rw-r--r--)
# Calcul Dossier
  777 (base) - 022 (umask) = 755 (rwxr-xr-x)
Bits Spéciaux
  • SUID (u+s) : ExĂ©cuter en tant que propriĂ©taire (ex: passwd).
  • SGID (g+s) : (Sur dossier) Les nouveaux fichiers hĂ©ritent du groupe du dossier.
  • Sticky Bit (+t) : (Sur dossier) Seul le propriĂ©taire (ou root) peut supprimer ses propres fichiers (ex: /tmp).
6.1 Outils: Fichiers & Navigation
Navigation (ls, cd, pwd)
pwd        # (Print Working Directory) OĂč suis-je ?
cd /var/log # (Change Directory)
cd ..       # Remonter d'un niveau
cd -        # Aller au dossier précédent
ls          # Lister les fichiers
ls -l       # Lister (format long)
ls -la      # Lister (long, 'a' = tous, y compris cachés)
ls -lh      # Lister (long, 'h' = humainement lisible)
Gestion Fichiers/Dossiers
touch fichier.txt   # Créer un fichier vide
mkdir mon_dossier   # Créer un dossier
cp src.txt dest.txt # Copier
cp -r src_dir/ dest_dir/ # Copier (Récursif)
mv old.txt new.txt  # Renommer (Move)
mv file.txt dir/    # Déplacer
rm fichier.txt      # Supprimer (Remove)
rm -r mon_dossier   # Supprimer dossier (Récursif)
rm -rf mon_dossier  # Supprimer (Récursif, Forcé) (DANGER)
6.2 Outils: Recherche (find & grep)
find (Rechercher des fichiers)

find [OÙ] [QUOI] [ACTION]

# Trouver par nom (insensible Ă  la casse)
find . -iname "*.conf"

# Trouver par type (f=file, d=dir)
find /var -type d -name "log"

# Trouver par taille
find / -type f -size +100M

# Trouver par date de modification (ex: < 7 jours)
find /etc -mtime -7

# Exécuter une commande sur les résultats (-exec)
find . -name "*.tmp" -exec rm -f {} \;
grep (Rechercher *dans* des fichiers)

grep [OPTIONS] "MOTIF" [FICHIER]

# Chercher "error" dans un log
grep "error" /var/log/messages

# Récursif, insensible à la casse, numéros de ligne
grep -Rin "mon_ip" /etc/nginx/

# Inverser (lignes ne contenant PAS)
grep -v "INFO" app.log

# Utiliser avec un 'pipe' (|)
dmesg | grep -i "failure"
6.3 Outils: Processus & SystĂšme
Processus (ps, top, kill)
# Lister tous les processus (style BSD)
ps aux

# Lister les processus (style SystemV)
ps -ef

# Combiner avec grep
ps aux | grep nginx

# Moniteur interactif (taper 'q' pour quitter)
top

# 'top' amélioré (nécessite EPEL)
htop

# Tuer un processus (par PID)
kill 1234
kill -9 1234 # (Forcer, "non-gracieux")

# Tuer par nom
pkill nginx
killall nginx
Disque & RAM (df, du, free)
# Espace Disque (Disk Free)
df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/mapper/rl-root   40G   5G   35G  13% /
# /dev/sda1         900M  150M  750M  17% /boot

# Utilisation Disque (Disk Usage)
# (Taille des dossiers dans /var)
du -sh /var/*
# -s (summarize), -h (human)

# Mémoire RAM
free -h
#               total   used    free
# Mem:           7.8G   1.2G    6.0G
# Swap:          8.0G     0B    8.0G
7.1 Cheat-sheet (Spécifique RHEL)
Paquets (DNF/YUM)
sudo dnf update -y
sudo dnf install httpd
sudo dnf remove httpd
sudo dnf search httpd
sudo dnf repolist
sudo dnf install epel-release
sudo dnf groupinstall "Development Tools"
sudo dnf module list php
sudo dnf module enable php:8.2
sudo dnf history list
sudo dnf history undo 10
Réseau (NetworkManager)
nmcli device status
nmcli connection show
nmcli connection up [conn]
nmcli connection modify [conn] ipv4.method manual
nmcli connection modify [conn] ipv4.addresses [ip/cidr]
sudo nmtui
Firewall (firewalld)
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
SELinux
sestatus
getenforce
sudo setenforce 0 # (Permissive)
ls -Z /var/www/
sudo chcon -t httpd_sys_content_t [fichier]
sudo restorecon -vR /var/www/
sudo semanage fcontext -a -t ...
sudo getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect 1
sudo ausearch -m AVC -ts recent | audit2allow -m MonModule