Pour un fichier ou dossier, trois catégories d’utilisateurs sont gérées:
| Catégorie | Nom anglais | Acronyme |
|---|---|---|
| utilisateur propriétaire | owner user | u |
| groupe | group | g |
| autres utilisateurs | other users | o |
Trois types de droits sont associés à chacune de ces catégories:
| Droit | Nom anglais | Acronyme |
|---|---|---|
| Lecture/affichage | read | r |
| Écriture/modification | write | w |
| Exécution/accès | execution | x |
L’affichage de la commande ls -l produit une sortie
semblable à ceci:
-rw-r--r-- 1 theuser thegroup 17B 26 mar 01:02 hello.c
drwxr-xr-x 3 theuser thegroup 102B 5 apr 09:44 dataLa colonne de gauche reprend les droits d’accès répartis dans les trois catégories sur 10 caractères.
| t | u | g | o | Catégorie |
|---|---|---|---|---|
- |
rw- |
r-- |
r-- |
|
d |
rwx |
r-x |
r-x |
|
- |
Type de fichier | |||
d |
Type de fichier | |||
rw- |
owner User | |||
rwx |
owner User | |||
r-- |
Group | |||
r-x |
Group | |||
r-- |
Other users | |||
r-x |
Other users |
La première lettre donne le type du fichier:
| Lettre | Signification anglophone | Signification |
|---|---|---|
| - | regular file | fichier standard |
| d | directory | répertoire |
| l | symbolic link | lien symbolique |
| s | socket | socket |
| b | block device | périphérique bloc |
| c | character device | périphérique caractère |
| p | FIFO | tuyau, tube, pipe |
Sous Debian ou RedHat et leurs dérivés, la commande
man namei permet de lister les types de fichiers.
Sous d’autres systèmes, la commande man ls donne ces
informations.
Quelques informations supplémentaires sont décrites ici.
| Symbolique | Absolue | r = 4 | w = 2 | x = 1 |
|---|---|---|---|---|
rwx |
7 | 1 | 1 | 1 |
rw- |
6 | 1 | 1 | 0 |
r-x |
5 | 1 | 0 | 1 |
r-- |
4 | 1 | 0 | 0 |
-w- |
2 | 0 | 1 | 0 |
--- |
0 | 0 | 0 | 0 |
chmod [augo][+-][rwxX]+-u, g, o ou
a (all)r, w, x ou
XExemple:
# Ajoute les droits en écriture pour le groupe
chmod g+w fichierExemple:
# Supprime les droits en écriture pour les autres
chmod o-w fichier# Ajoute les droits en écriture pour le groupe
# Supprime les droits en écriture pour les autres
chmod g+w,o-w fichier# + exécution pour tous
chmod +x fichier
# + exécution pour l'utilisateur propriétaire
chmod u+x fichier
# + exécution si l'un des bits d'exécution est positionné
chmod +X fichierX
majuscule: ajout sélectif en exécution$ touch lisible
$ chmod 400 lisible
$ touch inscriptible
$ chmod 600 inscriptible
$ touch executable
$ chmod 700 executable
$ ll
total 0
-rwx------ 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod o+X *
$ ll
total 0
-rwx-----x 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod g+x *
$ ll
total 0
-rwx--x--x 1 laurent laurent 0 Feb 8 11:32 executable
-rw---x--- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r----x--- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod g-x *
$ ll
total 0
-rwx-----x 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod o-X *
$ ll
total 0
-rwx------ 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod +X *
$ ll
total 0
-rwx--x--x 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod -X *
$ ll
total 0
-rw------- 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod +rX *
$ ll
total 0
-rw-r--r-- 1 laurent laurent 0 Feb 8 11:32 executable
-rw-r--r-- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r--r--r-- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod g-r,o-r *
$ ll
total 0
-rw------- 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod o+x executable
$ ll
total 0
-rw------x 1 laurent laurent 0 Feb 8 11:32 executable
-rw------- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r-------- 1 laurent laurent 0 Feb 8 11:32 lisible
$ chmod +rX *
$ ll
total 0
-rwxr-xr-x 1 laurent laurent 0 Feb 8 11:32 executable
-rw-r--r-- 1 laurent laurent 0 Feb 8 11:32 inscriptible
-r--r--r-- 1 laurent laurent 0 Feb 8 11:32 lisible$ chmod 644 fichier
$ ls -l
-rw-r--r-- 1 theuser thegroup 17 26 mar 01:02 fichier
$ chmod 755 fichier
$ ls -l
-rwxr-xr-x 1 theuser thegroup 17 26 mar 01:02 fichierVoir man umask
umask 0022| permissions | bin | oct | umask (binaire) | umask | fichier |
|---|---|---|---|---|---|
| rw-rw-r– | 110 110 100 | 664 | 000 000 000 010 | 0002 | texte0002.txt |
| rw-r–r– | 110 100 100 | 644 | 000 000 010 010 | 0022 | texte0022.txt |
| rw——- | 110 000 000 | 600 | 000 000 110 110 | 0066 | texte0066.txt |
| r–rw-r– | 100 110 100 | 464 | 000 010 000 010 | 0202 | texte0202.txt |
| r–r–r– | 100 100 100 | 444 | 000 010 010 010 | 0222 | texte0222.txt |
| r–r–r– | 100 100 100 | 444 | 000 011 011 011 | 0333 | texte0333.txt |
Calcul des droits d’un fichiers :
droits = 666 - umask
Exemple avec un umask de 0026 :
666 - 0026 = 640
Avant de commencer ce qui suit, votre umask doit être positionné sur
sa valeur par défaut (0002).
Si ce n’est pas le cas, lancer la commande:
umask 0002Après chacune des opérations suivantes, observez le contenu des
fichiers /etc/group, /etc/passwd et
/etc/shadow
billmicrosoftsteveapplelinus et un autre nommé
iangnu.suPour se connecter en tant qu’un autre utilisateur, utiliser la commande suivante:
~$ su ianUne fois le mot de passe saisi, l’invite de commande change:
/home/laurent$Cela indique que l’on est connecté sur le dossier courant
/home/laurent.
Exécuter une commande:
touch fichier-de-ianSelon les permissions du dossier courant, le fichier sera créé ou un message d’erreur affiché.
Pour se déconnecter, utiliser la commande exit ou
CtrlD.
sudoDans le cas où l’utilisateur courant est membre du groupe des sudoers
Pour vérifier si votre utilisateur est membre des sudoers, lancer la commande suivante:
sudo echo bonjour
Si la sortie affiche :
bonjour
Alors votre utilisateur est sudoer.
Sinon, une erreur indique que ce n’est pas le cas:
alice is not in the sudoers file. This incident will be reported.
Dans ce dernier cas, il faut se connecter en tant que root pour réaliser la commande donnée.
Au lieu de sudo -u ian touch fichier il faudra exécuter
les commandes suivantes:
su - ian
touch fichier
exitPour exécuter la commande directement en tant qu’un autre utilisateur, dans le dossier courant :
sudo -u ian touch fichier-de-iansuPour exécuter la commande directement en tant qu’un autre utilisateur, dans le dossier courant :
su ianLe mot de passe de ian est alors demandé.
Exécuter la ou les commandes:
touch fichier-de-ianSe déconnecter de ian:
exitCréer l’arborescence suivante:
Dans chaque dossier sources, créer un fichier
init.c.
Le contenu du fichier est :
#include <stdio.h>
int main()
{
printf("Hello World !");
return 0;
}$ mkdir -p informatique/{windows,mac,linux}/sources/
$ cd informatique
$ cat | tee {windows,mac,linux}/sources/init.c <<EOF
#include <stdio.h>
int main()
{
printf("Hello World !");
return 0;
}
EOFLes propriétaires (utilisateur et groupe) sont positionnés en
utilisant la commande chown.
La commande suivante :
chown ian:gnu ledossierVa modifier le propriétaire et le “groupe propriétaire” du répertoire
ledossier:
ian sera l’utilisateur propriétairegnu sera le groupe propriétaireLa commande suivante agit de manière récursive :
chown -R ian:gnu ledossierVa modifier le propriétaire et le “groupe propriétaire” du répertoire
ledossier et de tous ses fichiers et sous-dossiers
récursivement :
ian sera l’utilisateur propriétairegnu sera le groupe propriétaireLes commandes suivantes ont le même effet :
chgrp gnu ledossier
chown :gnu ledossierVa modifier le “groupe propriétaire” du répertoire
ledossier:
gnu sera le groupe propriétaireIl est possible de lui appliquer l’option -R
Avant de commencer, ajouter l’utilisateur courant dans chacun les
groupes de travail microsoft et apple:
sudo adduser $USER apple
sudo adduser $USER microsoftSi ce n’est pas le cas, vous aurez une erreur lors des changements de groupe des dossiers.
Le positionnement des utilisateurs et groupes propriétaires se fait
avec la commande chown.
linux : appartient au groupe
gnumac : appartient au groupe
applewindows : appartient au groupe
microsoftRésultat attendu :
$ cd informatique
$ tree -p -u -g
.
├── [drwxrwxr-x laurent gnu ] linux
│ └── [drwxrwxr-x laurent gnu ] sources
│ └── [-rw-rw-r-- laurent gnu ] init.c
├── [drwxrwxr-x laurent apple ] mac
│ └── [drwxrwxr-x laurent apple ] sources
│ └── [-rw-rw-r-- laurent apple ] init.c
└── [drwxrwxr-x laurent microsoft] windows
└── [drwxrwxr-x laurent microsoft] sources
└── [-rw-rw-r-- laurent microsoft] init.cchgrp peut être utilisée à la place de
chown pour modifier le groupe propriétaire.
Les deux commandes suivantes produisent le même effet:
chown -R :microsoft windows/
chgrp -R microsoft windows/chown -R :microsoft windows
chown -R :gnu linux
chgrp -R gnu linux
chgrp -R apple mac
chgrp -R microsoft windowsLe positionnement des permissions se fait avec la commande
chmod.
chmod pour faire en sorte que les
“autres utilisateurs” ne puisse ni lire, ni écrire, ni accéder aux trois
dossiers et à leurs sous-éléments. Par exemple, un membre du groupe
apple n’a pas le droit d’aller lire ni écrire dans le
répertoire windows.Résultat attendu (partiel):
$ tree -p -u -g
.
├── [drwxrwx--- laurent gnu ] linux
│ └── [drwxrwx--- laurent gnu ] sources
│ └── [-rw-rw---- laurent gnu ] init.c
...chmod -R o-r,o-x linuxNous allons maintenant manipuler les droits UNIX.
Pour visualiser les modifications, la commande ls -l ou
son alias ll seront utilisés.
chmod 755 mac windows.
Vérifier ses effets.linusSe connecter en tant que linus:
su linusSaisir le mot de passe.
Puis effectuer les opérations suivantes:
touch mac/jesuislinus. Que se
passe-t-il ?touch linux/jesuislinus. Que se
passe-t-il ?touch windows/jesuislinus. Que se
passe-t-il ?Se déconnecter de linus
exitUne variante consiste à utiliser la commande
sudo -u linus:
sudo -u linus touch mac/jesuislinus.
Que se passe-t-il ?sudo -u linus touch linux/jesuislinus. Que se passe-t-il
?sudo -u linus touch windows/jesuislinus. Que se passe-t-il
?Dans ce qui suit, <USER> sera à remplacer par le
nom de votre utilisateur courant
windows/<USER> avec la commande
touch windows/<USER>. Est-ce normal que le fichier
existe ?windows/<USER>Se connecter en tant que “
su "<USER>"sudo chown bill windows. Se
déconnecter de “Saisir à nouveau la commande
touch windows/<USER>.
chown linus linux (en tant que
super-utilisateur)chown steve mac (en tant que
super-utilisateur)windows/<USER>,
mac/<USER> et linux/<USER><USER> au groupe gnu et
retenter de créer linux/<USER> (cela devrait
fonctionner, mais sous certaines conditions, lesquelles ?)Le manuel de adduser indique l’exemple suivant pour
l’utilisation de cette commande :
adduser [options] user group
En effet, la commande suivante ajoutera l’utilisateur
freddie au groupe queen
adduser freddie queenUne alternative est d’utiliser la commande suivante:
sudo usermod -a -G queen freddiePour vérifier l’appartenance à un groupe de l’utilisateur courant, utiliser une des commandes suivantes:
groupsidLa commande id -Gn peut aussi être utilisée.
Ces deux dernières commandes peuvent aussi afficher les informations sur d’autres utilisateurs:
$ id -Gn bill
bill microsoft
$ groups steve
steve : steve applePour supprimer un utilisateur d’un groupe (ici l’utilisateur
freddie) :
deluser freddie queen<USER> au groupe apple et
retenter de créer windows/<USER>,
mac/<USER> et linux/<USER><USER> au groupe microsoft
et retenter de créer windows/<USER>sudo chmod g+w windows et retenter de
créer windows/<USER>. Est-ce normal ?windows/<USER>. Que s’est-il passé ? Dans quel autre
cas avez-vous déjà dû vous déconnecter pour observer le changement de
groupe effectif ?Access Control Lists (ACL)L’installation du paquet acl est nécessaire pour
utiliser les commandes setfacl et getfacl.
Pour l’installer :
Sous Debian et dérivés:
sudo apt-get update && sudo apt-get install aclSous RedHat et dérivés:
sudo dnf install aclsetfacl pour permettre à
linus (sans rajouter d’autres permissions à d’autres
utilisateurs ou groupes) de lire et écrire dans le répertoire
mac et ses sous-répertoires. Testez.Ci-dessous une fonction partielle qui ne fonctionnera pas:
sudo setfacl -R -m u:linus:rw macEn effet, linus n’aura pas le droit d’accéder (en
exécution) au dossier mac
getfacl pour vérifier les droits
affectés au fichier informatique/mac/sources/init.cVoir aussi la page sur les ACLs de Lea Linux
sudo -u linus touch mac/sources/init.cSi linus a les droits d’accès en exécution dans
mac et mac/sources, il pourra exécuter cette
commande.
On peut tester cela en se connectant avec linus:
su linus
cd mac
cd sourcesSi les deux dernières commandes ne fonctionnent pas, il faut
repositionner les ACL en utilisant rwX (avec un X
majuscule) sur mac et de manière récursive (question
35)
sudo setfacl -R -m u:linus:rwX macsudo -u bill touch mac/sources/init.c. Est-ce que le
résultat est normal ?setfacl -Rb mac puis essayer à
nouveau sudo -u linus touch mac/sources/init.c. Que
s’est-il passé ?Toutes les ACL ont été supprimées sur le dossier mac.
Vérifier avec getfacl
setfacl -Rm u:linus:rwX mac puis
créer le répertoire mac/bin. Quels sont les autorisations
associées à ce dossier ? Est-ce normal ? Est-ce souhaité ?setfacl -Rdm u:linus:rwX mac puis
créer le répertoire mac/partage. Observer les autorisations
associées à ce dossier. Que peut-on en conclure ?mac, linux, windows)Récursivement
setfacl -Rx u:linus: macPour un fichier
setfacl -x g:apple macSuppression:
setfacl -Rb mac windows linux$ mkdir confacl$ setfacl -d -m g:gnu:rwX confaclrichard ne pourra pas créer de dossier dans ce
dossier:
$ sudo -u richard touch confacl/richard.txt
touch: cannot touch 'confacl/richard.txt': Permission deniedPar contre le propriétaire peut créer un fichier:
$ touch confacl/proprietaire.txtQue richard peut alors modifier:
$ sudo -u richard touch confacl/proprietaire.txtPourquoi ? Parce que désormais ce nouveau fichier
proprietaire.txt a récupéré les ACLs par défaut:
$ getfacl confacl/proprietaire.txt
# file: confacl/proprietaire.txt
# owner: laurent
# group: laurent
user::rw-
group::r-x #effective:r--
group:gnu:rwx #effective:rw-
mask::rw-
other::r--De même le propriétaire peut créer un dossier:
$ mkdir confacl/dossier
$ sudo -u richard touch confacl/dossier/richard.txtEn effet, les droits d’accès de ce dossier sont désormais hérités:
$ getfacl confacl/dossier/
# file: confacl/dossier/
# owner: laurent
# group: laurent
user::rwx
group::r-x
group:gnu:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:gnu:rwx
default:mask::rwx
default:other::r-x$ mkdir partage
$ setfacl -d -m g:gnu:rwX partage
$ setfacl -m g:gnu:rwX partage
$ sudo -u richard touch partage/richard.txtset-group-ID bit (SGID)Le SGID permet d’appliquer le groupe propriétaire d’un dossier aux fichiers et dossiers qui seront créés dans ce dossier.
Il permet donc de modifier le groupe par défaut lors de création de nouveau fichier
$ sudo chmod -R g+s debianTentative de création d’un nouveau fichier:
$ sudo -u richard touch debian/richard-avec-sgid.txt
$ ll debian
total 0
-rw-r--r-- 1 richard gnu 0 Jul 17 16:23 richard-avec-sgid.txt
-rw-r-Sr-- 1 richard richard 0 Jul 17 16:19 richard.txt