[OS X] – Gestion des droits d’accès aux fichiers

Aujourd’hui tous les systèmes d’exploitation sont conçus pour être multi-utilisateurs, ce qui est en soit pratique mais qui peut également devenir rapidement problématique si nous nous posons la question des droits d’accès. Autrement dit, comment dans un environnement multi-utilisateur pouvons nous êtres certain que des données privées le reste ? La réponse n’est autre que les droits d’accès.

Cet article ne traitera que de la partie théorique des droits d’accès et que très peut de la partie pratique (uniquement pour les exemples), il vous est donc recommandé de lire le manuel de fonctionnement des commandes ls, chown et chmod du système Mac OS X.

Le système Mac OS X (qui inclut Mac OS X Server) est construit sur une base UNIX (Darwin). Cette information peut paraître anodine mais elle nous donne un premier élément de réponse à notre gestion des droits d’accès, le système POSIX.

Le terme POSIX désigne une série de standards définissant le comportement des systèmes de la famille UNIX, pour plus de précision sur l’ensemble du standard je vous invite à consulter l’article Wikipedia, nous nous attarderons ici seulement sur la partie droit d’accès que nous résumerons ainsi :

Un fichier ou un dossier d’un système UNIX voit ses accès contrôlé à trois niveaux : l’utilisateur, le groupe et les autres; et par trois droits possibles : lecture, écriture, exécution. Cela entend que nous allons pouvoir, grace à ce système, préciser quel utilisateur est propriétaire de la ressource, quel est le groupe associé, et quel comportement adopter pour le reste des utilisateurs. À chacun de ces niveaux nous allons pouvoir dire si l’entité concerné a le droit de lire, d’écrire ou d’exécuter la ressource.

La notation adopté pour ces trois droits est R (Lecture), W (Ecriture), X (Exécution) et s’interprète de la sorte :

Pour un fichier :

  • R : Lire le contenu du fichier
  • W : Modifier le fichier
  • X : Exécuter le fichier (utiliser dans le cas de fichier binaire ou de scripts)

Pour un dossier, les droits sont identiques mais l’interprétation est légèrement différente :

  • R : Lister le contenu du dossier
  • W : Modifier le contenu du dossier (ajouter ou supprimer une ressource)
  • X : Traverser le dossier

Si les deux premiers droits applicable pour un dossier sont simples, le dernier mérite une explication. Le droit de traverser un dossier entend le droit de l’écrire dans un chemin d’accès. Si l’ont regarde l’utilisation d’un système d’exploitation par une ligne de commande, nous sommes obliger d’écrire le chemin d’accès à nos ressources. Si par exemple je veux lire le contenu de mon fichier comment_devenir_riche.txt se trouvant dans le dossier Documents de mon dossier personnel en ligne de commande je utilise cette commande :

less /Users/yoanngini/Documents/comment_devenir_riche.txt

Pour accéder à ma formule secrète pour devenir riche je dois partir de la racine (/) de mon système puis le dossier Users, mon dossier personnel yoanngini et enfin mon dossier Documents. pour que mon action réussisse ici seul deux droits seront necessaire, celui d’exécution sur les trois dossiers Users, yoanngini, Documents, et le droit de lecture sur mon fichier comment_devenir_riche.txt.

En effet il n’est pas nécessaire d’avoir les droits de lecture (lister) sur un dossier pour accéder à son contenue mais uniquement le droit d’exécution.

Si nous prenons un exemple existant dans le système OS X, la drop box (ou boite de dépots en français) se trouvant dans votre dossier personnel/Public et que nous regardons les droits d’accès avec notre terminal (commande ls) nous obtenons ceci :

ls -l ~/Public
total 0
drwx-wx-wx+ 3 yoanngini staff 102B 24 mai 2008 Drop Box/

La première série de caractère nous indique le type de la ressource listé (premier caractère), ensuite par groupe de trois caractères nous avons les droits d’accès pour le propriétaire (indiqué en colonne trois); pour le groupe (colonne quatre) et pour les autres. Soit :

  • d : indique que la ressource est un dossier (peut être un l pour un lien symbolique ou un – pour un fichier)
  • rwx : droit de lecture, d’écriture et d’exécution pour le propriétaire yoanngini
  • -wx : droit d’écriture et d’exécution pour le groupe staff
  • -wx : droit d’écriture et d’exécution pour les autres

Pour l’utilisateur qu’est-ce que cela entend ?

  • Le propriétaire a tous les droits sur son dossier
  • Le reste (staff + les autres) a le droit de traverser et d’écrire dans le dossier, mais pas de lister son contenue

C’est ici le comportement même de la drop box, un dossier ou tout le monde pourra écrire mais où seul le propriétaire pourra lire.

Maintenant que nous connaissons les droits d’accès avec le système POSIX, prenons un cas d’espèce pour mettre en lumière ses limites.

Nous sommes dans l’entreprise Protovision, éditeur de jeux vidéo pour ordinateur. L’entreprise est divisé en équipe en fonction des jeux en cours de production en plus des équipes administratives. Ce qui nous donne coté informatique cette liste de groupe :

  • Direction (nom court : direction)
  • Comptabilité (nom court : compta)
  • Equipe Global Thermonuclear War (nom court : e_gtw)
  • Equipe The Dead Code (nom court : e_tdc)

