Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:systeme:chmod [26/10/2013 13:08] MicP [TP 1] |
doc:systeme:chmod [12/11/2016 17:29] bendia [TP 2] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
* Objet : chmod | * Objet : chmod | ||
- | * Niveau requis : {{tag>débutant}} | + | * Niveau requis : {{tag>débutant avisé}} |
* Commentaires : //Modifier les permissions des fichiers. // | * Commentaires : //Modifier les permissions des fichiers. // | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
* Suivi : | * Suivi : | ||
- | * Création par MaTTuX_ <date> //Pffff... On n'était même pas né alors !// | + | * Création par [[user>MaTTuX_]] le //Pffff... On n'était même pas né alors !// |
- | * Testé par smolski le 26-10-2013 | + | * Testé par [[user>smolski]] le 26-10-2013 |
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=999 | Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=999 | Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | === Nota === | ||
- | |||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Intro ===== | ===== Intro ===== | ||
- | La commande chmod permet de modifier les permissions des fichiers. \\ | + | La commande ''chmod'' permet de modifier les permissions aux différents types d'accès (rwx) des fichiers (et répertoire) indépendamment pour le propriétaire, le groupe ou les autres utilisateurs. \\ |
Je vais vous expliquer deux manières de les modifier, chacun sa méthode, moi j'ai commencé par la première méthode, puis maintenant je le fais avec les deux sans problème. | Je vais vous expliquer deux manières de les modifier, chacun sa méthode, moi j'ai commencé par la première méthode, puis maintenant je le fais avec les deux sans problème. | ||
Ligne 28: | Ligne 25: | ||
Dans cette méthode je vais vous montrer comment modifier par les lettres U G O et R W X pour un rappel aller voir le wiki **[[:doc:systeme:droits-unix|A savoir]]** . \\ | Dans cette méthode je vais vous montrer comment modifier par les lettres U G O et R W X pour un rappel aller voir le wiki **[[:doc:systeme:droits-unix|A savoir]]** . \\ | ||
- | Bon passons aux choses sérieuses, je veux rendre un fichier exécutable, pour cela je vérifie les droits grâce a la commande ls -l((voir : [[:doc:systeme:ls| commande de listage ls]])) sur le fichier php dans mon répertoire. | + | Bon passons aux choses sérieuses, je veux rendre un fichier exécutable, pour cela je vérifie les droits grâce a la commande **[[:doc:systeme:ls | ls -l]]** sur le fichier php dans mon répertoire. |
<code user>ls -l php</code> | <code user>ls -l php</code> | ||
- | <code bash>-rw-r--r-- 1 mattux users 92 avr 20 23:26 php</code> | + | <file config retour de la commande>-rw-r--r-- 1 mattux users 92 avr 20 23:26 php</file> |
Pour le rendre exécutable avec une petite vérification en même temps je ferai : | Pour le rendre exécutable avec une petite vérification en même temps je ferai : | ||
Ligne 37: | Ligne 34: | ||
<code user>chmod u+x php</code> | <code user>chmod u+x php</code> | ||
<code user>ls -l php</code> | <code user>ls -l php</code> | ||
- | <code bash>-rwxr--r-- 1 mattux users 92 avr 20 23:26 php</code> | + | <file config retour de la commande>-rwxr--r-- 1 mattux users 92 avr 20 23:26 php</file> |
- | Voila je l'ai rendu exécutable juste pour l'user, maintenant vous pouvez le passer en droit d'écriture pour tous: | + | Voila je l'ai rendu exécutable juste pour l'user, maintenant vous pouvez permettre au groupe et aux autres d'avoir le droit d'écriture : |
<code user>chmod go+w php</code> | <code user>chmod go+w php</code> | ||
<code user>ls -l php</code> | <code user>ls -l php</code> | ||
- | <code bash>-rwxrw-rw- 1 mattux users 92 avr 20 23:26 php</code> | + | <file config retour de la commande>-rwxrw-rw- 1 mattux users 92 avr 20 23:26 php</file> |
- | Voilà je n'ai pas mis U pour l'user car il a déjà le droit d'écriture. | + | Voilà je n'ai pas mis U pour l'user car il avait déjà le droit d'écriture. |
Dernier test pour cette méthode : \\ | Dernier test pour cette méthode : \\ | ||
Ligne 54: | Ligne 51: | ||
<code user>chmod -wx php</code> | <code user>chmod -wx php</code> | ||
<code user>ls -l php</code> | <code user>ls -l php</code> | ||
- | <code bash>-r--r--r-- 1 mattux users 92 avr 20 23:26 php</code> | + | <file config retour de la commande>-r--r--r-- 1 mattux users 92 avr 20 23:26 php</file> |
===== Option t ===== | ===== Option t ===== | ||
Ligne 96: | Ligne 93: | ||
Une autre manière de représenter ces droits est sous **forme binaire** grâce à une **clef numérique** fondée sur la correspondance entre : | Une autre manière de représenter ces droits est sous **forme binaire** grâce à une **clef numérique** fondée sur la correspondance entre : | ||
- | une expression **binaire** = un nombre **décimal** = une notation | + | une expression **binaire** = un nombre **octal** = une notation |
+ | |||
Soit : | Soit : | ||
- | * 000 = 0 = - - - | + | * 000 = 0 = -%%-%%- |
- | * 001 = 1 = - - x (exécution) | + | * 001 = 1 = -%%-%%x (exécution) |
- | * 010 = 2 = - w - (écriture) | + | * 010 = 2 = -w- (écriture) |
- | * 011 = 3 = - w x | + | * 011 = 3 = -wx |
- | * 100 = 4 = r - - (lecture) | + | * 100 = 4 = r-%%-%%(lecture) |
- | * 101 = 5 = r - x | + | * 101 = 5 = r-x |
- | * 110 = 6 = r w - | + | * 110 = 6 = rw- |
- | * 111 = 7 = r w x | + | * 111 = 7 = rwx |
Il suffit donc de déclarer un chiffre et un seul entre 0 et 7 correspondant à toute la séquence en notation (r w x) et de l'attribuer à chacune des catégories d'utilisateur user, group, others (u, g, o). | Il suffit donc de déclarer un chiffre et un seul entre 0 et 7 correspondant à toute la séquence en notation (r w x) et de l'attribuer à chacune des catégories d'utilisateur user, group, others (u, g, o). | ||
Exemples : | Exemples : | ||
- | * 777 = r w x r w x r w x = u g o peuvent tous lire + écrire + exécuter. | + | * 777 = rwxrwxrwx = u g o peuvent tous lire + écrire + exécuter. |
- | * 605 = r w - - - - r - x = u peut lire + écrire g rien faire et o lire + exécuter. | + | * 605 = rw-%%--%%-r-x = u peut lire + écrire g rien faire et o lire + exécuter. |
- | * 644 = r w - r - - r - - = u peut lire + écrire g lire et o lire. | + | * 644 = rw-r-%%-%%r-%%-%%= u peut lire + écrire g lire et o lire. |
- | * 666 = r w - r w - r w - = u g o peuvent tous lire + écrire. Aucun ne peut exécuter. | + | * 666 = rw-rw-rw- = u g o peuvent tous lire + écrire. Aucun ne peut exécuter. |
Une astuce permet d'associer rapidement une valeur décimale à la séquence de droits souhaitée. Il suffit d'attribuer les valeurs suivantes pour chaque type de droit. | Une astuce permet d'associer rapidement une valeur décimale à la séquence de droits souhaitée. Il suffit d'attribuer les valeurs suivantes pour chaque type de droit. | ||
Ligne 128: | Ligne 127: | ||
* rwx = 7 (4+2+1), | * rwx = 7 (4+2+1), | ||
* r-x = 5 (4+1) et | * r-x = 5 (4+1) et | ||
- | * r-- = 4. | + | * r-%%-%% = 4. |
Donne en séquences de droits complètes : | Donne en séquences de droits complètes : | ||
- | * (rwxr-xr--) = 754. | + | * (rwxr-xr-%%-%%) = 754. |
+ | |||
+ | <note>**Pour briller en société, comment convertir un nombre binaire en nombre octal :** | ||
+ | |||
+ | Il s'agit donc de passer de la base **2** (où chaque chiffre peut prendre 2 valeurs, //0// ou //1//), à la base **8** (où chaque chiffre peut prendre 8 valeurs, de //0// à //7//). | ||
+ | |||
+ | Mais pour commencer, on va commencer par une autre base, la base **10** (où chaque chiffre peut prendre, je vous le donne en mille, 10 valeurs, de //0// à //9// :-p ). Vous savez tous décomposer un nombre en base **10**. Par exemple **103**. | ||
+ | |||
+ | Le premier chiffre à droite, //3// à le rang **0**, celui juste à sa gauche, //0// le rang **1**, le suivant vers la gauche, //3//, à le rang **2**, et ansi de suite. | ||
+ | |||
+ | 103 = 1 x 100 + 0 x 10 + 3 x 1 \\ | ||
+ | On peut aussi l'écrire comme ça, si on se rappelle que \\ //n'importe quoi//<sup>1</sup> = //n'importe quoi// \\ | ||
+ | et que \\ | ||
+ | //n'importe quoi//<sup>0</sup> = 1 : \\ | ||
+ | 103 = 1 x 10<sup>2</sup> + 0 x 10<sup>1</sup> + 3 x 10<sup>0</sup> | ||
+ | |||
+ | On remarque que la décompostion consiste à multiplier la valeur du chiffre du rang par la base élevée à la puissance du rang, et d'additionner toutes ces mutiplications :-) | ||
+ | |||
+ | On va faire exactement pareil pour décomposer un nombre en base **2**. Si on dit que //n// est le rang, on multiplie la valeur du chiffre du rang par 2<sup>n</sup>, et on additionne le résultat de toute ces multiplications. | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | 010 = 0 x 2<sup>2</sup> + 1 x 2<sup>1</sup> + 0 x 2<sup>0</sup> = 0 x 4 + 1 x 2 + 0 x 1 = 2 \\ | ||
+ | 101 = 1 x 2<sup>2</sup> + 0 x 2<sup>1</sup> + 1 x 2<sup>0</sup> = 1 x 4 + 0 x 2 + 1 x 1 = 5 | ||
+ | |||
+ | //Oui, mais tu as dis qu'on allait apprendre à convertir en octal, pas en décimal :-?// | ||
+ | |||
+ | Et bien, puisqu'on converti un nombre binaire composé d'uniquement 3 chiffres, ça ne change rien. | ||
+ | |||
+ | //Pourquoi ? // | ||
+ | |||
+ | Quel est le plus grand nombre binaire à 3 chiffres possible ? **111** | ||
+ | |||
+ | 111 = 1 x 2<sup>2</sup> + 1 x 2<sup>1</sup> + 1 x 2<sup>0</sup> = 1 x 4 + 1 x 2 + 1 x 1 = **7** | ||
+ | |||
+ | Et **7**, en octal ou en décimal, ça vaut toujours **7** ;-) | ||
+ | </note> | ||
C'est une manière directe (et moins verbeuse, ATTENTION aux erreurs !) d'attribuer les droits et de les écrire sous cette forme en utilisant le code à 3 chiffres résultant. | C'est une manière directe (et moins verbeuse, ATTENTION aux erreurs !) d'attribuer les droits et de les écrire sous cette forme en utilisant le code à 3 chiffres résultant. | ||
Ligne 149: | Ligne 184: | ||
<code user>ls -al /chemin/du/repertoire/</code> | <code user>ls -al /chemin/du/repertoire/</code> | ||
- | que nous avons bien obtenu ce que nous voulions modifier, répertoire par répertoire... C'est beaucoup, beaucoup de temps d'gagné ! LOL | + | que nous avons bien obtenu ce que nous voulions modifier... C'est beaucoup, beaucoup de temps d'gagné ! LOL |
===== Droits spéciaux - SUID ===== | ===== Droits spéciaux - SUID ===== | ||
Ligne 157: | Ligne 192: | ||
</note> | </note> | ||
- | Directement inspiré de : | + | Ce droit demande une connaissance préalable de **tous les droits** de bases, leur **fonctionnement**, leur **manipulation**, ainsi que de la commande de listage **ls**. \\ |
- | + | ||
- | [[http://www.ac-creteil.fr/reseaux/systemes/linux/debian/deb-tp-droits.html | Les TP de AC - Creteil]] | + | |
- | + | ||
- | Ce droit demande une connaissance préalable de **tous les droits** de bases, leur **fonctionnnement**, leur **manipulation**, ainsi que de la commande de listage **ls**. \\ | + | |
Si vous ne comprenez pas cette litanie, revoyez les commandes [[CHMOD]] [[CHOWN]] [[LS]] et concert... | Si vous ne comprenez pas cette litanie, revoyez les commandes [[CHMOD]] [[CHOWN]] [[LS]] et concert... | ||
Ligne 170: | Ligne 201: | ||
Exemple de fichier où SUID s'applique nécessairement : | Exemple de fichier où SUID s'applique nécessairement : | ||
- | sous root //lister// dans un terminal : | + | Saisir dans un terminal : |
<code user>ls -l /etc/shadow</code> | <code user>ls -l /etc/shadow</code> | ||
- | <code bash>-rw-r----- root root shadow</code> | + | <file config retour de la commande>-rw-r----- root root shadow</file> |
Les droits de réalisation (rw) dans le fichier **shadow** sont limités à u=root exclusivement. | Les droits de réalisation (rw) dans le fichier **shadow** sont limités à u=root exclusivement. | ||
et : | et : | ||
<code user>ls -l /usr/bin/passwd</code> | <code user>ls -l /usr/bin/passwd</code> | ||
- | <code bash>-rxsr-xr-x root root /usr/bin/passwd</code> | + | <file config retour de la commande>-rxsr-xr-x root root /usr/bin/passwd</file> |
SUID, en s'intégrant (rx**s**r) dans le fichier intermédiaire **passwd** où : | SUID, en s'intégrant (rx**s**r) dans le fichier intermédiaire **passwd** où : | ||
Ligne 189: | Ligne 220: | ||
//Il était une fois//... 8-o | //Il était une fois//... 8-o | ||
- | SUID permet la réalisation d'une commande d'exécution (x) à partir d'un utilisateur-lambda, //via// un fichier d'utilisateur exclusif (u = root par exemple...)//vers// un fichier de réalisation finale de propriété exclusive identique __sans attribuer des droits permanents__ hors de la commande présentée ! | + | SUID permet la réalisation d'une commande d'exécution (x) à partir d'un utilisateur-lambda, //via// un fichier d'utilisateur exclusif (u = root par exemple...) //vers// un fichier de réalisation finale de propriété exclusive identique __sans attribuer des droits permanents__ hors de la commande présentée ! |
En effet, le droit SUID est un droit //TEMPORAIRE// de fichier. \\ | En effet, le droit SUID est un droit //TEMPORAIRE// de fichier. \\ | ||
Ligne 206: | Ligne 237: | ||
=== Exemple === | === Exemple === | ||
- | Sous root listez((doc:systeme:ls)) dans un terminal : | + | Saisir dans un terminal : |
- | <code root>ls -l /etc/shadow</code> | + | <code user>ls -l /etc/shadow</code> |
- | <code bash>-rw-r----- root root shadow</code> | + | <file config retour de la commande>-rw-r----- root root shadow</file> |
Ce qui indique toutes les limites de ce fichier réservé à root. Sécurité maxi ! | Ce qui indique toutes les limites de ce fichier réservé à root. Sécurité maxi ! | ||
- | Puis, listez : | + | Puis saisir : |
<code user>ls -l /usr/bin/passwd</code> | <code user>ls -l /usr/bin/passwd</code> | ||
- | <code bash>-rxsr-xr-x root root /usr/bin/passwd</code> | + | <file config retour de la commande>-rxsr-xr-x root root /usr/bin/passwd</file> |
Ici, le droit sur le fichier passwd est accordé à tous les exécutants lambda (valeur x pour tous). \\ | Ici, le droit sur le fichier passwd est accordé à tous les exécutants lambda (valeur x pour tous). \\ | ||
Ligne 222: | Ligne 253: | ||
Le positionnement du SUID permet à passwd d'utiliser ses droits de réalisation root (rw-) dans le fichier shadow pour l'exécution de la commande lambda initié, en la prenant à son compte ! \\ | Le positionnement du SUID permet à passwd d'utiliser ses droits de réalisation root (rw-) dans le fichier shadow pour l'exécution de la commande lambda initié, en la prenant à son compte ! \\ | ||
- | Exit l'utilisateur non-root initiateur de la commande ! C'est donc root qui la prend à son compte juste pour l'exécution de cette commande. \\ | + | Exit l'utilisateur non-root initiateur de la commande ! C'est donc root qui la prend à son compte juste pour l'exécution à l'intérieur de cette commande. \\ |
===== Final ===== | ===== Final ===== |