Chmod

De bricosoft
Aller à la navigation Aller à la recherche
Erreur dans le widget Twitter Search: unable to write file /home/gbp4dt5/zones/bricosoft.com/www/extensions/Widgets/compiled_templates/wrt693d3a4f572c51_53345202

chmod est une commande unix pour modifier les permissions d'un fichier ou d'un répertoire.

C'est l'abbréviation de change mode.

Un utilisateur peut faire un chmod d'un fichier lui appartenant

Usage

L'usage est : chmod options modes fichiers

Pour un fichier : chmod [ugoa] [+-=] [rwx] fichier

Pour un dossier c'est pareil mais on rajoute l'option de récursivité (-R)  : chmod -R [ugoa] [+-=] [rwx] dossier

  • Catégories :
    • u : utilisateur
    • g : le groupe
    • o : les autres (o pour others)
    • a : tout le monde (all) (regroupe u, g et o)
  • Droits :
    • r : lecture
    • w : écriture
    • x : éxecution(fichier) ou traversable(dossier). Si un dossier est -x on ne peut faire de cd dedans.
    • s : setuid ou setgid
      • setuid sur un exécutable (chmod u+s) : un utilisateur autorisé à l'exécuter obtient les droits du propriétaire sur le processus créé.
      • setgid sur un exécutable (chmod g+s) : pour le groupe autorisé à l'exécuter, ce groupe obtient les droits du groupe du processus.
      • setgid sur un dossier : les nouveaux fichiers et sous-dosssiers créés dans ce dossier vont hériter de l'id son groupe aulieu du groupe de l'utilisateur qui a créé le fichier (cela peut etre utile dans un dossier de partage).
    • t : sticky sur un dossier : seul le propriétaire du dossier ou root peut renommer ou effacer des fichiers. Sans le sticky bit un utilisateur ayant les droits d'écriture et exécution dans le dossier peut renommer, effacer des fichiers quelque soit le proprio. Un exemple réel est /tmp/.

Par exemple, pour autoriser la lecture à tout le monde du dossier public_html :

$ chmod -R a+r public_html 

Il existe une alternative pour définir des droits au catégories de façon plus fine en utilisant l'octal et le binaire :

Chaque catégorie(utilisateur, groupe et autres) a les trois droits (lecture, écriture et exécution). Ca fait donc 3 x 3, 9 interrupteurs pour représenter tous les droits possibles d'un fichier. Un interrupteur est représenté par un bit (0 : droit désactivé ou 1 : droit activé).

utilisateur(lecture, écriture, exécution), groupe (lecture, écriture, exécution), autres (lecture, écriture, exécution)

<google uid="C08" position="left"></google>
Notation des droits
Droit alphanumérique binaire octal
aucun droit --- 000 0
exécution seulement --x 001 1
écriture seulement -w- 010 2
écriture et exécution -wx 011 3
lecture seulement r-- 100 4
lecture et exécution r-x 101 5
lecture et écriture rw- 110 6
tous les droits (lecture, écriture et exécution) rwx 111 7

Exemples usuels

chmod u+rw toto donne au propriétaire les droits en écriture et en lecture

chmod 600 toto ne donne qu'au propriétaire les droits en écriture et en lecture (interdits au groupe et aux autre)

Copier les attributs d'un fichier vers un autre

Copie les attributs de un_fichier dans un_autre :

chmod --reference un_fichier un_autre

-rw-rw-rw- momo : est 666 ou rw+a
-r--r--r-- toto : est 444 ou juste r+a
chmod --reference toto momo
-r--r--r-- momo
-r--r--r-- toto

momo est devenu comme toto (attention il n'y aucun allusion ici).

Une alternative est avec getfacl :

getfacl toto | setfacl --set-file=- momo
$ getfacl momo
 # file: momo
 # owner: momo
 # group: momo
 user::r--
 group::r--
 other::r--

Changer les attributs des fichiers d'une arborescence sans toucher aux dossiers

<google uid="C06" position="right"></google>

chmod -R a l'inconvénient de changer les droits des répertoires, car vous avez envie d'enlever juste le droit d'exécution aux fichiers mais de pouvoir toujours traverser les sous dossiers.

chmod -R -x+X *

ou :

chmod -x $(find . -type f)

avec find et recherche de fichier :

find ./ -type f -exec chmod 644 {} +

avec find et on prends tout sauf les dossiers :

find . ! -type d -exec chmod -x {} +

la liste de tous les droits possibles

$ touch /tmp/$$;
  for N in `seq -w  0 7777|grep -v "[89]"`;
      do chmod $N /tmp/$$;
      D=`ls -l /tmp/$$ | awk '{print $1}'`;
      echo $N $D; >> droits.txt
  done;
  rm /tmp/$$

Droits.txt


Liens

{{#switch:|subgroup|child=|none=|#default=

}}