====== 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