====== Les droits sur les fichiers ====== ===== Par quoi commencer ? ===== Euh... Allez on va parler des ===== Valeurs possibles ===== * lecture (on peut lire le contenu du fichier ou dossier) * l'ecriture (on peut ecrire dans le fichier ou dossier) * exécution (on peut lancer le programme si c'est un exécutable) On commence avec la prise de tete avec le fait qu'un fichier peut etre executable mais pas un dossier donc pour un dossier le bit correspondant donne le droit de lister le contenu car on peut tres bien voir un dossier mais ne pas pouvoir voir ce qu'il y a dedans. ===== les valeurs ===== * lecture = 4 (r comme read) * ecriture = 2 (w comme write) * exécution = 1 (x comme execute) on donne des valeurs à un fichier et on les additionne. ===== les ayant droit ===== il y en a 3 (universale, sony et warner) mais ça c'est dans la musique sous linux c'est * le propriétaire (u) du fichier (celui qui a créé le fichier ou à qui on a donné le fichier) * le groupe (g) (les utilisateurs peuvent etre mis dans des groupes d'utilisateurs) * tous les autres (o) (ne fait pas partie du groupe et n'est pas le owner) quand on donne des droits à un fichier, on commence par le owner suivi par le groupe puis par les autres. ==== Concretement ==== Quand on fait un ls -al on voit que les droits sont marqués avec des rwx Par exemple, si je vais dans mon home, je vois cela drwxr-xr-x 3 ssm2017 ssm2017 4.0K Feb 13 02:37 . drwxr-xr-x 11 root root 4.0K Feb 13 22:24 .. -rw------- 1 ssm2017 ssm2017 76 Feb 13 02:05 .bash_history -rw-r--r-- 1 ssm2017 ssm2017 220 Feb 13 01:17 .bash_logout -rw-r--r-- 1 ssm2017 ssm2017 3.4K Feb 16 23:07 .bashrc -rw-r--r-- 1 ssm2017 ssm2017 675 Feb 13 01:17 .profile -rw-r--r-- 1 ssm2017 ssm2017 675 Feb 13 01:17 tutu en partant de gauche à droite, on a proprietaire, groupe et user donc pour le fichier .bash_history on voit que le owner a le droit de l'ecrire et lire. Si on additionne les valeurs, on a r = 4 et w = 2 et rien pour le reste donc le fichier a les droits 600. par contre le fichier tutu on voit que le groupe et n'importe qui a le droit de le lire. Si on additionne les valeurs, on a 6 pour le proprietaire, 4 pour le groupe et 4 pour les autres donc 644 ===== Comment changer les droits ? ===== la commande pour changer les droits est chmod admettons qu'on ne veut plus que tout le monde puisse voir le contenu de tutu on utilise chmod 640 tutu ce qui donnera -rw-r----- 1 ssm2017 ssm2017 3.4K Feb 16 23:07 tutu on peut utiliser le parametre -R dans le cas ou on veuille assigner les valeurs pour des sous dossiers (R = récursif). On a vu comment changer les valeurs avec des chiffres (je prefere) mais on peut utiliser des lettres (pour les artistes) chmod u=rw,g=r tutu on peut aussi utiliser des increments ou decrements chmod ug+r,u+w tutu ===== Comment changer le owner ? ===== Quand on a les permissions necessaires, on peut changer le owner (propriétaire) d'un fichier ou dossier. **Seul l'utilisateur root peut utiliser la commande chown**. La commande est chown le premier parametre est le nom du user puis deux points puis le nom du groupe. (on peut aussi utiliser -R si on veut que ce soit récursif dans les sous dossiers) chown toto:titi tutu donne le fichier tutu à l'utilisateur toto et au groupe titi -rw-r----- 1 toto titi 3.4K Feb 16 23:07 tutu donc avec ces droits, seul l'utilisateur toto peut lire et ecrire dedans, les utilisateurs etant dans le groupe titi peuvent lire le contenu et les autres ne peuvent ni le voir ni y ecrire dedans. (donc si ssm2017 ne fait pas partie du groupe titi, il est mal) ===== Les groupes ===== Comme on vient de voir, le premier en partant de la gauche est le user et le second est le groupe. Par defaut, quand on crée un utilisateur sous Debian, un groupe du meme nom est créé. On peut tres bien ajouter un utilisateur à un groupe. Par exemple, je peux creer le groupe "opensimeros" sur le serveur et ajouter des users dedans avec addgroup ssm2017 opensimeros donc si je change le propriétaire du fichier tutu avec chown toto:opensimeros tutu ce qui donnera -rw-r----- 1 toto opensimeros 3.4K Feb 16 23:07 tutu ssm aura maintenant le droit de lire le contenu car il fait partie du groupe opensimeros. Les utilisateurs n'ayant pas les droits root peuvent changer le groupe d'un fichier ou dossier avec la commande chgrp chgrp opensimeros tutu ===== Le droit d'exécution ===== Un fichier peut etre un executable (.exe ou .com) sous windows et ce que l'on veut sous linux ou osx. On peut suprimer ou ajouter le droit d'exécution sur un fichier. Par exemple, je cree un script bash qui se nomme pouet et qui contient un script qui dit "coucou". Pour cela, je lance nano pouet et dedans je mets #!/bin/bash echo "coucou" puis je sauvegarde et je quitte. par defaut, le fichier pouet sera en 644 donc on a -rw-r--r-- 1 ssm2017 ssm2017 0 Feb 17 01:51 pouet si on veut le lancer, ça nous dit ssm2017@atelier-fg:~$ ./pouet -bash: ./pouet: Permission denied car il n'a pas le bit d'exécution pour le rendre exécutable, on lance chmod 744 pouet ce qui rend le fichier exécutable seulement pour le owner (si on veut le rendre exécutable aussi pour le groupe, on fera un chmod 774) donc on relance et ca donne ssm2017@atelier-fg:~$ ./pouet coucou Le bit d'exécution pour les dossiers permet d'autoriser le listing du contenu. Si on crée un dossier temp dans son home avec la commande mkdir on utilise mkdir temp ce qui va créer un dossier ayant pour droits par défaut 755 ce qui veut dire que * le owner peut lire, ecrire et voir le contenu, * le groupe peut lire et voir le contenu * et les autres peuvent lire et voir le contenu ensuite on decide qu'il appartient a ssm2017 et au groupe opensimeros chown ssm2017:opensimeros temp puis on lui donne les droits chmod 750 temp donc * le owner pourra lire, ecrire, et lister le contenu * le groupe pourra lire et lister le contenu * et les autres ne pourront rien faire ===== Permissions spéciales ===== On va parler de bit (ça devrait vous plaire... ou pas) Il y en a 3 : * user id bit * group id bit * sticky bit ==== User ID bit ==== On s'en fout (matez google si vous voulez) ==== Group ID bit ==== Celui ci est utile dans le cas d'un serveur web par exemple ou OpenSimulator selon les cas. Il ne fonctionne que sur les dossiers et on l'assigne comme cela chmod 2775 temp ceci voudra dire que peu importe le fichier qui sera créé dans le dossier temp, le groupe sera le meme que le dossier. Par exemple, si le dossier appartient au groupe opensimeros, tous les fichiers crées dedans auront aussi le groupe opensimeros meme si c'est un autre user qui le crée. ==== Sticky bit ==== Le sticky bit permet de donner le droit de suppression seulement au user qui a créé le fichier. Par exemple, si dans le dossier temp qui appartient au groupe opensimeros, toto cree un fichier, l'utilisateur ssm2017 pourra le supprimer si il a le meme groupe et bien sur si le groupe a le droit en ecriture sur le fichier. Pour eviter cela, on met le sticky bit au dossier et seul l'utilisateur ayant créé le fichier aura le droit de le supprimer meme si les autres ont le droit en ecriture sur le fichier (par exemple le dossier /tmp de linux a le chmod 1777). il ne fonctionne que sur les dossiers et on l'assigne comme cela chmod 1775 temp