Accueil

RETOUR page 'bash'

Page actualisée le :19/06/2008

***** Permissions et droits attachés aux fichiers *****

1° Comment gérer, contrôler l' accès aux fichiers ? Linux étant multi-utilisateurs.
2° Sécurité Linux, univers multi-utilisateurs: propriétaire, groupes, les autres.
3° Syntaxe : comprendre les bases des permissions.
4° Les commandes pour afficher, modifier, les permissions : chown, chmod, chrp
5° umask : les permissions par DEFAUT.
6° Autres permissions :suid, sgid.
7° Cas concret résolu : Disque (Fat32) externe USB non reconnu sous Linux, l' est sous XP Windows... Pourquoi? Que faire ?

************************************************************************
1° Comment gérer, contrôler l' accès aux fichiers ? Linux étant multi-utilisateurs
Afficher les permissions par la commande ls -l
# ls -l mon_texte
-rw-rw-r--     1     famille     jean     5 mars 10 11:31 mon_texte
-rwxrw-r-- Ces 4 caractères (-, r, w, x) sont les permissions attachées au fichier mon_texte.

Linux étant multi-utilisateurs, diverses personnes utilisent le PC.
Ils faut mettre en place des protections, cloisonner les sessions de chacun, en partager d' autres, interdire l ' accès au noyau du système.
Mais, par contre l ' administrateur, lui, doit avoir tous les droits, réseaux compris. Sécurité oblige...
Les permissions (droits) permettent la gestion des fichiers, des plus simples au plus compliqués.
Chaque utilisateur peut gérer son domaine, selon les droits qu' il lui sont conférés... mais pas plus.
Les outils sont simples,mais la puiussance trés grande.
Le pricipe sécuritaire utilisé :

Au lancement de Linux:
Chaque utilisateur (humain) aura sa propre session avec son mot de passe.
L' administrateur du systàme a une session indépendante, avec tous les droits.
Protection suplémentaire, à l' initialisation, les droits seront restreints PAR DEFAUT; donc inférieurs aux droits maximums
Le visiteur ne pourra utiliser ces droits que dans le cadre rigide permis... pas plus.
Voir , dans cette page la commande umask et les autres liens.



************************************************************************
2° Sécurité Linux, univers multi-utilisateurs: propriétaire, groupes, les autres.
Rappels :
Uilisateur est à prendre au sens le plus large... Tout ce qui 'utilise' un fichier, lui aussi à prendre au sens le plus large...
Un humain est un utilisateur, mais aussi une imprimante, un graveur, la video...
Un utilisateur appartient obligatoirement à un groupe principal et éventuellement, à plusieurs groupes secondaires .
Si l' utilisateur crée un fichier, celui-ci dépendra du groupe principal. Mais s 'il 'utilise' des fichiers de groupes secondaires, il n' aura que les droits accordés au groupe secondaire.

Modifier le GROUPE de fichiers et de répertoires , changer les groupes y ayant accès : commande chgrp et ses options
Voir les man pous plus de détails: groups, useradd, groupedel, id
Modifier le propriétaire de répertoires et de fichiers , changer de propriétaire : commande chmod.


************************************************************************
3° Syntaxe : comprendre les bases des permissions.
Afficher les permissions par la commande ls -l
# ls -l mon_texte
-rw-rw-r--     1     famille     jean     5 mars 10 11:31 mon_texte
Analysons la colonne la plus à gauche, constituée de 10 éments -rw-rw-r--
et formons 4 colonnes numérotées.
Puis vers la droite successivement :
Le groupe qui peut accéder au fichier (donc tous les utilisateurs apparternant à ce groupe) famille).
et le propriétaire jean du fichier mon_texte.

n° colonne 1 2 3 4
Les permissions - rwx rw- r--
Visiteur identifié   uuu ggg ooo

