Linux Fondamentaux
Introduction
Linux est un systeme d'exploitation open source base sur Unix. Comprendre Linux est essentiel en cybersecurite car:
- La majorite des serveurs web utilisent Linux
- Les outils de securite sont souvent developpes pour Linux
- WSL permet d'utiliser Linux sous Windows
Comparaison Windows vs Linux
Structure du systeme de fichiers
| Aspect | Windows | Linux |
|---|---|---|
| Racine | C:\ | / |
| Separateur | \ | / |
| Sensibilite casse | Non | Oui |
| Utilisateurs | C:\Users\nom | /home/nom |
| Programmes | C:\Program Files | /usr/bin, /opt |
| Configuration | Registre | Fichiers texte (/etc) |
Arborescence Linux
/
├── bin/ # Binaires essentiels
├── boot/ # Fichiers de demarrage
├── dev/ # Peripheriques
├── etc/ # Configuration systeme
├── home/ # Repertoires utilisateurs
├── lib/ # Bibliotheques
├── media/ # Points de montage media
├── mnt/ # Points de montage temporaires
├── opt/ # Logiciels optionnels
├── proc/ # Processus (virtuel)
├── root/ # Home de root
├── sbin/ # Binaires systeme
├── tmp/ # Fichiers temporaires
├── usr/ # Programmes utilisateur
└── var/ # Donnees variables (logs, mail)
Commandes Essentielles
Navigation
# Repertoire courant
pwd
# Lister les fichiers
ls
ls -la # Details + fichiers caches
ls -lh # Tailles lisibles
# Changer de repertoire
cd /chemin
cd ~ # Home
cd - # Precedent
cd .. # Parent
Fichiers et Dossiers
# Creer
mkdir dossier
touch fichier
# Copier
cp source destination
cp -r dossier/ destination/
# Deplacer/Renommer
mv source destination
# Supprimer
rm fichier
rm -r dossier/
rm -rf dossier/ # Force (DANGER!)
# Afficher contenu
cat fichier
less fichier # Pagination
head -n 10 fichier
tail -n 10 fichier
tail -f fichier # Suivi en temps reel
Recherche
# Trouver des fichiers
find /chemin -name "*.txt"
find / -type f -name "password*"
find / -perm -4000 # SUID
# Rechercher dans les fichiers
grep "motif" fichier
grep -r "motif" /chemin/
grep -i "motif" fichier # Insensible casse
Permissions
# Voir les permissions
ls -l fichier
# Format: -rwxrwxrwx
# │└┬┘└┬┘└┬┘
# │ │ │ └── Autres (o)
# │ │ └───── Groupe (g)
# │ └──────── Proprietaire (u)
# └────────── Type (- fichier, d dossier)
# Modifier les permissions
chmod 755 fichier # rwxr-xr-x
chmod u+x fichier # Ajouter execution pour user
chmod go-w fichier # Retirer ecriture pour group/others
# Modifier le proprietaire
chown user:group fichier
Valeurs chmod
| Valeur | Permission |
|---|---|
| 7 | rwx (lecture + ecriture + execution) |
| 6 | rw- (lecture + ecriture) |
| 5 | r-x (lecture + execution) |
| 4 | r-- (lecture seule) |
| 0 | --- (aucune) |
Utilisateurs et Groupes
Fichiers importants
| Fichier | Contenu |
|---|---|
/etc/passwd | Liste des utilisateurs |
/etc/shadow | Mots de passe hashes |
/etc/group | Liste des groupes |
/etc/sudoers | Configuration sudo |
Commandes utilisateurs
# Utilisateur courant
whoami
id
# Changer d'utilisateur
su - username
su - # Devenir root
# Executer en tant que root
sudo commande
sudo -i # Shell root
# Gerer les utilisateurs
useradd username
passwd username
userdel username
Processus
Commandes
# Lister les processus
ps aux
ps -ef
# Arborescence
pstree
# Temps reel
top
htop # Version amelioree
# Tuer un processus
kill PID
kill -9 PID # Force
killall nom
# Arriere-plan
commande &
jobs
fg %1
bg %1
Signaux courants
| Signal | Numero | Description |
|---|---|---|
| SIGTERM | 15 | Terminer proprement |
| SIGKILL | 9 | Tuer immediatement |
| SIGINT | 2 | Interruption (Ctrl+C) |
| SIGHUP | 1 | Deconnexion |
Reseau
Commandes
# Configuration IP
ip addr
ifconfig # Ancien
# Connexions
netstat -tulpn
ss -tulpn # Moderne
# Test connectivite
ping adresse
traceroute adresse
# DNS
nslookup domaine
dig domaine
# Transfert
wget url
curl url
curl -o fichier url
# Connexion distante
ssh user@serveur
scp fichier user@serveur:/chemin/
Services et Daemons
systemd (moderne)
# Statut
systemctl status service
# Demarrer/Arreter
systemctl start service
systemctl stop service
systemctl restart service
# Activer/Desactiver au boot
systemctl enable service
systemctl disable service
# Lister les services
systemctl list-units --type=service
SysVinit (ancien)
service nom start
service nom stop
service nom status
Fichiers Importants pour la Securite
Configuration
| Fichier | Description |
|---|---|
/etc/passwd | Comptes utilisateurs |
/etc/shadow | Hash des mots de passe |
/etc/sudoers | Privileges sudo |
/etc/ssh/sshd_config | Configuration SSH |
/etc/crontab | Taches planifiees systeme |
Logs
| Fichier | Description |
|---|---|
/var/log/auth.log | Authentification (Debian) |
/var/log/secure | Authentification (RedHat) |
/var/log/syslog | Logs systeme |
/var/log/messages | Messages generaux |
/var/log/apache2/ | Logs Apache |
Consulter les logs
# Journalctl (systemd)
journalctl
journalctl -u service
journalctl -f # Temps reel
journalctl --since today
# Fichiers
tail -f /var/log/auth.log
grep "Failed" /var/log/auth.log
Bits Speciaux (Securite)
SUID (Set User ID)
Permet d'executer un programme avec les privileges du proprietaire.
# Trouver les fichiers SUID
find / -perm -4000 2>/dev/null
# Exemple: passwd a SUID root pour modifier /etc/shadow
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
SGID (Set Group ID)
Similaire mais pour le groupe.
find / -perm -2000 2>/dev/null
Sticky Bit
Empeche la suppression de fichiers par des non-proprietaires.
ls -ld /tmp
# drwxrwxrwt ... /tmp
# Le 't' indique le sticky bit
Scripting Bash Basique
Premier script
#!/bin/bash
# Mon premier script
echo "Bonjour, $USER!"
echo "Nous sommes le $(date)"
echo "Vous etes dans $(pwd)"
Variables et conditions
#!/bin/bash
# Variables
nom="Linux"
version=5
# Condition
if [ $version -gt 4 ]; then
echo "$nom version $version est recent"
else
echo "Version ancienne"
fi
# Boucle
for i in 1 2 3 4 5; do
echo "Iteration $i"
done
Script utile - Enumeration basique
#!/bin/bash
# Enumeration systeme basique
echo "=== INFORMATIONS SYSTEME ==="
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -a)"
echo "User: $(whoami)"
echo "ID: $(id)"
echo -e "\n=== UTILISATEURS ==="
cat /etc/passwd | cut -d: -f1
echo -e "\n=== SUID FILES ==="
find / -perm -4000 2>/dev/null
echo -e "\n=== CRON JOBS ==="
cat /etc/crontab
echo -e "\n=== CONNEXIONS RESEAU ==="
ss -tulpn
WSL (Windows Subsystem for Linux)
Installation
# PowerShell (Admin)
wsl --install
# Choisir une distribution
wsl --install -d Ubuntu
Commandes WSL
# Lister les distributions
wsl --list --verbose
# Demarrer
wsl
# Acceder aux fichiers Windows
cd /mnt/c/Users/
# Depuis Windows, acceder a Linux
\\wsl$\Ubuntu\home\user\
Exercices
- Naviguez dans le systeme de fichiers et listez les fichiers de
/etc - Creez un fichier, modifiez ses permissions en 644
- Trouvez tous les fichiers SUID sur le systeme
- Ecrivez un script qui affiche les informations systeme
- Consultez les logs d'authentification