Articles Tagués ‘chmod’

1. Gestion des utilisateurs sous Unix/Linux

Unix est multi-utilisateurs. Pour cette raison, tout le monde ne peut pas tout faire, à part l’administrateur système (traditionnellement nommé root), qui à le droit de lire et d’écrire tous les fichiers de tous les répertoires.

Chaque utilisateur est désigné de manière unique par son login (son « nom »). De plus, chaque utilisateur appartient à un ou plusieurs groupes. Par exemple, sous Red Hat Linux, chaque utilisateur est par défaut seul membre de son groupe personnel et membre du groupe users. Ainsi, sur ma machine, j’ai un utilisateur damien qui est membre des groupes damien et users. L’intêret d’avoir chaque utilisateur unique membre d’un groupe dépasse le cadre de cet article.

Un fichier ou un répertoire appartient toujours à un utilisateur et à un groupe. D’autre part, un fichier peut être accessible en lecture, en écriture et en exécution. Les permissions sont distinctes pour l’utilisateur propriétaire du fichier, pour le groupe propriétaire et pour le reste du monde. Ces permissions sont affichées par la commande ls quand on lui passe l’option -l:

-rw-r--r--  1 damien   users  297 Jun 07 10:31 toto

Cette ligne signifie que le fichier toto appartient à l’utilisateur damien et au groupe users, avec les droits -rw-r--r--. Les autres valeurs (1, 297 et la date) ne nous intéressent pas ici.

Décryptage des droits -rw-r–r– : le premier caractère représente le type de fichier: « – » pour un fichier normal, « d » pour un répertoire, « p » pour un tube, « b » ou « c » pour un périphérique, « l » pour un lien symbolique.

Les trois suivants représentent les droits de l’utilisateur propriétaire du fichier.

  • « r » représente le droit de lecture,
  • « w » le droit d’écriture
  • « x » le droit d’exécution

Ici, « rw- » signifie que l’utilisateur damien peut lire et écrire dans le fichier, mais pas l’exécuter.
Les trois caractères suivants représentent les permissions du groupe; ici, tous les membres du groupe users peuvent lire le fichier, mais pas y écrire.
Enfin, les trois derniers caractères ont une signification analogue pour le reste du monde.

Une astruce mnémotechnique : pensez au prénom HUGO et vous retrouverez UGO : User, Group, Other

Une petite nuance pour les répertoires: si un utilisateur a le droit d' »exécution » sur un répertoire, cela signifie qu’il peut y entrer avec la commande cd ou équivalent.

Comment fixer les droits : on a vu que les droits d’accès sont fixés pour UGO et sont en rwx.

  rwx
  ||+-- 1
  |+--- 2
  +---- 4

Ainsi, fixer les droits sur un répertoire ou un fichier peut être synthétiser par en additionnant les valeurs pour chaque UGO.

Par exemple, un groupe « rwx » est représenté par 4+2+1=7. Un groupe « r– » par 4+0+0=4. Un groupe « –x » par 0+0+1=1. Ainsi, les permissions rw-r--r-- de notre fichier toto s’écrivent 644.

Fixer les droits :

chmod 644 toto

2. Setuid sur un script Shell ou un programme

Rappel : une ligne de commande précédée par $ indique un utilisateur lambda. Une ligne de commande précédée par # indique que cette commande est exécutée par l’utilisateur ROOT

Dans l’exemple ci-dessous, on modifie les droits du script monshell.sh par un SETUID=4 (on fixe l’utilisateur d’exécution à ROOT) :

# chown root:root monshell.sh
# chmod 4755 monshell.sh
# exit
$ ./monshell.sh

L’utilisateur exécute ici le script monshell.sh avec les droits ROOT et ce, bien que n’étant pas dans le groupe ROOT !