Ventilons -rw-rw-r-- par 3 éléments en partant de la droite..
Colonne 1 Indique si le fichier est de type classique ou répertoire.
Si - c' est un fichier classique sinon d pour un répertoire .
Linux distingue 3 catégories d' utilisateurs : le propriétaire (colonne 2), le groupe (colonne 3), et tous les autres (colonne 4)
A chacun il attache 3 droits d' accès : le droit de lecture (r Read), le droit d' écriture (w Write), le droit d' exécution (x Execute), sinon il interdit par -
Colonne 2 :Est propriétaire du fichier celui qui le crée ( u User). Ce propriétaire fait parti d' un groupe.
Colonne 3 :Tout utilisateur appartient à un groupe particulier ou à plusieurs groupes (g Group). Un groupe est constitué de un ou plusieurs utilisateurs.
Colonne 4 :Tous les autres sont... o (Other).

Tout est utilisateur potentiel : un humain mais aussi un processus, un programme, une imprimante etc... qui crée, efface, exécute, utilise...

Tableau récapitulatif des permissions/droits accordées.
   permission accordée notation octale fichier répertoire
Lecture r 4    Lisible   lisible avec ls -l
Ecriture w 2    modifiable   peut être effacé, renommé
  ou recevoir des fichiers
Exécutable x 1   Exécute en tant que programme      accès en lecture des fichiers  
  et sous-répertoires et
  exécution des fichiers

NOTATION OCTALE : On affecte un nombre à chaque lettre (4=r,2=w, 1=x). On additione r+w+x puis on accole les 3 résultats des 3 colonnes;
si -  rw-  rwx-  r--(4+2+0)   (4+2+1)   (4+0+0) donne 674
si -  rw-  rwx-  r-- = 664
-  rw-  r--  r-- = 644
-  rwx  r-x  --- = 750
-  rwx   ---    --- = 700
REMARQUE IMPORTANTE :
Pour accéder à un fichier, il faut pouvoir entrer dans le répertoire (dossier) qui le contient !
Ce répertoire doit avoir obligatoirement la permision x accordée.
C' est ce qui explique pourquoi pour un fichier les droits maximums (par défaut) sont fixés à 666 (-rw-rw-rw-)
mais 777 (-rwxrwxrwx) pour un répertoire).
Voir umask



************************************************************************
4° La commande pour afficher, modifier, les permissions : chmod
A la création d' un fichier ( au sens le plus large) des permissions , des droits standards lui sont données, PAR DEFAUT (voir la commande umask)
Pour modifier ces permissions il faut OBLIGATOIREMENT soit être propriétaire, soit super-administrateur (root).
Utiliser la commande chmod. La syntaxe est simple.
chmod    pour_qui    permissions_accordées    nom_du_fichier
   pour_qui : u (propriétaire, g groupe, o le reste du monde).
Le signe +'pour donner, le signe - pour enlever, = pour attribuer de façon exclusive.
# chmod u+x mon_fichier.sh
Dans cette exemple le user (u donc le propriétaire) peut exécuter le fichier.
# chmod o-r photos
Ici 'le reste du monde' ne peut pas VOIR ce répertoire photos/.



************************************************************************
5° umask : les permissions par DEFAUT.
DROITS par DEFAUT:
Le système donne, par défaut, certains droits à tout fichier ou répertoire, dès sa création; droits, avant filtrage, dits droits maximums.
Conséquences : il n' y a pas création sans permissions accordées par défaut.
La sécurité oblige à ne pas tout accorder à tous...Un fichier n' aura pas, au départ, la permission x (execute).
Dans le cas d' un fichier exécutable le propriétaire devra obligatoirement modifier et rajouter x en utilisant la commande chmod.
666 (-rw-rw-rw-) pour un fichier et 777 (drwxrwxrwx) pour un répertoire).
Pour connaître les droits réels (avant modification) taper dans une console la commande umask (affichage octale.pour les 3 colonnes; 4=r,2=w, 1=x) :
Droits réels accordés = droits maximums - (droits enlevés par UMASK).

$ umask
244

