Flux rss
Collection CommentCaMarche.net

[Sécurité] Droits d'accès - GNU/Linux

Publié par lami20j, dernière mise à jour le vendredi 20 juin 2008 à 16:00:30 par Ssylvainsab

Les droits d'accès





Préface


Le but de cet article n'est pas de vous apprendre quels droits vous devez positionner sur vos fichiers ou répertoires ni pourquoi.
L'utilisation de la gestion des utilisateurs, groupes ou autres ainsi que les permissions accordées, dépend de chaque configuration, de la stratégie mise en place par l'administrateur de votre système et aussi de vos besoins.
En revanche dans l'article vous trouverez une brève présentation des droits que le système GNU/Linux utilise ainsi que les commandes utilisées pour le faire.

Un grand merci à jipicy pour sa disponibilité et sa patience pour les corrections linguistiques ainsi que certaines d'ordre technique.

I. Généralités


Sous un système GNU/Linux tout est fichier, y compris les fichiers spéciaux qui désignent les périphériques. Linux divise les fichiers en plusieurs catégories :
  • les répertoires
  • les fichiers ordinaires (programmes, fichiers de configuration, fichiers de données, etc..)
  • les fichiers spéciaux (type bloc ou caractère)


Le système de fichier sous GNU/Linux est organisé dans une arborescence, n'ayant pas besoin de mentionner le nom du disque ou de la partition pour y avoir accès.

II. Les droits


