Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Les permissions sous Linux

Cours / tutoriel écrit le 17-06-2010 par sky

Un article de Wikipédia, l'encyclopédie libre

Les permissions UNIX constituent un système simple de définition des droits d'accès aux ressources, représentées par des fichiers disponibles sur un système informatique. Elles restent le moyen le plus utilisé pour définir les droits des utilisateurs sur les systèmes de type UNIX.



Introduction

Notion d'utilisateur (user)

Toute entité (personne physique ou programme particulier) devant interagir avec un système UNIX est authentifié sur cette machine par un utilisateur ou user. Ceci permet d'identifier un acteur sur un système UNIX. Un utilisateur est reconnu par un nom unique et un numéro unique (la correspondance nom/numéro est stockée dans le fichier /etc/passwd).



Tous les utilisateurs UNIX n'ont pas les mêmes droits sur la machine (ils ne peuvent pas tous faire la même chose), et ceci simplement pour des raisons de sécurité et d'administration. Par exemple, pour éviter tout problème sur Internet, l'utilisateur qui gère le serveur HTTP ne peut pas exécuter des commandes localement.



Certains utilisateurs ne peuvent en effet pas s'authentifier sur la machine et accéder à un interpréteur de commandes. Cela ne veut toutefois pas dire qu'ils ne peuvent rien faire sur la machine : il leur est possible de lire ou écrire des fichiers mais cela nécessite que le super-utilisateur (voir plus bas) démarre un programme pour cet utilisateur. Ce mécanisme est généralement utilisé pour les démons : le super utilisateur démarre le démon et pour éviter que ce dernier puisse faire tout et n'importe quoi sur la machine, il est par exemple attribué à l'utilisateur bin.



Sur tout système UNIX, il y a un super-utilisateur, généralement appelé root, qui a tous les pouvoirs. Il peut accéder librement à toutes les ressources de la machine, y compris à la place d'un autre utilisateur, c'est-à-dire sous son identité. En général, du moins sur les systèmes de production, seul l'administrateur système possède le mot de passe root. L'utilisateur root porte le numéro 0.



Groupe

Un utilisateur UNIX appartient à un ou plusieurs groupes. Les groupes servent à rassembler des utilisateurs afin de leur attribuer des droits communs. Par exemple, sur un système doté d'une carte son, il y a souvent un groupe audio qui regroupe les utilisateurs autorisés à en faire usage.



Propriété

Tout fichier UNIX possède un propriétaire. Au départ, c'est l'utilisateur qui a créé le fichier mais il possible de le « donner » à un autre utilisateur. Seul le propriétaire du fichier et le super utilisateur (root) peuvent changer les droits et l'appartenance de ce fichier. Seul root peut s'attribuer un fichier, mais un utilisateur ordinaire peut donner un de ses fichiers à un autre utilisateur ordinaire.



Un fichier UNIX appartient aussi à un groupe. Ceci donne pleinement son sens à la notion de groupe. On définit ainsi les actions du groupe sur ce fichier. Ce groupe est souvent le groupe d'appartenance du propriétaire, mais ce n'est pas obligatoire. Tout dépend en fait de ce qu'on veut faire. On peut imaginer un scénario de délégation d'administration : le super utilisateur est propriétaire d'un fichier de configuration, mais autorise tous les utilisateurs du groupe admin (les administrateurs) à modifier ce fichier. Le fichier en question aura donc root comme propriétaire et appartiendra au groupe admin.



Rappelons que les répertoires sous UNIX sont aussi des fichiers. Les droits sur les répertoires (mais aussi les périphériques, etc.) fonctionnent exactement de la même façon que sur des fichiers ordinaires.



Droits d'accès à un fichier

À chaque fichier est associée une liste de permissions, qui déterminent ce que chaque utilisateur a le droit de faire du fichier.



Fonctionnement

Les différents droits

