ACL sous OSX

Pour le commun des mortels, la gestion des droits sur le systeme de fichier HFS se réduit à la meme gestion des droits sous Unix dans les années 90 avec la finesse et la précision de celle-ci. Qui n’a pas sur usé du chmod 777…

User1 : « ça ne fonctionne pas, j’arrive pas à voir ton partage »
User2 : « attend..chmod -R 777 mon_repertoire… c’est bon ? »
User1: « Ouais t’es trop fort »

Ok, cela fonctionne, mais niveau finesse de la commande on repassera.
Les systemes de fichiers modernes proposent maintenant une gestion des droits sous forme d’ACL et HFS en fait parti.
Il est vrai que l’approche de ACL sous Osx n’est pas aussi « clikaconvi » que sous un environnement Microsoft, le Finder n’aide pas vraiment non plus.

finder ACL

Pour preuve cette capture d’écran où l’on peut voir des privilèges de type « personnalisé » et les choix possibles sont un peu restreint : lecture/écriture, lecture seulement, écriture seulement(boite de dépôt).
Nous allons comment à l’aide du shell nous pouvons exploiter cette fonctionnalitée.

Lister les droits étendus

Tout comme pour les droits standard (UserGroupOther) on utilisera la commande ls… et oui tout simplement :
[ccNw_bash]ls -eld Sites
drwx——+ 24 prudprud staff 816 13 mai 12:05 Sites 
0: user:paulthomas deny list 
1: group:everyone deny delete[/ccNw_bash]
Il existe un bon nombre de droit possible :

Les attributs

  • delete                Effacer l’élément
  • readattr              Lire les attributs standarts.
  • writeattr              Ecrire les attributs standarts
  • readextattr         Lecture des attributs étendus.
  • writeextattr         Ecrire les attributs  étendus.
  • readsecurity      Lecture des ACL et propriétaire.
  • writesecurity      Ecriture de ACL, propriétaires et droits standards
  • chown                 Changement du propriétaire.

Les répertoires

  • list                        Lister le contenu d’un dossier
  • add_file              Ajouter un fichier au dossier
  • add_subdirectory            Ajout d’un sous dossier au dossier.
  • delete_child      Efface un objet d’un dossier.

Sur les fichiers

  • read                Lecture du fichier.
  • write                Ouverture du fichier pour écriture (pas de lecture possible)
  • append           Ouverture pour ajout dans le fichier
  • execute          Executer un fichier (binaire ou autre)

Les droits d’heritage

Les paramètres d’héritage se positionne sur les dossiers et concerne l’héritage des paramètres de sécurité à leur contenu

  • file_inherit               Les fichiers héritent des attributs
  • directory_inherit     Les dossiers héritent des attributs
  • limit_inherit             Limite l’héritage au dossier et n’est pas récursif

Comme beaucoup de système d’ACL, il y a un sens de lecture, l’OS va lire les regles à partir de 0, Il est donc important de bien construire ses ACL et ne pas avoir par exemple une regle généraliste en premier.
Si aucune règle ne match la demande en cours, l’OS se referra alors aux droits Unix standard du fichier.

Ajout de droit

Tout comme les attributs standard, on utilise la commande chmod pour la manipulation des acl.
[ccNw_bash]chmod +a « paulthomas allow list » Sites
[/ccNw_bash]
Cela ajout une regle en dernier rang des acl, si dans la cas :

[ccNw_bash]–> ls -eld Sites
drwx——+ 24 prudprud staff 816 13 mai 12:05 Sites
0: user:paulthomas deny list
1: group:everyone deny delete
–> chmod +a « paulthomas allow list » Sites
–> ls -eld Sites
drwx——+ 24 prudprud staff 816 13 mai 12:05 Sites
0: user:paulthomas deny list
1: group:everyone deny delete
2: user:paulthomas allow list
–>
[/ccNw_bash]

J’ai donc ajouté le droit de lister le contenu d’un répértoire à l’utilisateur paulthomas.
mais pourtant

[ccNw_bash]bac:~ paulthomas$ ls /Volumes/data/prudprud/Sites/
ls: : Permission denied
bac:~ paulthomas$
[/ccNw_bash]

Et oui, l’ajout d’un droit contraire n’annule en rien l’interdiction d’origine, il va donc falloir effacé la première règle.

Suppression

Tres simplement en utilisant chmod soit en indiquant la regle à supprimer :

[ccNw_bash]–> chmod -a « paulthomas deny list » Sites
[/ccNw_bash]

ou alors en indiquant le numéro de la regle
[ccNw_bash]–> chmod -a# 0 Sites
[/ccNw_bash]

Insertion/Remplacement

Si on souhaite écraser une ACL pour la remplacer, on utilisera le parametre ‘=a#’
[ccNw_bash]chmod =a# 1 « paulthomas deny list » Sites
[/ccNw_bash]

Pour l’insertion d’une règle ACL c’est aussi tres simple
[ccNw_bash]chmod +a# 1 « gregoiremaggot deny read » Sites
[/ccNw_bash]
Cela place la nouvelle ACL au rang 1 et l’ancienne 1 est retrogradée au rang 2.

En espérant que cela puisse vous servir à ne pas donner tous les accès à tous le monde.