objectif
Protéger des fichiers ou dossiers critiques contre les modifications accidentelles ou malveillantes via les attributs immutables (+i) et append-only (+a). Idéal pour des configs des journaux.
code minimal
# rendre un fichier de config intouchable (édition/suppression/interdite)
sudo chattr +i /etc/nginx/sites-available/data.pm.conf
# vérifier l'attribut
lsattr /etc/nginx/sites-available/data.pm.conf
utilisation
# 1) protéger des configs critiques (nginx, systemd service)
sudo chattr +i /etc/nginx/nginx.conf
sudo chattr +i /etc/systemd/system/data-pm-api.service
lsattr /etc/nginx/nginx.conf /etc/systemd/system/data-pm-api.service
# 2) empêcher l'édition directe du site en prod: protéger le symlink "current"
# (le déploiement se fait via bascule atomique, pas via édits dans current)
sudo chattr +i /srv/data.pm/current
ls -l /srv/data.pm/current && lsattr /srv/data.pm/current
# 3) append-only (+a) pour un log d'audit: on ne peut qu'ajouter
sudo touch /var/log/data.pm/audit.log
sudo chattr +a /var/log/data.pm/audit.log
lsattr /var/log/data.pm/audit.log
# écriture ok; suppression/troncature échouent même pour root (sans retirer +a)
# 4) retirer temporairement l'attribut pour éditer/mettre à jour
sudo chattr -i /etc/nginx/nginx.conf
sudo vim /etc/nginx/nginx.conf
sudo chattr +i /etc/nginx/nginx.conf
# 5) déploiement data.pm en gardant le symlink protégé
# - déprotéger juste le temps de la bascule, puis reprotéger
NEW="/srv/data.pm/releases/2025-08-15_1200"
sudo chattr -i /srv/data.pm/current
sudo ln -sfn "$NEW" /srv/data.pm/current
sudo chattr +i /srv/data.pm/current
variante(s) utile(s)
# protéger un dossier entier (empêche création/suppression/modification dans l'arbre)
# attention: +i sur un dossier bloque toute modification de contenu
sudo chattr +i /etc/data.pm
lsattr -d /etc/data.pm
# append-only sur un dossier (on peut créer des fichiers, mais pas supprimer/renommer existants)
# utile pour répertoires d'archives immuables
sudo chattr +a /srv/archives/data.pm
lsattr -d /srv/archives/data.pm
# liste récursive des fichiers portant +i ou +a
sudo find / -xdev -type f -exec lsattr {} + 2>/dev/null | grep -E '\bi|\ba' | head
# sécuriser un .env critique (édition contrôlée via écriture atomique)
sudo chattr +i /srv/api.data.pm/.env
# pour mise à jour: sudo chattr -i ..., écriture atomique, puis sudo chattr +i ...
# automatiser la (dé)protection d'un fichier autour d'une commande
protect_edit() {
local f="$1"; shift
sudo chattr -i "$f"
"$@"
local rc=$?
sudo chattr +i "$f"
return $rc
}
# ex: protect_edit /etc/nginx/nginx.conf sudo nginx -t && sudo systemctl reload nginx
notes
+i(immutable): interdit modification, renommage, suppression et lien;+a(append-only): autorise seulement l’ajout en fin (pas de troncature/renommage).- support dépend du filesystem (ext2/3/4, btrfs, xfs récents). Vérifiez avec
chattr/lsattr; sinon, l’attribut peut être ignoré. - utilisez
+isur des fichiers et symlinks critiques (ex:/srv/data.pm/current) pour éviter les edits directs; effectuez les déploiements par bascule contrôlée. - attention aux rotations de logs: un fichier
+ane peut pas être renommé/tronqué. Adaptez logrotate (ou retirez+ale temps de la rotation). - ces protections ne remplacent pas des permissions/ACL correctes ni un contrôle d’accès; elles ajoutent une barrière supplémentaire contre les erreurs et l’altération.