Les droits sur un fichier UNIX s'attribuent sur trois « actions » différentes possibles : la lecture (r), l'écriture (w) et l'exécution (x). Pour les répertoires, x correspond à l'accès au répertoire. On appelle parfois r, w et x des « flags » ou « drapeaux ». Sur un fichier donné, ces 3 flags doivent être définis pour son propriétaire, son groupe, mais aussi les autres utilisateurs (différents du propriétaires et n'appartenant pas au groupe).



Seuls root et le propriétaire d'un fichier peuvent changer ses permissions d'accès sans restriction particulière.



Représentation des droits

Cet ensemble de 3 droits sur 3 entités se représente généralement de la façon suivante : on écrit côte à côte les droits r, w puis x respectivement pour le propriétaire (u), le groupe (g) et les autres utilisateurs (o). Les codes u, g et o sont utilisés par les commandes UNIX qui permettent d'attribuer les droits et l'appartenance des fichiers. Lorsqu'un flag est attribué à une entité, on écrit ce flag (r, w ou x), et lorsqu'il n'est pas attribué, on écrit un '-'. Par exemple,



 rxwr-xr--

signifie que le propriétaire peut lire, écrire et exécuter le fichier, mais que les utilisateurs du groupe attribué au fichier ne peuvent que le lire et l'exécuter, et enfin que les autres utilisateurs ne peuvent que lire le fichier.



Une autre manière de représenter ces droits est sous forme binaire grâce à une clef numérique fondée sur la correspondance entre un nombre décimal et sont expression binaire :
0 = 000
1 = 001
2 = 010
3 = 011
4 = 100
5 = 101
6 = 110
7 = 111
A l'expression binaire en trois caractères sont associés les 3 types de droits (r w x) ; il suffit donc de déclarer pour chacune des catégories d'utilisateur (user, group, others) un chiffre entre 0 et 7 auquel correspond une séquence de droits d'accès. Par exemple :
777 filename >> - r w x r w x r w x
605 filename >> - r w - - - - r - x
644 filename >> - r w - r - - r - -
666 filename >> - r w - r w - r w -



Une astuce permet d'associer rapidement une valeur décimale à la séquence de droits souhaitée. Il suffit d'attribuer les valeurs suivantes pour chaque type de droit :
lecture (r) >> 4
ecriture (w) >> 2
execution (x) >> 1
et d'additionner ces valeurs selon qu'on veuille ou non attribuer le droit en correspondant.



Ainsi, rwx « vaut » 7 (4+2+1), r-x « vaut » 5 (4+1) et r-- « vaut » 4. Les droits complets (rwxr-xr--) sont donc équivalent à 754. Un manière directe d'attribuer les droits est de les écrire sous cette forme et d'utiliser le code à 3 chiffres résultant avec chmod (voir ci-après).



Utilisation

Pour voir quels droits sont attribués à un fichier, il suffit de taper ls -l nom_du_fichier :



 # ls -l toto
 -rwxr-xr--    1 user     group     12345 Nov 15 09:19 toto 

La sortie signifie que le fichier toto (de taille 12345) appartient à « user », qu'on lui a attribué le groupe « group », et que les droits sont rwxr-xr--. On remarque qu'il y a en fait 10 caractères sur la zone de droits. Le premier - n'est pas un droit, c'est un caractère réservé pour indiquer le type de fichier (on aura par exemple un d à la place pour indiquer un répertoire).



Le changement de droits s'effectue avec la commande chmod ; le changement de propriétaire ou de groupe, à l'aide de la commande chown.



Changer les droits s'effectuer également simplement à partir du nombre à 3 chiffres calculé comme précédemment. Ainsi, pour attribuer les droits r-xr-xr-x (i.e. 555), il suffit d'exécuter :



 chmod 555 nom_du_fichier

Commentaires

Aucun commentaire. Soyez le premier !

Pseudo
Email
Commentaire

Merci d'écrire le code ici :