L’équipe du jeu Global Thermonuclear War a fait du très bon travail et toute l’entreprise prépare une soirée surprise pour eux, pour se faire toutes les informations sur cette soirée sont mise sur un dossier commun dans lequel les organisateurs peuvent lire et écrire, et tout le monde sauf l’équipe du jeu doit pouvoir y lire.

Pour réaliser ceci avec les droits d’accès POSIX nous allons devoir créer deux nouveaux groupes :

  • Organisateurs de la soirée (nom court party_o)
  • Complices de la soirée (nom court party_c) — Ce groupe inclus le groupe des organisateurs

Et ensuite créer une arborescence particulière en commençant par créer un dossier A dont le propriétaire sera l’administrateur, il disposera de tous les droits (rwx); le groupe sera celui des complices de la soirée en lecture seule (r-x); et les autres n’auront aucuns droits (—). Ensuite à l’intérieur du dossier A nous devrons créer un dossier B , le propriétaire sera toujours l’administrateur avec tous les droits (rwx); le groupe sera cette fois ci celui des organisateurs et disposera de tous les droits également (rwx) et les autres auront ici un accès en lecture seul (r-x).

Si on analyse ce qu’il va se passer au niveau du système, l’utilisateur devra en premier accéder au dossier A, pour cela il faudra qu’il soit soit administrateur soir complice de la soirée, les membres de l’équipe Global Thermonuclear War seront donc bloqué à partir de la. Ensuite à l’intérieur du dossier A il ne se passera rien, tout se passera dans le dossier B ou tout le monde pourra accéder en lecture et seul l’administrateur et le groupe des organisateurs pourra écrire.

L’astuce à voir ici est que la limitation d’accès s’est fait en combinant deux séries de droits POSIX pour arriver à nos fins, ce qui, vous en conviendrez, peut très vite devenir complexe et impose la création de nouveau groupe.

Pour aller plus loin dans notre gestion des droits d’accès nous allons donc avoir besoin d’un autre système de droit, les ACL, pour Access Control List (Liste de contrôle d’accès). Ce système vient en complément du système POSIX, il vous faudra donc connaître les deux parfaitement pour être efficace.

Le système des ACL introduit la possibilité d’avoir une liste de droits appliquer à autant d’utilisateur ou de groupe que nécessaire et pour une ressource et une précision sur les droits eux même accrue.

Vous retrouverez la liste des droits ACL dans la page de manuel de la commande chmod, dans la section ACL MANIPULATION OPTIONS, les voici expliqué :

Droits applicables à toutes les ressources :

  • delete : Permission de supprimer la ressource sur laquelle le droit est appliqué
  • readattr : Permission de lire les attributs standards d’une ressource
  • writeattr : Permission de modifier les attributs standards d’une ressource
  • readextattr : Permission de lire les attributs étendus d’une ressource
  • writeexattr : Permission de modifier les attributs étendus d’une ressource
  • readsecurity : Permission de lire les attributs de sécurité d’une ressource (les ACL, le propriétaire, etc) — Nécessaire pour savoir qu’on a les droits sur la ressource
  • writesecurity : Permission de modifier les attributs de sécurité d’une ressource (ACL, droit POSIX, propriétaire, etc)
  • chown : Permission à l’utilisateur de prendre la propriété POSIX de la ressource

Droits applicables aux dossiers uniquement :

  • list : Le droit de lister le contenu d’un dossier
  • search : Le droit de faire une recherche par nom de fichier à l’intérieur de ce dossier
  • add_file : Le droit de créer un nouveau fichier à l’intérieur du dossier en question
  • add_subdirectory : Le droit de créer un nouveau dossier à l’intérieur du dossier en question
  • delete_child : Le droit de supprimer un élément inclus, dossier ou fichier

Droits applicables aux fichiers uniquement :

  • read : Permission de lire un fichier
  • write : Permission de modifier un fichier dans son intégralité
  • append : Permission de modifier un fichier sans pour autant modifier l’existant (ne marche pas avec tous les types de fichier, essentiellement le droit de rajouter des informations à la fin du fichier)
  • execute : Permission d’exécuter le programme ou le script

Notion d’héritage (s’applique sur les dossiers) :

  • file_inherit : Les fichiers inclus hériterons de l’ACL
  • directory_inherit : Les dossier inclus hériterons de l’ACL
  • limit_inherit : Limite l’héritage aux premier niveau de sous dossier, pour éviter que l’ACL soit appliqué aux sous dossier inclus dans les dossiers enfants de premier niveau
  • only_inherit : L’ACL ne sera pas interprété pour le dossier sur lequel elle est appliqué mais uniquement pour ses éléments enfants (peut permettre de donner le droit d’ajouter des fichiers dans les dossiers inclus mais pas dans le dossier lui même)

Chacune de ces options pourra être utiliser donner ou refuser des droits aux utilisateurs via les mots clef allow et deny lors de la création des droits

Si nous reprenons notre exemple avec les ACL nous auront toujours besoin d’un groupe organisateur mais pas d’un groupe invité, et d’un seul dossier. Voici comment faire :

Nous partons donc avec un dossier C sur lequel nous allons utiliser ingénieusement ACL en complément des droits POSIX. Le propriétaire sera toujours l’administrateur avec tous les droits, le groupe sera le groupe des organisateurs avec tous les droits également et les autres n’auront que les droits de lecture. Il nous reste simplement à rajouter une ACL interdisant tout type d’accès à l’équipe Global Thermonuclear War.

Enfantin ! N’est-ce pas ?

Laisser un commentaire