Chgrp
Commandes pour gérer les perms.
Finalité et Périmètre d’Application
Commande système fondamentale pour modifier le groupe propriétaire de fichiers et répertoires sous Linux/Unix. Couvre : syntaxe de base, options de récursivité et de gestion des liens symboliques, intégration dans des scripts, et dépannage des erreurs de permissions.
Principes Fondamentaux
Modèle Mental : Contrôle d’Accès par Groupe
chgrp est l’outil spécialisé pour ajuster la composante “groupe” des permissions Unix. Il permet de gérer les droits d’accès collectifs, essentiels pour la collaboration et la sécurité dans un environnement multi-utilisateurs.
État et Localisation des Métadonnées
- Métadonnées de groupe : Stockées dans l’inœud (inode) du fichier, visible via
ls -l. - Base de données des groupes : Les groupes systèmes sont définis dans
/etc/group. Un groupe doit y exister pour être assigné. - Permissions d’exécution : Pour modifier le groupe, vous devez être le propriétaire du fichier ET membre du groupe cible, ou agir en tant que
root/sudo.
Contraintes et Invariants
chgrpne modifie que le groupe, jamais le propriétaire utilisateur (contrairement àchown).- L’opération est soumise aux mêmes vérifications de permissions que toute modification du système de fichiers.
- Les changements sont immédiats et ne nécessitent pas de redémarrage de service.
Règle d’or de sécurité : Utilisez toujours le principe du moindre privilège. Avant d’assigner un groupe, demandez-vous si tous ses membres ont besoin de l’accès que les permissions actuelles (ou planifiées) accordent.
Opérations Standard et Procédures Courantes
1. Modification Basique et Vérification
# Changer le groupe d'un seul fichier
sudo chgrp developers projet/script.py
# Vérification immédiate avec ls
ls -l projet/script.py
# -rw-r--r-- 1 alice developers 1234 Jan 15 10:00 script.py
Résultat attendu : La colonne du groupe affichée par ls -l montre le nouveau groupe (developers).
2. Application Récurrente sur une Arborescence
# Appliquer un groupe à un répertoire et tout son contenu
sudo chgrp -R www-data /var/www/mon_site/
# Combiner avec le mode verbeux pour un suivi
sudo chgrp -Rv backup /srv/archive/
Résultat attendu : Tous les fichiers et sous-répertoires héritent du groupe www-data. L’option -v liste chaque changement.
3. Gestion des Liens Symboliques
# Par défaut : modifie le groupe de la CIBLE du lien
sudo chgrp operators /opt/lien_vers_log -> (modifie la cible)
# Pour modifier le groupe du LIEN SYMBOLIQUE lui-même
sudo chgrp -h operators /opt/lien_vers_log
Résultat attendu : Utiliser ls -l montre le groupe du lien symbolique modifié, tandis que ls -lL (pour suivre le lien) montre le groupe de la cible.
4. Utilisation dans un Script avec Validation
#!/usr/bin/env bash
TARGET_DIR="/data/project_alpha"
TARGET_GROUP="analysts"
# Validation critique : le groupe existe-t-il ?
if ! getent group "$TARGET_GROUP" > /dev/null; then
echo "ERREUR: Le groupe '$TARGET_GROUP' n'existe pas." >&2
exit 1
fi
# Exécution sécurisée et verbose
if sudo chgrp -Rcv "$TARGET_GROUP" "$TARGET_DIR"; then
echo "Succès : Groupe modifié pour $TARGET_DIR"
else
echo "Échec : Vérifiez les permissions et les chemins." >&2
fi
Arbre de Diagnostic Rapide
Operation not permitted
Causes
- Pas de droits
sudo - Vous n’êtes pas propriétaire du fichier
- Groupe incorrect
Actions
- Utiliser
sudo - Vérifier avec
ls -l - Vérifier avec
groups
invalid group: 'nom'
Cause
- Groupe absent de
/etc/group
Action
sudo groupadd nomgetent group
cannot dereference 'lien'
Cause
- Lien symbolique protégé (
protected_symlinks)
Action
- Utiliser
-h - Vérifier les droits de la cible
Changements non persistants
Cause
- NFS / AFS ou régénération automatique
Action
- Vérifier les montages
- Inspecter le processus gestionnaire
Problèmes Connus et Contournements
Problème : Attribution involontaire via des liens symboliques en mode récursif.
- Contournement : Utilisez
-P(par défaut) ou-Hau lieu de-Lavec-R. Testez d’abord avec-vpour voir quels fichiers seraient touchés. - Cause Racine : L’option
-RLfait suivre tous les liens symboliques, pouvant conduire à modifier des fichiers en dehors de l’arborescence prévue.
- Contournement : Utilisez
Problème : Héritage de groupe indésirable après
cp -p.- Contournement : La copie avec
-ppréserve le groupe. Soit utilisezcpsans-p, soit exécutezchgrpaprès la copie pour corriger le groupe. - Cause Racine : Le comportement de préservation (
-p) decpest conçu pour la fidélité, pas pour l’adaptation au contexte cible.
- Contournement : La copie avec
Problème : L’utilisateur est propriétaire mais ne peut pas assigner à un groupe.
- Contournement : L’utilisateur doit d’abord être ajouté au groupe cible avec
sudo usermod -aG groupe_cible $USER. Une nouvelle session est nécessaire. - Cause Racine : Politique de sécurité standard : un utilisateur ne peut assigner un fichier qu’à un groupe dont il est membre.
- Contournement : L’utilisateur doit d’abord être ajouté au groupe cible avec
Protocole d’Urgence
Action Immédiate : Arrêter la Modification.
- Si vous avez lancé un
chgrp -Rsur un mauvais chemin, interrompez-le immédiatement avecCtrl + C.
- Si vous avez lancé un
Préservation : Évaluer l’Étendue des Dégâts.
- Identifiez le point de départ de la commande erronée et le groupe assigné.
- Utilisez
findpour lister récursivement tous les fichiers appartenant désormais à ce groupe depuis ce point :find /chemin/errone -group mauvais_groupe -ls
Investigation : Identifier la Cause et le Périmètre Exact.
- Consultez l’historique des commandes (
history) pour obtenir la commandechgrpexacte utilisée. - Vérifiez si des services critiques (web, base de données) utilisant des groupes spécifiques (
www-data,postgres) ont été affectés et présentent des erreurs d’accès.
- Consultez l’historique des commandes (
Processus de Rétablissement
- Prérequis : Avoir une liste fiable des permissions d’origine ou un point de référence (backup, snapshot, autre serveur).
- Étape 1 : Restauration Partielle des Services.
- Remettez les groupes critiques pour les services système (ex:
/var/www/,/var/lib/postgresql).
sudo chgrp -R www-data /var/www/ sudo systemctl restart apache2 - Remettez les groupes critiques pour les services système (ex:
- Étape 2 : Restauration Complète des Arborescences Utilisateurs.
- Utilisez un script basé sur la liste générée par
findet votre référence pour restaurer groupe par groupe.
# Exemple de correction ciblée sudo find /home/projets -group mauvais_groupe -exec chgrp bon_groupe {} \; - Utilisez un script basé sur la liste générée par
- Validation : Vérifiez l’intégrité.
- Confirmez que les services redémarrés fonctionnent.
- Faites un échantillonnage avec
ls -lRsur des répertoires clés pour vérifier que les groupes sont corrects.
Points Clés à Retenir
Sous Pression
Ctrl+Cest votre premier réflexe pour arrêter unchgrp -Rlancé par erreur.- Pour diagnostiquer,
find /path -group groupe_nameest plus rapide que de parcourir manuellement l’arborescence. - La commande
getent groupconfirme instantanément l’existence d’un groupe avant de l’utiliser.
Considérations Long Terme
- Portabilité des scripts : Préférez les GID numériques (
chgrp 1002 fichier) dans les scripts pour les environnements où les noms de groupes pourraient différer (conteneurs, différents serveurs). - Audit et conformité : Documentez les changements de groupe sur les répertoires systèmes critiques. Un changement de groupe peut être une action de persistance pour un attaquant.
- Alternative à
chgrp: La commandechown :groupe fichierest fonctionnellement équivalente. Choisissezchgrppour la clarté de l’intention dans les scripts et l’historique.
Idées Fausses à Éviter
- "
sudorésout tous les problèmes de permission avecchgrp." Vrai pour les droits, maissudone contourne pas la nécessité que le groupe cible existe. - “Modifier le groupe d’un lien avec
-hchange les droits d’accès.” Faux. Les droits d’accès sont gouvernés par la cible du lien. Modifier le groupe du lien est une opération métadonnée rarement utile. - "
chgrp -Rest sans danger sur des répertoires connus." Risqué. Des liens symboliques (/tmp,/proc) peuvent être présents et rediriger l’opération vers des chemins sensibles.