SYNTAXE :
ATTENTION la notation est totalement différente pour usmask qui est un masque (de bits) .
Il retranche. et distingue fichiers (droits maximums 666 ) et répertoire (droits maximums 777 )
Il faut partir des droits maximums et retrancher la valeur de umask pour obtenir les permissions accordées.
1° Si c' est un fichier (droits maximums 666) faire :
666 - 244 = 422    donc    r--  -w-   -w-

2° Si c' est un répertoire (droits maximums 777 ) faire :
777- 244 = 533 par défaut les fichiers auront comme droit s accordés 533 (-r-x-wx-wx).
Attention 2 remarques importantes :
1° umask n'est utilisable que si on est propriétaire du fichier (sécurité oblige).
2° Les modifications ne sont valables que pour la durée de la session en cours (sécurité oblige).

# umask 022

Ici 0 : on... n' enlève rien (donc on accorde TOUT à u)
2 : on enlève w (donc on laisse le reste). Les permissions accordées deviennent r-x si répertoire
mais r-- si fichier classique.
Au final nous avons pour le fichier les permissions accordées : drwxr-xr-x ou -rwxr--r--, selon le cas.



************************************************************************
6° Permission SUID (abréviation de Set UID) :
Nous connaissons r,w,x mais il existe d' autres permissions ne s' appliquant qu' aux fichiers exécutables (ni sur r ou w ni sur les répertoires). suid
Quand suid est activé l 'utilisateur u a les droits identiques à ceux du propriétaire sur ce fichier.
$ ls -l /usr/bin/passwd
-rws  r-x  r-x
le x a été remplacé par s
Ce qui permet à tout le monde de pouvoir mettre son password.
le x est remplacé par S dans le cas de droit non exécutable ( par le propriétaire) avant la permission accordée.
Avec S utilisateur et propriétaire obtiennent ce droit à exécuter..
ATTENTION SECURITE :
Ne pas attribuer SUID aux utilisateurs quand vous êtes en root sinon vous leurs attribuez les droits "administrateur".

Permission SGID (abréviation de Set GID) :
Pour fichiers et répertoires.
1° SGID mis à un fichier : G au lieu de U donc l' utilisateur a les permissions du groupe ( et non celles du propriétaire).
2° SGID mis à un répertoire : Après cette action, tous les fichiers du répertoire appartiennent au groupe assigné au répertoire.



************************************************************************
7° Cas concret résolu :
Un Disque (Fat32) externe USB contient des fichiers et répertoires créés sous XP Windows.
Nous voulons tranférer le tout sur une partition Linux....
Impossible d' écrire, de recopier , de renommer, de tranférer, sous Linux, avec ce disque.... Pourquoi ? Que faire ?
ANALYSE :
Les partitions FAT ignorent les permissions.
Par sécurité Linux interdira la permission x (execute) au branchement en USB.
On ne pourra que lire.
On essaye d' utiliser chmod pour donner les permissions nécessaires aux répertoires et fichiers du disque USB...
Rien n' y fait, échecs...
POURQUOI ? :
SOLUTION :
1° Créer , dans media/ le répertoire où sera monté l 'USB.
2° Modifier le fichier /etc/fstab pour donner l' umask 000 ( lever les interdictions) à l' USB avant le lancement du PC.
Ce qui oblige d' être en root (super-administrateur).
3° Relancer le PC.
4° Effectuer manuellement (obligatoire) le montage (mount) du disque USB.
Ayant tout les droits sur ce disque USB on pourra faire les manipulations désirées...

MODE OPERATOIRE :
-- Etre en root
-- Créer le répertoire/media s' il n' existe pas.
-- Ouvrir le fichier /etc/fstab et y rajouter la ligne :
/dev/sda    /media/usba   vfat   user,rw,umask=000   0   0
Afin de permettre ,par défaut, la lecture, l' écriture, l' exécution r,w,x par umask=000 pourle disque dur,clés USB (sda,) et vfat
-- Relancer le PC :
-- Monter manuellement le disque :
# mount   /media/usba