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 data
La 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
X
Exemple:
# Ajoute les droits en écriture pour le groupe
chmod g+w fichier
Exemple:
# 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 fichier
X
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 fichier
Voir 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 0002
Après chacune des opérations suivantes, observez le contenu des
fichiers /etc/group
, /etc/passwd
et
/etc/shadow
bill
microsoft
steve
apple
linus
et un autre nommé
ian
gnu
.su
Pour se connecter en tant qu’un autre utilisateur, utiliser la commande suivante:
~$ su ian
Une 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-ian
Selon 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.
sudo
Dans 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
exit
Pour exécuter la commande directement en tant qu’un autre utilisateur, dans le dossier courant :
sudo -u ian touch fichier-de-ian
su
Pour exécuter la commande directement en tant qu’un autre utilisateur, dans le dossier courant :
su ian
Le mot de passe de ian
est alors demandé.
Exécuter la ou les commandes:
touch fichier-de-ian
Se déconnecter de ian
:
exit
Créer l’arborescence suivante:
Dans chaque dossier sources
, créer un fichier
init.c
.
Le contenu du fichier est :
#include <stdio.h>
int main()
{
("Hello World !");
printfreturn 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;
}
EOF
Les propriétaires (utilisateur et groupe) sont positionnés en
utilisant la commande chown
.
La commande suivante :
chown ian:gnu ledossier
Va 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 ledossier
Va 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 ledossier
Va 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 microsoft
Si 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
gnu
mac
: appartient au groupe
apple
windows
: appartient au groupe
microsoft
Ré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.c
chgrp
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 windows
Le 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 linux
Nous 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.linus
Se connecter en tant que linus
:
su linus
Saisir 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
exit
Une 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 queen
Une alternative est d’utiliser la commande suivante:
sudo usermod -a -G queen freddie
Pour vérifier l’appartenance à un groupe de l’utilisateur courant, utiliser une des commandes suivantes:
groups
id
La 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 apple
Pour 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 acl
Sous RedHat et dérivés:
sudo dnf install acl
setfacl
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 mac
En 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.c
Voir aussi la page sur les ACLs de Lea Linux
sudo -u linus touch mac/sources/init.c
Si 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 sources
Si 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 mac
sudo -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: mac
Pour un fichier
setfacl -x g:apple mac
Suppression:
setfacl -Rb mac windows linux
$ mkdir confacl
$ setfacl -d -m g:gnu:rwX confacl
richard
ne pourra pas créer de dossier dans ce
dossier:
$ sudo -u richard touch confacl/richard.txt
touch: cannot touch 'confacl/richard.txt': Permission denied
Par contre le propriétaire peut créer un fichier:
$ touch confacl/proprietaire.txt
Que richard peut alors modifier:
$ sudo -u richard touch confacl/proprietaire.txt
Pourquoi ? 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.txt
En 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.txt
set-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 debian
Tentative 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