Aller au contenu

Les ACL pour une gestion avancée des droits sur les dossiers et fichiers dans Debian

Bonjour,

Il nous arrive bien souvent de devoir intervenir dans des dossiers où plusieurs utilisateurs se télescopent.

C’est le cas par exemple si nous souhaitons effacer des caches écrits par des composants du serveur web.

Nous nous heurtons alors à des problèmes de propriété et de droits associés.

Nous disposons de « mauvaises bonnes solutions » comme par exemple

  • intégrer notre utilisateur à un groupe (dont il ne fait pas réellement partie, en réalité) ;
  • ajouter une règle sudo sur mesure (qui finit bien souvent en règle trop générale, qui crée une superbe faille de sécurité).

La gestion des ACL dans Debian permet de gérer cela très simplement.

Les ACL (Access Control List)
#

Les ACL (Listes de contrôle d’accès, Access Control Lists) sont une extension des permissions classiques de Linux (Propriétaire / Groupe / Autres).

Elles permettent d’ajouter des droits sur mesure pour plusieurs utilisateurs ou groupes sur un même dossier.

Les ACL permettent de :

  • donner des accès rwx à un autre utilisateur ou groupe sans changer le propriétaire du dossier ou du fichier et de
  • définir la règle qui s’appliquera à tous les futurs fichiers d’un dossier par la suite.

C’est un outil très utile pour faire cohabiter proprement nos utilisateurs et nos groupes sans pour autant lier les uns aux autres ni accorder trop de droits aux uns ou aux autres.

Mes flux de travail basés sur rsync
#

J’utilise beaucoup de flux de travail simples et efficaces basés sur rsync pour mettre à jour des serveurs.

rsync dépose les fichiers sur le serveur via mon utilisateur sans privilège particulier.

Tout se passe bien tant que je n’ai pas besoin d’intervenir sur des dossiers ou fichiers dont mon utilisateur n’est pas propriétaire.

C’est un peu plus compliqué si je veux supprimer le cache écrit par un composant de mon serveur, par exemple, avec :

1
ssh mon-alias-ssh "rm -rf /var/www/html/var/cache/*"

La solution : Les ACL (Access Control Lists)
#

Les ACL permettent d’ajouter des règles au cas par cas dans notre structure de dossiers sur le serveur.

L’idée, très simple, est de dire au système :

« Peu importe qui crée un fichier ici, les utilisateurs user et www-data ont tous deux tous les droits dessus. »

Nous travaillons en mode administrateur (root ou autre) pour la mise en place.

Nous associons les droits aux dossiers et fichiers existants :

1
setfacl -R -m u:www-data:rwx,u:user:rwx /chemin/vers/notre/site/var

Nous définissons des droits par défaut pour tous les futurs fichiers et dossiers qui seront créés à l’intérieur des dossiers :

1
setfacl -dR -m u:www-data:rwx,u:user:rwx /chemin/vers/notre/site/var

Résultat
#

Quand mon moteur de modèles de page (Twig pour ne pas le nommer) génère un fichier de cache, ce fichier reçoit, en plus des droits habituels, des attributs liés aux ACL.

Ceci permet à mon utilisateur user de vider ce cache créé par mon moteur de modèles de pages (avec le compte www-data) sans pour autant

  • faire partie du groupe correspondant ni
  • bénéficier de privilèges que je ne veux pas lui donner.

Mon script de déploiement et / ou de nettoyage automatique peut réaliser toutes les tâches que je souhaite sans bloquer sur des erreurs.

Voilà là une technique simple, propre et robuste pour garder un serveur bien organisé sans pour autant mélanger les torchons et les serviettes ni sacrifier la sécurité.

Comment savoir si des ACL sont actives ?
#

Lorsque nous effectuons un ls -l, nous pouvons observer un petit signe + juste après les droits traditionnels. Par exemple :

1
2
3
ls -l

drwxrwxr-x+ 2 user www-data 4096 May  9 10:30 var

Le + indique qu’une liste ACL est attachée à ce dossier.

Pour en consulter le détail, nous utilisons la commande getfacl :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
getfacl /chemin/vers/notre/site/var

# file: var/
# owner: user
# group: www-data
user::rwx
user:www-data:rwx
user:user:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:www-data:rwx
default:user:user:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

Avertissements
#

Les règles associées aux droits habituels s’appliquent toujours pour les dossiers et fichiers et pour les utilisateurs et groupes qui ne sont pas désignés dans les ACL.

Une fois les ACL mises en place, certains comportements que nous connaissons dans le monde d’avant peuvent changer dans l’interprétation des commandes chmod et des droits habituels (Propriétaire / Groupe / Autres).

Je ne rentre volontairement pas dans le détail ici.

Au plaisir,

Marc JESTIN
https://marcjestin.fr