droits_et_permissions_sous_linux
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | droits_et_permissions_sous_linux [2018/11/17 12:53] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ======= | ||
+ | |||
+ | sources : Linuxpédia et [[http:// | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | |||
+ | UNIX, “papa” de linux, a été conçu dès le départ comme un système d' | ||
+ | |||
+ | De ce fait, les”droits d' | ||
+ | |||
+ | Quand on commence avec linux, il y a des connaissances de base indispensables à aquérir sans lesquelles de nombreuses actions d' | ||
+ | |||
+ | Mais même si on a les bases minimales, qu'on trouve un peu partout sur le web, il subsiste encore de nombreuses questions dont les réponses sont tout sauf évidentes. Par exemple: | ||
+ | |||
+ | * Peut-on affecter à quelqu' | ||
+ | |||
+ | * Le “groupe” du fichier est-il forcément l'un des groupes auquel appartient son “propriétaire”? | ||
+ | |||
+ | * Un utilisateur “normal” peut-il supprimer un fichier qui ne lui appartient pas, et sur lequel il n'a aucun droit (ni de lecture ni d' | ||
+ | |||
+ | * Un programme quelconque, lancé par un utilisateur, | ||
+ | |||
+ | * Dans quel cas puis-je renommer un fichier, alors que je n'ai pas le droit d' | ||
+ | |||
+ | * Puis-je copier n' | ||
+ | |||
+ | * La copie normale, quand elle est possible, transmet-elle tous les droits des fichiers? | ||
+ | |||
+ | * Pourquoi le droit “suid” ne marche-t-il pas avec des scripts shell? | ||
+ | |||
+ | * Peut-on outrepasser les droits linux avec les paramètres de montage? | ||
+ | |||
+ | * Etc… | ||
+ | |||
+ | Si vous répondez sans hésitation à toutes ces questions (et si vous répondez juste!), peut-être n' | ||
+ | |||
+ | En ce qui me concerne, après avoir comme tout le monde beaucoup galéré sur le sujet, j'ai essayé de faire le tuto que j' | ||
+ | |||
+ | |||
+ | ===== Principes Généraux des Droits sous Gnu-Linux ===== | ||
+ | |||
+ | Dans Linux tous est traduit sous forme de fichiers, de la configuration matérielle aux périphériques physiques. | ||
+ | Les Droits d' | ||
+ | |||
+ | | ||
+ | |||
+ | [[présentation générale droits et permissions|présentation généraliste sur les droits et permissions]] | ||
+ | |||
+ | **On distingue plusieurs types de fichiers:** | ||
+ | |||
+ | * les fichiers “normaux” (texte, exécutables, | ||
+ | * les répertoires (qui regroupe d' | ||
+ | * les liens symboliques (liens qui renvoient à d' | ||
+ | * les périphériques (qui transmettent des “caractères” comme le clavier ou des “blocs” de données comme un disque) | ||
+ | * les “sockets locales” (échanges d' | ||
+ | * les “tubes nommés”.(échanges d' | ||
+ | |||
+ | NB: il existe aussi des “liens en dur” qui, contrairement aux liens symboliques, | ||
+ | |||
+ | Les fichiers sont regroupés par répertoire, | ||
+ | |||
+ | NB: attention à ne pas confondre la racine de l' | ||
+ | |||
+ | Chacun de ces fichiers possède: | ||
+ | |||
+ | * des droits: | ||
+ | * de lecture, | ||
+ | * d' | ||
+ | * d' | ||
+ | * éventuellement des droits spéciaux (suid, sgid et stiky bit: voir plus loin) | ||
+ | |||
+ | * pour chacune des 3 catégories d' | ||
+ | * son propriétaire, | ||
+ | * son groupe d' | ||
+ | * et le reste du monde! | ||
+ | |||
+ | Chaque utilisateur intervenant dans un linux en fonctionnement pour des tâches d' | ||
+ | |||
+ | A noter qu'il existe aussi maintenant des droits étendues: les ACL, qui feront l' | ||
+ | |||
+ | ==== Les " | ||
+ | |||
+ | ** | ||
+ | Tous les utilisateurs qui interviennent dans un linux en fonctionnement sont identifiés par un compte qui comprend au minumum:** | ||
+ | |||
+ | * un nom (ex: “tyrtamos”) associé à un identificateur numérique unique, l'UID (ex: UID=1000). | ||
+ | |||
+ | * un mot de passe (ex: “eid47Rik98” mais non, ce n'est pas le mien! ;-) ) | ||
+ | |||
+ | * un groupe par défaut (ex: “users”) et d' | ||
+ | |||
+ | * en général un “répertoire utilisateur” (ex: / | ||
+ | |||
+ | ==== Les utilisateurs ==== | ||
+ | |||
+ | * les utilisateurs “normaux” (humains en général :-D ): ils ont leur “répertoire utilisateur” dans /home. Sur la suse, ils ont un UID supérieur ou égal à 1000 (le 1er utilisateur déclaré à l' | ||
+ | |||
+ | * les utilisateurs “système” qui jouent un rôle dans le fonctionnement et la sécurité du système. Vous pouvez voir les vôtres dans /etc/group. Sur la suse, leur UID est inférieur à 1000, ou supérieurs à 60000 comme “nobody” qui a un UID=65534 (ça dépend de la distribution). Parmi les utilisateurs système, le plus important s' | ||
+ | |||
+ | ==== Les groupes ==== | ||
+ | |||
+ | * les groupes d' | ||
+ | |||
+ | * les groupes d' | ||
+ | |||
+ | ==== UID et GID ==== | ||
+ | |||
+ | Les UID et GID dépendent de la distribution que vous avez, ainsi que de l' | ||
+ | |||
+ | A noter aussi: ce sont les UID et GID qui se trouvent physiquement dans les fichiers, et non les “noms” d' | ||
+ | |||
+ | ==== Conservation des droits ==== | ||
+ | |||
+ | Enfin, il faut se rappeler que seules les partitions formatées linux (ext3, reiserfs, …) sont capables de “contenir” les propriétaires, | ||
+ | |||
+ | ==== Les droits d' | ||
+ | |||
+ | A chaque fichier correspond des “droits d' | ||
+ | |||
+ | * “r”=le droit de lire (= examiner son contenu) | ||
+ | * “w”=le droit d' | ||
+ | * “x”=le droit d' | ||
+ | |||
+ | **On peut, pour un utilisateur donné, représenter ses droits:** | ||
+ | |||
+ | * soit par une chaine de 3 caractères “r”, “w”, “x” ainsi que ”-” pour les droits qu'il n'a pas (ex: “rw-”). | ||
+ | |||
+ | * soit par un chiffre octal (0 à 7) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Principes de Base ===== | ||
+ | |||
+ | La commande **'' | ||
+ | |||
+ | [[commande: | ||
+ | |||
+ | **Exemple d' | ||
+ | |||
+ | **drwxr-xr-x | ||
+ | **-rw-r--r-- | ||
+ | |||
+ | Voici un schéma général qui va vous permettre de mieux comprendre (NB :la ligne est en vert :-P): | ||
+ | |||
+ | {{droit.png? | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Détail du 1er caractère ===== | ||
+ | |||
+ | {{droit1.png? | ||
+ | |||
+ | Le premier caractère nous renseigne sur le type de documents dont il s'agit , les plus fréquent sont : | ||
+ | ^ Symboles | ||
+ | | ** d** | Il s'agit d'un répertoire contenant donc d' | ||
+ | | ** c** | pour un périphérique “caractère” (ex: un modem comme / | ||
+ | | ** b** | pour un périphérique “bloc” (ex: un disque comme /dev/hda ou / | ||
+ | | ** -** | Il s'agit d'un fichier ordinaire identifiable par son extension ici une image png tuxdetourer.png (ex: / | ||
+ | | **|** | ( pipe ) Il s'agit d'un lien vers un autre fichier | ||
+ | | **l ** | (lettre L) pour un lien symbolique (ex: / | ||
+ | | | ||
+ | | **p** | pour un tube nommé (ex: / | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Droits et permissions ===== | ||
+ | |||
+ | {{droit2b.png? | ||
+ | |||
+ | La série **rwx r-x r-x** designe les droits sur le fichier ou le répertoire c'est donc 3 séries de 3 lettres qui font référence dans l' | ||
+ | |||
+ | Les lettres r w x sont toujours dans le même ordre et désignent les droits de la façon suivantes : | ||
+ | |||
+ | ^ lettres ^ significations | ||
+ | | r | r pour read soit le droit de lire le fichier ou répertoire | ||
+ | | w | w pour write soit le droit d' | ||
+ | | x | x pour execute soit le droit de lancer ou d' | ||
+ | | - | - Le trait signifie l' | ||
+ | |||
+ | si on prend donc l' | ||
+ | |||
+ | {{droit2b.png? | ||
+ | |||
+ | Nous avons donc: | ||
+ | |||
+ | * En rouge : | ||
+ | |||
+ | * En vert :le Groupe **users** qui **peut lire**; __**ne peut pas écrire (-)**__ ; **peut éxecuter** | ||
+ | |||
+ | * En bleu : Les **autres utilisateurs** qui **peuvent lire** ; __**ne peuvent pas écrire**__ ; **peuvent éxecuter** soit la 3ième séries **r-x**\\ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Les autres informations ===== | ||
+ | |||
+ | {{droit3.png? | ||
+ | |||
+ | Le chiffre en rouge indique le nombre de liens pour accéder a la racine / , ce chiffre est normalement toujours 1 sauf ici ou on a 2 , la raison en est très simple ce fichier se trouve sur un autre disque dur que celui contenant la racine / | ||
+ | |||
+ | {{droit4.png? | ||
+ | |||
+ | Cette information nous donne simplement la date et l' | ||
+ | |||
+ | {{droit5.png? | ||
+ | |||
+ | Bon la vous avez compris qu'il s'agit du nom du répertoire | ||
+ | |||
+ | ===== Les droits particuliers: | ||
+ | |||
+ | Au droits “de base” précédents s' | ||
+ | |||
+ | * le “suid” (ou “setuid”) qui concerne les programmes: | ||
+ | * un programme lancé avec ce droit “suid” sera exécuté avec les droits du propriétaire du programme et non les droits de l' | ||
+ | * le “sgid” (ou “setgid”) qui concerne les programmes et les répertoires: | ||
+ | * un programme lancé avec ce droit “sgid” sera exécuté avec les droits du groupe du programme et non les droits du groupe de l' | ||
+ | * un fichier créé dans un répertoire ayant le droit sgid aura pour groupe le groupe du répertoire et pas celui de l' | ||
+ | |||
+ | * le “stiky bit” qui concerne surtout les répertoires: | ||
+ | * dans un répertoire avec ce droit “stiky bit”, seuls les propriétaires des fichiers pourront les effacer (ex: /tmp ou /var/tmp). | ||
+ | * appliqué à un fichier, il est demandé au noyau de le conserver le plus possible en mémoire (ram ou swap). A ma connaissance, | ||
+ | |||
+ | Les droits “suid” et “sgid” sont aussi appelés “droits d' | ||
+ | |||
+ | Dans la présentation des droits en texte, ces droits particuliers seront représentés comme suit: | ||
+ | |||
+ | * pour le suid: un “s” à la place du “x” du propriétaire comme dans “rwsr-xr-x”. | ||
+ | * pour le sgid: un “s” à la place du “x” du groupe comme dans “rwxr-sr-x”. | ||
+ | * pour le stiky bit: un “t” à la place du dernier “x” (celui du “reste du monde”) comme dans “drwxrwxrwt”. | ||
+ | |||
+ | NB: s'il n'y avait pas de droit d' | ||
+ | |||
+ | Dans la présentation en nombre octal, ces droits correspondent à un 4ème chiffre octal situé à gauche, avec: | ||
+ | |||
+ | * suid=4, | ||
+ | * sgid=2 | ||
+ | * et stiky bit=1 | ||
+ | |||
+ | Ce qui donnera, par exemple sur la base d'un “755”=“rwxr-xr-x”: | ||
+ | |||
+ | * “4755” pour “rwsr-xr-x” avec un suid | ||
+ | * “2755” pour “rwxr-sr-x” avec un sgid | ||
+ | * “6755” pour “rwsr-sr-x” avec un suid + un guid” | ||
+ | * “1755” pour “rwxr-xr-t” avec un stiky bit | ||
+ | |||
+ | Bien que ce ne soit pas techniquement impossible, il est assez rare que l'on ait plusieurs de ces droits particuliers en même temps. On peut cependant utiliser facilement “suid” et “sgid” sur le même fichier exécutable | ||
+ | |||
+ | ===== Qu' | ||
+ | |||
+ | ==== Droit de lister le contenu d'un répertoire ==== | ||
+ | |||
+ | Pour lister le contenu d'un répertoire, | ||
+ | |||
+ | * le droit d' | ||
+ | * et le droit de lecture (" | ||
+ | |||
+ | Au titre de la 1ère condition, il suffit qu'il manque le droit d' | ||
+ | |||
+ | A noter que si vous avez le droit de lister le contenu du répertoire, | ||
+ | |||
+ | A noter aussi que dans les navigateurs " | ||
+ | |||
+ | **Cas particulier rare:** | ||
+ | |||
+ | On a le droit de lecture sur le répertoire, | ||
+ | |||
+ | * => Le listage est alors possible en console, mais avec message d' | ||
+ | |||
+ | => Par la suite, on ne tiendra pas compte de ce cas particulier rare qui ne peut que compliquer inutilement les explications. | ||
+ | |||
+ | ==== Droit d' | ||
+ | |||
+ | Dans le cas général, le droit d' | ||
+ | |||
+ | Cependant, si le droit de lecture sur le répertoire est absent, le listage est impossible, mais on peut tout de même accéder au fichier en citant son nom exact et son chemin (et les jokers dans les noms de fichiers ne marchent plus). | ||
+ | |||
+ | ==== Droit d' | ||
+ | |||
+ | Pour avoir le droit d' | ||
+ | |||
+ | * pouvoir accéder au fichier | ||
+ | * et avoir le droit de lecture sur ce fichier (" | ||
+ | |||
+ | ==== Droit de modifier le contenu d'un fichier ==== | ||
+ | |||
+ | Pour avoir le droit de modifier le contenu d'un fichier existant. | ||
+ | |||
+ | * pouvoir accéder au fichier, | ||
+ | * et avoir le droit d' | ||
+ | |||
+ | En console, si vous avez le droit d' | ||
+ | |||
+ | ==== Droit de lancer un fichier exécutable ==== | ||
+ | |||
+ | Pour avoir le droit de lancer l' | ||
+ | |||
+ | * pouvoir accéder au fichier | ||
+ | * et avoir le droit d' | ||
+ | |||
+ | ==== Droit de créer, de renommer ou d' | ||
+ | |||
+ | Pour pouvoir créer, renommer ou effacer un fichier, situé dans un répertoire, | ||
+ | |||
+ | * pouvoir accéder au contenu de ce répertoire (=droit de listage) | ||
+ | * et avoir le droit d' | ||
+ | |||
+ | //Ça ne dépend donc pas des droits qu'on a sur le fichier lui-même!!!// | ||
+ | |||
+ | C'est facile à comprendre: il s'agit du droit de modifier le contenu d'un répertoire et pas le contenu d'un fichier! Mais cela donne souvent des situations inattendues. Par exemple: | ||
+ | |||
+ | * Dans un répertoire qui vous appartient (votre home par exemple), rien ne vous empêche de renommer ou même d' | ||
+ | |||
+ | * Dans le répertoire d'un autre utilisateur auquel vous avez accès mais sans droit d' | ||
+ | |||
+ | Dans les sites web, gérés à distance par ftp, cela donne aussi certains effets apparemment bizarres: | ||
+ | |||
+ | * les fichiers et répertoires téléchargés par ftp appartiennent à l' | ||
+ | |||
+ | * mais les fichiers créés par un script php appartiennent à l' | ||
+ | * pour permettre à ce script php de créer des fichiers et des répertoires dans un répertoire " | ||
+ | * lorsque ce script php crée un répertoire et des fichiers dans ce répertoire, | ||
+ | |||
+ | ===== Affectation des droits à la création des fichiers ===== | ||
+ | |||
+ | Lorsqu' | ||
+ | |||
+ | * ce fichier ou ce répertoire lui est attribué avec son groupe par défaut | ||
+ | |||
+ | * avec les droits par défaut définis par la commande shell " | ||
+ | |||
+ | Attention: umask définit les droits qu'on a pas! C'est donc le complément à 7 des droits qu'on a vu plus haut. En général, la valeur par défaut à l' | ||
+ | |||
+ | ==== Connaitre la valeur de umask ==== | ||
+ | |||
+ | Pour connaître la valeur de l' | ||
+ | |||
+ | $ umask | ||
+ | |||
+ | Résultat: | ||
+ | |||
+ | $ 0022 | ||
+ | |||
+ | Ce qui correspond à un droit de 755 ou " | ||
+ | |||
+ | $ umask -S | ||
+ | |||
+ | le résultat sera: | ||
+ | |||
+ | $ u=rwx, | ||
+ | |||
+ | ==== Modifier la valeur de umask ==== | ||
+ | |||
+ | Vous ne devriez pas pouvoir trouver beaucoup de bonnes raisons de changer cette valeur de umask, mais si vous savez ce que vous faites (et que vous aimez vivre dangeureusement), | ||
+ | |||
+ | $ umask nouvellevaleur | ||
+ | |||
+ | Si " | ||
+ | |||
+ | Ce n'est vraiment pas bien expliqué dans les différentes distributions, | ||
+ | |||
+ | ===== Droits de copier ou de déplacer des fichiers ===== | ||
+ | |||
+ | ==== Droit de copier ==== | ||
+ | |||
+ | Dans une copie, il y a un fichier d' | ||
+ | |||
+ | Pour que la copie soit possible, il faut: | ||
+ | |||
+ | * pour la source: | ||
+ | * que le fichier d' | ||
+ | * et qu'on ait le droit de lecture sur ce fichier. | ||
+ | |||
+ | * pour la destination: | ||
+ | * il faut que le répertoire de destination soit accessible | ||
+ | * et en plus: | ||
+ | * si le fichier de destination n' | ||
+ | * si le fichier de destination existe, il faut avoir le droit d' | ||
+ | |||
+ | ==== Droit de déplacer ==== | ||
+ | |||
+ | Selon les cas, la commande de déplacement en console (=" | ||
+ | |||
+ | Dans les 2 cas, il faut donc avoir, en plus du droit de copie, le droit de renommer ou de supprimer le fichier d' | ||
+ | |||
+ | ===== Transmission des droits par la copie ou le déplacement des fichiers ===== | ||
+ | |||
+ | **// | ||
+ | |||
+ | Regardons comment ça marche avec les différents programmes de copie et de déplacement. | ||
+ | |||
+ | Attention: je ne traite ici que des fichiers courants | ||
+ | |||
+ | * fichiers | ||
+ | * répertoires | ||
+ | * liens symboliques | ||
+ | |||
+ | ainsi que des liens en dur, mais pas des fichiers spéciaux de périphériques (/dev/...) ni des sockets locales ni des tubes nommés. | ||
+ | |||
+ | Et je ne parle que des copies courantes et des déplacements courants: voir la page man de " | ||
+ | |||
+ | |||
+ | |||
+ | ==== Copie et déplacement avec la console ==== | ||
+ | |||
+ | **__1er cas: copie normale par un utilisateur normal__** | ||
+ | |||
+ | Vous êtes un utilisateur normal et vous voulez copier, par exemple, le fichier / | ||
+ | |||
+ | $ cp / | ||
+ | |||
+ | Quand vous lancez cette commande de copie en tant qu' | ||
+ | |||
+ | En résumé, cette copie: | ||
+ | |||
+ | * affecte la copie à l' | ||
+ | * met la date et l' | ||
+ | * et transmet tous les droits (r, w et x, ...), y compris le stiky bit, mais pas les suid et guid. | ||
+ | * les liens symboliques sont recopiés en tant que liens symboliques, | ||
+ | * Les liens en dur sont recopiés comme des fichiers normaux avec le contenu des fichiers pointés. Ils sont affectés à l' | ||
+ | |||
+ | NB: dans l' | ||
+ | |||
+ | Quand c'est " | ||
+ | |||
+ | **__2ème cas: copie " | ||
+ | |||
+ | Vous êtes toujours un utilisateur normal et vous voulez copier, par exemple, fichier / | ||
+ | |||
+ | $ cp -a / | ||
+ | |||
+ | En résumé, cette copie: | ||
+ | |||
+ | * affecte la copie à l' | ||
+ | * transmet la date et l' | ||
+ | * et transmet tous les droits (r, w et x, ...), y compris les suid, guid et stiky bit. | ||
+ | * les liens symboliques sont recopiés en tant que liens symboliques, | ||
+ | * pour les liens en dur | ||
+ | * si les fichiers pointés font partie de la copie, les liens en dur sont recopiés en tant que liens en dur et pointent désormais sur les fichiers recopiés, | ||
+ | * dans le cas contraire, les liens "en dur" sont recopiés en tant que fichiers normaux avec le contenu, les droits et l' | ||
+ | |||
+ | NB: dans l' | ||
+ | |||
+ | **__3ème cas: copie d' | ||
+ | |||
+ | C'est seulement quand c'est root qui lance la copie avec "cp -a" que ça devient intéressant, | ||
+ | |||
+ | # cp -a / | ||
+ | |||
+ | En résumé, cette copie: | ||
+ | |||
+ | * conserve les propriétaire: | ||
+ | * transmet la date et l' | ||
+ | * et transmet tous les droits des fichiers d' | ||
+ | * les liens symboliques sont recopiés en tant que liens symboliques, | ||
+ | * pour les liens en dur | ||
+ | * si les fichiers pointés font partie de la copie, les liens en dur sont recopiés en tant que liens en dur et pointent désormais sur les fichiers recopiés, | ||
+ | * dans le cas contraire, les liens "en dur" sont recopiés en tant que fichiers normaux, avec le contenu, les propriétaire: | ||
+ | |||
+ | => Ce n'est donc pas par hasard si le " | ||
+ | |||
+ | ==== Copie et déplacement avec konqueror sous KDE ==== | ||
+ | |||
+ | La copie, faite par konqueror lancé par un utilisateur normal: | ||
+ | |||
+ | * affecte la copie à l' | ||
+ | * respecte la date et l' | ||
+ | * transmet tous les droits (r, w, x,...), y compris les suid et guid, mais pas le sticky bit! (bizarre, bizare..). | ||
+ | |||
+ | Vous noterez que la copie par konqueror ne se comporte pas de la même façon que la console! | ||
+ | |||
+ | Les résultats sont les mêmes pour tous les modes de copie de konqueror: copie-vers, copier-coller, | ||
+ | |||
+ | La même copie faite par root donne le même résultat, à part, bien sûr que tous les fichiers er répertoires copiés deviennent " | ||
+ | |||
+ | Je n'ai pas trouvé comment simuler le "cp -a" avec konqueror sous root, et c'est bien dommage: cela veut dire que même sous root, konqueror ne transmet jamais dans la copie le propriétaire: | ||
+ | |||
+ | ==== Copie et déplacement avec nautilus sous gnome ==== | ||
+ | |||
+ | La copie, faite par nautilus lancé par un utilisateur normal: | ||
+ | |||
+ | * affecte la copie à l' | ||
+ | * respecte la date et l' | ||
+ | * transmet tous les droits (r, w, x), y compris les suid, guid et sticky bit!. | ||
+ | |||
+ | Je m' | ||
+ | |||
+ | Bravo, ça c'est bien! | ||
+ | |||
+ | ===== MODIFIER LES DROITS ET PERMISSIONS ===== | ||
+ | |||
+ | ==== Modification du propriétaire ou du groupe d'un fichier ==== | ||
+ | |||
+ | **Seul le superutilisateur " | ||
+ | |||
+ | * Cela veut dire que même le propriétaire d'un fichier ne peut l' | ||
+ | |||
+ | * Cela veut dire aussi qu'un utilisateur ne peut s' | ||
+ | |||
+ | **Seul le propriétaire d'un fichier peut changer le groupe de ce fichier**, et seulement pour un autre groupe dans lequel il est déjà inscrit. | ||
+ | |||
+ | * Cas particulier: | ||
+ | |||
+ | * Par contre, root peut affecter le fichier à un groupe dans lequel le propriétaire n'est pas membre! | ||
+ | |||
+ | ==== Modification des droits de lecture, d' | ||
+ | |||
+ | Seul le propriétaire d'un fichier peut modifier les droits r, w et x. | ||
+ | |||
+ | * donc: un membre du groupe d' | ||
+ | |||
+ | ==== Modification des droits spéciaux: suid, sgid et stiky bit ==== | ||
+ | |||
+ | Seul le propriétaire d'un fichier ou d'un répertoire peut modifier les droits suid, sgid et sticky bit. | ||
+ | |||
+ | ===== Comment modifier les droits ===== | ||
+ | |||
+ | |||
+ | ==== Modifier le propriétaire et le groupe ==== | ||
+ | |||
+ | === Avec la console === | ||
+ | |||
+ | Pour changer le propriétaire et/ou le groupe, on utilise " | ||
+ | |||
+ | Par exemple: | ||
+ | |||
+ | * Pour affecter le fichier toto à l' | ||
+ | |||
+ | # chown albert toto | ||
+ | |||
+ | * pour ne changer que le groupe de toto par le groupe users: | ||
+ | |||
+ | # chown :users toto | ||
+ | |||
+ | ou | ||
+ | |||
+ | # chgrp users toto | ||
+ | |||
+ | * Pour changer les 2 à la fois: | ||
+ | |||
+ | # chown albert: | ||
+ | |||
+ | Et appliqué à un répertoire, | ||
+ | |||
+ | |||
+ | === Avec konqueror sous KDE === | ||
+ | |||
+ | * on peut facilement changer les propriétaires et groupes (si on a le droit de le faire) avec: clic droit -> propriétés -> droits d' | ||
+ | |||
+ | * et avec konqueror sous root: on peut changer ce qu'on veut | ||
+ | |||
+ | |||
+ | === Avec nautilus sous gnome === | ||
+ | |||
+ | * idem avec nautilus: clic droit -> propriétés -> permissions | ||
+ | |||
+ | * et avec nautilus sous root: on peut changer ce qu'on veut | ||
+ | |||
+ | ==== Modifier les droits de lecture, d' | ||
+ | |||
+ | **__Avec la console__** | ||
+ | |||
+ | On utilise " | ||
+ | |||
+ | Notation alphabétique: | ||
+ | |||
+ | chmod [ugo] [+-=] [rwx] | ||
+ | |||
+ | * [ugo]: " | ||
+ | |||
+ | * [+-=]: " | ||
+ | |||
+ | * [rwx]: avec " | ||
+ | |||
+ | Exemples: | ||
+ | |||
+ | On ajoute le droit d' | ||
+ | |||
+ | chmod g+w toto | ||
+ | |||
+ | On annule les droits de lecture, d' | ||
+ | |||
+ | chmod o= toto | ||
+ | |||
+ | On rend exécutable pour tous le fichier toto: | ||
+ | |||
+ | chmod a+x toto | ||
+ | |||
+ | Notation numérique: | ||
+ | |||
+ | On utilise l' | ||
+ | |||
+ | Exemples: | ||
+ | |||
+ | On veut des droits 644 soit " | ||
+ | |||
+ | chmod 644 toto | ||
+ | |||
+ | On veut des droits 755 avec un bit setuid en plus: | ||
+ | |||
+ | chmod 4755 toto | ||
+ | |||
+ | **__Avec konqueror et, pour root: konqueror en mode superutilisateur, | ||
+ | |||
+ | * on peut facilement changer les droits (si on a le droit de le faire!) avec: clic droit -> propriétés -> droits d' | ||
+ | |||
+ | **__Avec nautilus__** | ||
+ | |||
+ | * | ||
+ | |||
+ | |||
+ | ===== Droits des programmes qui s' | ||
+ | |||
+ | Avec quel droits s' | ||
+ | |||
+ | ==== Cas général des programmes et des commandes shell (hors droits " | ||
+ | |||
+ | A part le " | ||
+ | |||
+ | Chaque programme s' | ||
+ | |||
+ | Un programme normal bien écrit ne doit pas pouvoir travailler avec un niveau de privilège supérieur à celui pour le compte de qui il s' | ||
+ | |||
+ | Exemple, Sous votre login, en ouvrant un éditeur de texte, kate sous KDE ou gedit sous gnome, celui-ci s' | ||
+ | |||
+ | Exemple: la commande shell "/ | ||
+ | |||
+ | * Sous votre login et dans un répertoire à vous, avec un simple "touch toto" vous allez créer un nouveau fichier " | ||
+ | |||
+ | * Si vous lancez maintenant ce même programme "sous root" avec "sudo touch toto", le nouveau fichier " | ||
+ | |||
+ | Lorsqu' | ||
+ | |||
+ | Exemple: Pour apache, une 1ère partie est lancée sous root, mais celle-ci passe la main rapidement à d' | ||
+ | |||
+ | ==== Cas des droits " | ||
+ | |||
+ | Dans ce cadre, que donne le droit " | ||
+ | |||
+ | Exemple d'un programme " | ||
+ | |||
+ | Exemple d'une commande shell: en ajoutant (provisoirement) ce droit " | ||
+ | |||
+ | Ce qui fait que ces droits " | ||
+ | |||
+ | Dans les programmes " | ||
+ | |||
+ | ==== Cas des scripts shell ==== | ||
+ | |||
+ | Essayons maintenant de faire un script shell: on crée "sous root" un fichier texte qu'on appelle " | ||
+ | |||
+ | < | ||
+ | #!/bin/sh | ||
+ | touch toto | ||
+ | </ | ||
+ | |||
+ | On le sauvegarde dans /usr/bin par exemple, et on rend le fichier exécutable. Ce script appartient donc à root:root avec " | ||
+ | |||
+ | Dans une console sous votre login (" | ||
+ | |||
+ | Mettez maintenant le droit suid à / | ||
+ | |||
+ | Pour plus d' | ||
+ | |||
+ | Solutions de contournement: | ||
+ | |||
+ | - faire "sudo creafic": | ||
+ | |||
+ | - donner l' | ||
+ | |||
+ | - traduire le script shell en programme C qui s' | ||