Dans un système GNU/Linux, tout fichier se voit attribuer des droits pour 3 identités :
  • le propriétaire - c'est l'utilisateur qui a créé le fichier ou l'utilisateur que root a désigné comme propriétaire
  • le groupe (qui n'est pas forcément le groupe du propriétaire)
  • les autres (ceux qui ne font pas partie du groupe)


La commande ls -l nous permet d'afficher les droits d'un fichier sous GNU/Linux.

Pour chaque identité (voir plus haut), il existe 3 droits d'accès :
  • r - read (le droit de lecture)
  • w - write (le droit d'écriture)
  • x - execute (le droit d'exécution)


L'affichage des droits est représenté par une chaîne de 9 caractères, précédée d'un caractère, représentant le type de fichier.


Ces 9 caractères, regroupés 3 par 3 (rwx rwx rwx), définissent les droits des 3 identités (propriétaire, groupe et les autres).

Pour chaque droit existant on voit une lettre parmi r,w ou x (voir plus haut) et si un droit n'existe pas on utilise le tiret (à ne pas confondre avec le 1er tiret qui signifie - fichier régulier).
Signification		Symbol	Propriétaire	  Groupe	Autres
______________________________________________________________________
fichier régulier	-	
répertoire		d
périphérique caractère	c
périphérique bloc	b	  r w x		  r w x		r w x
lien symbolique		l
tube nommé		p
socket locale		s
______________________________________________________________________


Exemple :

-rwxr-x---

Ce qui signifie :
  • qu'il s'agit d'un fichier régulier ( le 1er caractère est un tiret -)
  • que le propriétaire a tous les droits (ReadWriteExecute donc LireEcrireExécuter)
  • que les membres du groupe ont les droits de Lire (le 1er caractère est r) et d'Exécuter (le 3ème caractère est x), en revanche ils n'ont pas le droit d'Ecrire (le 2ème caractère est un tiret -)
  • que les autres n'ont aucun droit, ni de lecture, ni d'écriture, ni d'exécution (les 3 caractères sont des tirets -)

III. Les droits spéciaux


1. Le Sticky bit


Le Sticky bit est un droit spécial dont le comportement est différent pour les fichiers exécutables et les répertoires.
Il correspond à la lettre t ou numériquement à 1000.
Si les droits d'exécution ne sont pas positionnés c'est la lettre T qui correspond.
  • les fichiers exécutables - le programme restera en mémoire pour une exécution ultérieure
  • les répertoires - si le sticky bit est positionné sur un répertoire, seul le propriétaire pourra supprimer ses fichiers (c'est le cas des répertoires /tmp et /var/tmp sous GNU/Linux)


Exemple :
$ ls -l / | grep tmp;ls -l /var | grep tmp
drwxrwxrwt 12 root root 1024 2006-07-22 14:18 tmp
drwxrwxrwt 4 root root 4096 2006-07-22 10:23 tmp
C'est l'affichage des droits pour /tmp et /var/tmp.
Nous remarquons que le dernier caractère dans la suite des 9 pour les droits est un t et pas un x ou un tiret.

2. Les droits d'endossement


SetUID et SetGID

Les droits d'endossement dans GNU/Linux sont représentés par :
  • la lettre s (si le droit x est positionné)
  • la lettre S (si le droit x n'est pas positionné)


Numériquement, les droits d'endossement sont représentés de la façon suivante :
  • 4000 - pour l'endossement de l'identité du propriétaire
  • 2000 - pour l'endossement de l'identité du groupe


Le comportement des droits d'endossement.
  • Pour les fichiers programme ou exécutable
    • SUID = 4000 - le processus a les droits du propriétaire du programme exécuté
    • SGID = 2000 - le processus a les droits du groupe du programme exécuté
  • Pour les répertoires
    • SGID = 2000 - les fichiers qui se trouvent dans le répertoire appartiennent au groupe du répertoire


Les droits d'endossement sont très importants pour la sécurité.


Au lieu de donner l'accès à un fichier, on donne le droit d'accès à une commande.
Le kernel (ou noyau), au moment de l'exécution de la commande endosse l'identité du propriétaire ou du groupe de la commande au lieu de celle de l'utilisateur qui a lancé la commande.
Donc l'accès au fichier se fait par le biais de la commande et non pas directement.

Quand un utilisateur se connecte sur un système GNU/Linux, il détient 2 UID (UserIDentity) et 2 GID (GroupIDentity) : le réel et l'effectif.
  • Au moment de l'exécution d'une commande les UID et GID sont les réels,les effectifs sont attribués à la commande.
  • Quand les droits d'endossement ne sont pas positionnés, alors les UID et GID effectifs sont identiques aux UID et GID réels.
  • Si les droits d'endossement sont positionnés alors l'UID et/ou GID effectifs sont ceux de la commande. Ce qui veut dire que les UID et GID effectifs sont ceux qui contrôlent les droits d'accès à une commande



Pour connaître les fichiers avec les droits d'endossement de votre système tapez dans un terminal la commande suivante :
# find / -perm -2000 -o -perm -4000 -exec ls -l {} \; 2>/dev/null
Un bon exemple c'est la commande crontab. Cette commande crée un fichier dans /var/spool/cron/crontabs pour l'utilisateur qui a exécuté la commande crontab. L'accès au répertoire /var/spool/cront/crontabs est interdit aux utilisateurs sauf root.
$ cd /var/spool/cron/crontabs/
bash: cd: /var/spool/cron/crontabs/: Permission non accordée
Quand l'utilisateur lance la commande crontab -e (pour éditer son fichier /var/spool/cron/crontabs/nom_user), la commande s'exécute avec l'UID et GID réel de l'utilisateur mais avec l'UID et GID effectif de root.
$ ls -l /usr/bin/crontab
-rwxr-sr-x 1 root crontab 26872 2004-07-28 22:44 /usr/bin/crontab
On voit que la commande crontab est la propriété de root et qu'elle fait partie du groupe crontab avec le droit SGID.

Et comme root a le droit de créer dans /var/spool/cron/crontabs le fichier sera créé.
# ls -l /var/spool/cron/crontabs/lami20j
-rw------- 1 lami20j crontab 225 2006-07-22 16:00 /var/spool/cron/crontabs/lami20j
On voit que l'utilisateur lami20j est le propriétaire du fichier et qu'il a les droits de lecture et d'écriture. Cependant il ne peut pas le faire directement.

IV. Les commandes


1. chmod


La commande chmod (CHangeMODe) permet de définir et de changer les droits d'accès d'un fichier ou un ensemble de fichiers.
Parmi les options de la commande chmod (qui ne sont pas nombreuses - voir man chmod) je vais en citer seulement deux :
  • v pour verbose (affichage sur la sortie standard STDOUT du résultat de la commande)
  • R traiter les répertoires de façon récursive (application de la commande à l'arborescence entière du répertoire en question)


Il y a deux modes d'utilisation de la commande chmod :
  • de façon littérale
  • de façon numérique



La façon littérale

Si vous avez lu attentivement jusqu'ici, alors vous devriez deviner la façon littérale.
Il s'agit de l'utilisation des lettres qui vous sont déjà connues r, w et x pour spécifier les droits voulus.
La nouveauté c'est qu'on va utiliser aussi des lettres pour designer les identités dont nous avons parlé plus haut : le propriétaire, le groupe et les autres.

chmod utilise la notation suivante :
  • u - pour le propriétaire (user)
  • g - pour le groupe (group)
  • o - pour les autres (other)
  • a - pour tous (all)


Une autre notation sera utilisée pour attribuer et/ou retirer des droits.
  • + (plus) pour attribuer
  • - (moins) pour retirer
  • = (égale) pour fixer l'accès exact


Voilà un petit schéma de construction pour chmod
	Identité Opérateur Type accès
_____________________________________
	   u	    +	      r
chmod	   g	    -	      w
	   o 	    =	      x
	   a		
_____________________________________
Nous ne pouvons pas imaginer toutes les combinaisons possibles, même si ça vous semble réalisable vu le nombre peu important des opérateurs

et des droits. Ce qui complique les choses c'est plutôt le nombre d'utilisateurs, le nombre de fichiers et leur répartition sur le(s)

disque(s) et les partitions dont on ne connaît pas non plus le nombre, etc.

En revanche quelques règles vous aideront si jamais vous utilisiez la commande chmod.
  • plusieurs identités et types d'accès peuvent être utilisés.

Ex: chmod go-wx fichier pour les membres du groupe (g) et les autres (o) on retire (-) les droits d'écriture (r) et d'exécution (x).
  • plusieurs ensembles d'opérateurs et types d'accès peuvent être utilisés.
    • Ex : chmod o+r-w fichier on attribue le droit de lecture (r) mais on retire le droit d'écriture (w) pour les autres (o).
  • les chaînes peuvent être combinées en les séparant par des virgules.
    • Ex : chmod u+x,og-w fichier on attribue (+) le droit d'exécution (x) pour le propriétaire (u) et on retire (-) les droits d'écriture (r) pour les membres du groupe (g) et les autres (o). Attention! Il n'y a aucun espace entre les chaînes séparées par les virgules.
    • pour appliquer la commande chmod à un répertoire et son contenu (sous-répertoires, fichiers) on utilise la commande chmod -R droits Répertoire



Astuces :
  • lorsque l'identité est omise, c'est la valeur a (tous) qui sera utilisée
    • chmod -R +w repertoire
  • le type d'accès peut être omis si le signe égal (=) est utilisé pour supprimer tous les accès
    • chmod o= fichier


La façon numérique
   Propriétaire		      Groupe		      Autres
__________________________________________________________________
LectureEcritureExe	LectureEcritureExe	LectureEcritureExe
__________________________________________________________________
 400	200    100	  40	 20    10	   4	  2	1
Pour comprendre l'utilisation de chmod avec la façon numérique un exemple sera beaucoup plus parlant.

Exemple : nous voulons établir pour un fichier les droits suivants :

- propriétaire

lecture + ecriture + exécution = 400 + 200 +100 = 700

- groupe
lecture + exécution = 40 + 10 = 50
- les autres
lecture + exécution = 4 + 1 = 5
Au total ça donne 700 + 50 + 5 = 755

Maintenant nous allons utiliser le résultat obtenu avec chmod.
chmod -v 0755 fichier
ou
chmod 0755 fichier
mais dans ce cas le résultat de la commande n'est pas affiché sur la sortie standard

On peut écrire tout simplement chmod 755 fichier

Voici un petit assistant pour calculer les droits en octal

fr.selfhtml.org/petitsassistants/chmod.htm

En bref, le principe n'est pas compliqué. On établit les droits voulus pour chaque identité et on fait l'addition. Pour le reste chmod s'en charge.

Maintenant que nous avons vu la façon numérique d'utiliser la commande chmod, je suppose que vous avez peut être trouvé la réponse pour une question qui peut être vous a traversé l'esprit.

Il s'agit de l'attribution des droits d'endossement.
SUID	SGID	Sticky bit
__________________________
4000	2000	  1000
__________________________
Pour ajouter un droit d'endossement, outre les droits habituels, vous insérer dans le calcul le ou les droits d'endossement que vous auriez besoin.

Prenons le cas précédent 700 + 50 + 5 = 755.
Pour ajouter le droit d'endossement du group on écrit 2000 + 700 + 50 + 5 = 2755

Rappel! Il s'agit des droits pour une commande, ce qui veut dire que le droit d'exécution doit être positionné.

A ce que je sache il n'y a pas moyen de revenir aux droits précédents une fois la commande exécutée. Si vous en connaissez un, ce serait sympa de m'en faire part.

Une idée saugrenus serait d'enregistrer d'abord les droits existants dans un fichier avec ls -l ou ls -Rl et ensuite de créer un script pour parser ce fichier, mais ça compliquerait les choses et à vrai dire je n'ai jamais eu le besoin de le faire.

Une autre idée, tout aussi saugrenue, serait de sauvegarder avec tar pour ensuite, au cas où vous vous perdriez dans les droits, revenir à la configuration d'origine.

En conséquence avant de modifier les droits sur un fichier ou une arborescence jetez d'abord un coup d'oeil aux droits déjà existants.

2. umask


La commande umask permet de définir les droits par défaut d'un fichier ou répertoire à sa création. Autrement dit elle indique les droits qu'il faut retirer lors de leur création.

La commande umask, à l'instar de la commande chmod (façon numérique) prend en argument 3 chiffres, qui cette fois représentent les droits que nous ne voulons pas accorder.

$ umask 0022 fichier


A savoir que la durée de vie de la commande umask est limité à la session shell en cours.
Pour une durée permanente voir les fichiers de configuration de votre shell. Pour le shell bash on peut utiliser le fichier ~/.bashrc

Personnellement je n'ai utilisé la commande umask que pour de petits tests dans un unique but de compréhension de la commande chmod.

La compréhension des droits pour les fichiers dans un système GNU/Linux est fortement liée à la gestion des utilisateurs et groupes.

Outre les droits que nous avons vus plus haut, dans un système GNU/Linux on trouve aussi les ACLs (Access Control List) qui permettent d'accorder des droits supplémentaires, que nous détaillerons dans un autre thread. Le voici securite les access control lists acls
Télécharger GNU/Linux Télécharger GNU/Linux Choisir une distribution Où télécharger ? Liste de miroirs FTP en France Qu'est-ce que je vais télécharger ? Quel fichier choisir ? Quelle plate-forme/architecture choisir ? Quelle type d'image choisir ? Comment... www.commentcamarche.net/faq/sujet-8115-telecharger-gnu-linux
Novell privée de GNU/Linux ? Suite à l'accord Novell - Microsoft, la FSF (Free Software Foundation) n'est pas contente, vraiment pas. Honnêtement, on s'en doutait ;) Donc la FSF étudie la possibilité d'interdire à Novell la sortie d'une nouvelle distribution GNU/Linux.... www.commentcamarche.net/actualites/novell-privee-de-gnu-linux-2651821-actualite.php3
[Debian] Debian GNU/Linux 4.0 AMD64 - Installation Skype Debian GNU/Linux 4.0 AMD64 - Installation Skype 1. Téléchargement 2. Installation 3. Création de l'environnement 4. Observations 1. Téléchargement Cette étape peut être faite en tant que simple utilisateur.mkdir /home/lami20j/src cd... www.commentcamarche.net/faq/sujet-6146-debian-debian-gnu-linux-4-0-amd64-installation-skype
[Linux] Problèmes de sonLa gestion du son sous GNU/Linux est assez complexe et peut générer pas mal d'erreurs. Cet article n'a pas vocation d'expliquer dans le détail comment Linux gère le son, mais vous trouverez ici des solutions à certains problèmes courants. Le... www.commentcamarche.net/faq/sujet-1547-linux-problemes-de-son
Choisir une distribution LinuxChoisir sa distribution GNU/Linux est loin d'être évident ! Surtout quand on débute sur la banquise ;-) Ceci n'a pas la prétention de promouvoir une distribution au détriment des autres. C'est plutôt une liste de solutions classées par... www.commentcamarche.net/faq/sujet-3742-choisir-une-distribution-linux
Linux sur de petites configurationsGNU/Linux sur de petites configurations _ Captures d'écran Choix du bureau Choix de la distribution Distributions prêtes à l'emploi Blackbox FluxBox FVWM IceWM OpenBox Enlightenment Xfce Cas pratique de changement de bureau Cas... www.commentcamarche.net/faq/sujet-6207-linux-sur-de-petites-configurations
Multii-pingouins (Résolu)Bonjour, Ça fait maintenant plus d'un an que je suis passé à GNU/Linux. Départ Fedora, longue ligne droite Kubuntu, puis j'ai "profité" d'un crash disque dur pour tout réinstaller et essayer Debian (Lenny/Testing). Je rame assez bien,... www.commentcamarche.net/forum/affich-7776519-multii-pingouins
[internet] problème connexion sous Kubuntu (Résolu)Bonjour, j'essaie sans succès de me connecter à internet sous GNU/linux (distribution KUBUNTU) en passant par KPPP. Je vis en Belgique et mon fournisseur d'accès est Tiscali (scarlet). J'ai essayé de résoudre seul ce problème et voici... www.commentcamarche.net/forum/affich-1804788-internet-probleme-connexion-sous-kubuntu
Linux : récupérer docs sur partition formatée (Résolu)Bonjour à tous. Autant attaquer directement, je commence mon histoire : Etant sous GNU/Linux, avec la classique Ubuntu, j'ai choisi de formater une partition qui ne me servait plus. Je vous passe les détails. Je crois que j'ai utilisé un... www.commentcamarche.net/forum/affich-3777539-linux-recuperer-docs-sur-partition-formatee
Télécharger GambasGambas est un langage de programmation interprété orienté objet : - utilisant la syntaxe du BASIC, - disponible pour GNU/Linux et autres systèmes Unix ou assimilés. Il est accompagné d'un interpréteur et d'un IDE, lui-même écrit en Gambas. www.commentcamarche.net/telecharger/telecharger-34055468-gambas
Télécharger GNUcashGnuCash est un logiciel de finances personnelles gratuit (libre) disponible sur les systèmes GNU/Linux, BSD, Solaris, Mac OS X et Microsoft Windows (2000/XP/Vista). Conçu pour sa simplicité d'utilisation, sa puissance et sa flexibilité, GnuCash... www.commentcamarche.net/telecharger/telecharger-34055339-gnucash
Télécharger AudacityAudacity® est un logiciel libre et open-source destiné à l'édition et à l'enregistrement sonore. Il est disponible pour Mac OS X, Microsoft Windows, GNU/Linux et d'autres sytèmes d'exploitation. Il possède notamment les fonctionnalités suivantes... www.commentcamarche.net/telecharger/telecharger-113-audacity
Projet graphique XGLTout le monde (ou quasiment tout le monde) sait que le futur Windows Vista sera capable d'afficher en 3D. Finallement, le monde Windows n'a pas besoin de fanfaronner avec ce type de possibilité ! C'est possible également sous GNU/Linux ;-) Sous... www.commentcamarche.net/actualites/projet-graphique-xgl-2228073-actualite.php3
[Brève] L'Europe aura aussi droit aux PC Linux de Dell(Paris - Relaxnews) - Les PC livrés avec Linux par Dell ne seront plus réservés qu'aux seuls Américains. Le fabricant texan a annoncé qu'il vendra prochainement dans le reste du monde, et notamment en Europe, des machines embarquant le système... www.commentcamarche.net/actualites/breve-l-europe-aura-aussi-droit-aux-pc-linux-de-dell-3247998-actualite.php3
Linux - L'arborescence des fichiersLa hiérarchie des fichiers sous Linux Pour assurer la compatibilité et la portabilité, les systèmes Linux respectent l'unique norme FHS (File Hierarchy Standard). La hiérarchie de base est la suivante : /la racine, elle contient les... www.commentcamarche.net/contents/linux/linarb.php3
Linux - Compilation du noyau (Kernel)Compilation du Kernel Cet article a pour but de présenter la compilation du noyau (ou kernel) sous Linux. Les explications suivantes sont basées sur la version 2.4.20 du kernel, la dernière en date au moment de l'écriture de l'article (mars... www.commentcamarche.net/contents/linux/linkernel.php3