| name | linux-admin-guide |
| description | Administration Linux complète — gestion des utilisateurs, permissions, services, logs, cron et packages. Se déclenche avec "Linux", "administration Linux", "chmod", "chown", "systemctl", "apt", "yum". Also triggers on "Linux administration", "manage users and permissions", "systemd services and cron". |
Linux Admin Guide
1. Identifier le contexte système
uname -r
cat /etc/os-release
lscpu | grep -E 'Arch|CPU'
hostnamectl
Critère de décision — gestionnaire de paquets à utiliser :
| Distro | Package manager | Dépôts config |
|---|
| Debian / Ubuntu | apt | /etc/apt/sources.list.d/ |
| RHEL / CentOS / Rocky | dnf (ou yum) | /etc/yum.repos.d/*.repo |
| Arch / Manjaro | pacman | /etc/pacman.conf |
| Alpine | apk | /etc/apk/repositories |
2. Gestion des utilisateurs et groupes
useradd -m -s /bin/bash -G sudo khalil
passwd khalil
usermod -aG docker khalil
userdel khalil
userdel -r khalil
id khalil
getent passwd khalil
chage -l khalil
Piège : usermod -G docker khalil SANS -a remplace tous les groupes secondaires — préférer toujours -aG.
3. Permissions et ACL
chmod 750 script.sh
chmod 644 config.cfg
chmod u+x,g-w fichier
chmod o= fichier
chown khalil:devteam fichier
chown -R www-data:www-data /var/www/
chmod u+s /usr/bin/monprog
chmod g+s /srv/shared/
chmod +t /tmp/shared/
setfacl -m u:jenkins:rwx /deploy/
setfacl -m g:ci:rx /deploy/
getfacl /deploy/
Anti-pattern : chmod -R 777 — n'est jamais la bonne réponse. Diagnostiquer d'abord avec namei -l /chemin/complet.
4. Gestion des services (systemd)
systemctl status nginx
systemctl start | stop | restart | reload nginx
systemctl enable nginx
systemctl enable --now nginx
journalctl -u nginx -n 100 --no-pager
journalctl -u nginx -f
journalctl -u nginx --since "1 hour ago"
systemctl edit nginx
systemctl daemon-reload
Critère de décision : reload vs restart — reload fait un SIGHUP (rechargement de config sans coupure) ; restart tue et relance le processus. Préférer reload en production pour nginx/apache.
5. Planification des tâches (cron + systemd timers)
crontab -e
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
*/5 * * * * /usr/bin/check-health.sh
ls /etc/cron.{d,daily,weekly,monthly}/
grep CRON /var/log/syslog | tail -20
journalctl -t CRON -n 50
Alternative moderne — systemd timer (plus flexible, logs dans journald) :
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl enable --now backup.timer
systemctl list-timers --all
6. Gestion des paquets
apt update && apt upgrade -y
apt install -y curl git htop
apt remove --purge nginx
apt autoremove
apt-cache show nginx
apt list --installed | grep nginx
dnf update -y
dnf install -y curl git htop
dnf remove nginx
dnf autoremove
dnf info nginx
apt-get --simulate remove nginx
dnf --assumeno remove nginx
7. Analyse des logs
journalctl -p err -n 50
journalctl --since "2026-06-24 08:00"
journalctl -k
tail -f /var/log/syslog
tail -f /var/log/auth.log
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn
logrotate -f /etc/logrotate.d/nginx
8. Stockage et systèmes de fichiers
df -hT
du -sh /var/log/* | sort -rh | head -10
lsblk -f
blkid /dev/sdb1
echo "UUID=xxxx /data ext4 defaults,nofail 0 2" >> /etc/fstab
mount -a
mkfs.ext4 /dev/sdb1
mkdir /data && mount /dev/sdb1 /data
smartctl -a /dev/sda
smartctl -t short /dev/sda
Garde-fous et anti-patterns
| Risque | Ce qu'il ne faut PAS faire | Bonne pratique |
|---|
| Destruction de permissions | chmod -R 777 / | Tester sur un sous-dossier, vérifier avec namei |
| Perte de groupes secondaires | usermod -G groupe user | Toujours usermod -aG groupe user |
| Coupure SSH | Modifier /etc/ssh/sshd_config sans sshd -t | sshd -t && systemctl reload sshd |
| Fstab cassé au reboot | Ajouter une entrée sans tester | mount -a avant de rebooter |
| Suppression paquet système | apt remove --purge systemd | apt-get --simulate remove paquet d'abord |
| Root direct | su - en routine | sudo -i ou sudo commande — auditabilité |
| Cron silencieux | Pas de redirection de sortie | cmd >> /var/log/job.log 2>&1 |
Bonnes pratiques 2026
- Sauvegarde avant modif :
cp /etc/nginx/nginx.conf{,.bak-$(date +%F)} — pattern idempotent.
- Sudo minimal : configurer
/etc/sudoers.d/khalil avec NOPASSWD uniquement sur les commandes explicites, pas ALL.
- Auditd : activer
auditd sur les serveurs de production (apt install auditd), écrire des règles sur /etc/shadow, /etc/passwd, exécutions sudo.
- Gestion de configuration : toute modification manuelle doit être rejouable via Ansible/Puppet — traiter le serveur comme immutable.
- Mises à jour de sécurité automatiques : activer
unattended-upgrades (Debian) ou dnf-automatic (RHEL) en mode security-only.
- Journaux centralisés : rediriger
journald vers un syslog centralisé (Loki, Graylog) en production pour ne pas perdre les logs après un crash.