đ§ Linux Red Hat (RHEL) â Admin. & SĂ©curitĂ©
Guide complet IDEOâLab sur RHEL, Rocky, Alma : DNF, firewalld & SELinux.
Famille RHEL
RHEL, Fedora, CentOS, Rocky, AlmaLinux.
RHEL Rocky Linux FedoraInstall & Repos
Anaconda, AppStream, EPEL.
Anaconda AppStream EPELPartitionnement
LVM (gestion) & XFS (systĂšme de fichiers).
LVM XFS /bootPaquets : dnf
dnf install, search, repolist, .repo.
dnf (Avancé)
groupinstall, Modules, History (undo).
Paquets : rpm
Gestion manuelle des .rpm (-i, -q, -V).
Systemd (Services)
systemctl, journalctl, httpd.
Réseau (NetworkManager)
nmcli, nmtui, config IP statique.
FirewallD (Zones)
Concept de Zones, firewall-cmd, Services.
FirewallD (RĂšgles)
--add-port, --add-rich-rule, --permanent.
SELinux (Concepts)
MAC, Enforcing, Permissive, sestatus.
SELinux (Contextes)
ls -Z, chcon, semanage fcontext, restorecon.
SELinux (Booleans & Logs)
setsebool, ausearch, audit2allow.
Utilisateurs & Sudo
useradd, usermod, groupe wheel.
Permissions
chmod, chown, umask, SUID, SGID.
Outils: Fichiers & Nav.
ls, cd, cp, mv, rm, cat, less.
Outils: Recherche
find (fichiers), grep (texte).
Outils: SystĂšme
ps, top, htop, df, du, free.
Cheat-sheet RHEL
dnf, firewall-cmd, nmcli, semanage.
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 ?
| Distribution | Cas d'usage |
|---|---|
| Fedora | Poste de travail (Desktop), développeurs, tester les nouveautés. |
| RHEL | Production entreprise (avec support payant). |
| Rocky / AlmaLinux | Serveurs de production. C'est l'équivalent gratuit et 1:1 de RHEL. Le successeur de CentOS. |
| CentOS Stream | Développement, CI/CD, tester ce qui arrivera *demain* dans RHEL. |
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 groupesudode 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
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 Montage | Taille | Format | Description |
|---|---|---|---|
| /boot/efi | ~512M | FAT32 | SystĂšme EFI (pour GPT/UEFI). |
| /boot | ~1G | XFS | Noyau Linux, initramfs. Séparé = bonne pratique. |
| [swap] | RAM (ou 8G) | swap | Mé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.
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
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
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é)
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 httpdjournalctl (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"
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.
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) | Confiance | Usage |
|---|---|---|
| drop | Nulle | Rejette tout (silencieusement). |
| block | Nulle | Rejette tout (avec réponse ICMP). |
| public | Faible | Zone par défaut (internet). TrÚs restrictif. |
| internal | ĂlevĂ©e | RĂ©seau interne (LAN). Plus permissif. |
| trusted | Totale | Fait 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
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 --reloadLa 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 devientroot, 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
| Mode | Description |
|---|---|
| Enforcing | Mode par défaut. Applique les rÚgles ET bloque les violations. |
| Permissive | Mode debug. N'applique pas les rĂšgles (ne bloque rien), mais **logue** les violations (dans /var/log/audit/audit.log). |
| Disabled | SELinux 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
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
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.ppCommandes 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
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).
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)
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"
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
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
