Contexte
Durée : 2h
Environnement de travail : Linux en ligne de commande
Pré-requis : Savoir utiliser la ligne de commande
Linux est un système multi-utilisateurs, ce qui signifie que plusieurs utilisateurs différents peuvent utiliser le système en même temps. Ces utilisateurs peuvent être des utilisateurs humains, mais aussi des utilisateurs systèmes qui sont en charge de faire exécuter différents logiciels en arrière-plan. Cette composante multi-utilisateurs est très importante, et elle nécessite une organisation et une gestion des droits simple mais mais stricte pour fonctionner correctement.
Nous allons voir dans ce cours comment sont organisés les utilisateurs, comment les configurer, mais aussi la gestion des droits et la notion de super-utilisateur.
Les utilisateurs et les groupes
Objectifs
Comprendre ce qu'est un utilisateur Linux
Comprendre ce qu'est un groupe
Savoir interpréter des UID/GID
Les utilisateurs, au cœur du système
Sous Linux, tout les fichiers et dossiers appartiennent à un utilisateur, et tout les programmes qui s’exécutent sont exécutés par un utilisateur donné. En fait, plus ou moins tout est lié à un ou plusieurs utilisateurs. On ne parle pas forcément d'utilisateurs humains, mais d'utilisateurs au sens informatique. Beaucoup de logiciels en arrière-plan s'exécute avec un utilisateur défini uniquement pour cet usage. Pour illustrer ça, on peut afficher le fichier /etc/passwd
qui contient de nombreuses informations, en particulier les utilisateurs qui existent. Par exemple sur ma machine j'ai ceci :
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
messagebus:x:104:111::/var/run/dbus:/bin/false
avahi:x:105:112:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
uuidd:x:106:114::/run/uuidd:/bin/false
Debian-exim:x:107:115::/var/spool/exim4:/bin/false
statd:x:108:65534::/var/lib/nfs:/bin/false
avahi-autoipd:x:109:118:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
colord:x:110:120:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:111:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:113:65534::/var/run/sshd:/usr/sbin/nologin
pulse:x:114:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:115:124:RealtimeKit,,,:/proc:/bin/false
saned:x:116:125::/var/lib/saned:/bin/false
usbmux:x:117:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
hplip:x:119:7:HPLIP system user,,,:/var/run/hplip:/bin/false
kyane:x:1000:1000:Kyâne,,,:/home/kyane:/usr/bin/zsh
geoclue:x:120:127::/var/lib/geoclue:/bin/false
_apt:x:121:65534::/nonexistent:/bin/false
Debian-minetest:x:122:60:Minetest dedicated server,,,:/var/games/minetest-server:/bin/false
vde2-net:x:123:132::/var/run/vde2:/bin/false
radvd:x:124:65534::/var/run/radvd:/bin/false
snort:x:125:135:Snort IDS:/var/log/snort:/bin/false
ntp:x:103:106::/nonexistent:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/sbin/nologin
debian-tor:x:126:137::/var/lib/tor:/bin/false
_rpc:x:127:65534::/run/rpcbind:/usr/sbin/nologin
tcpdump:x:112:126::/nonexistent:/usr/sbin/nologin
Il n'est pas nécessaire de tout comprendre pour le moment, il faut simplement savoir que le texte indiqué en début de chaque ligne, avant les ":
", est le nom d'un utilisateur. On voit qu'il y en a vraiment beaucoup, et en réalité il n'y en a qu'une seul qui correspond à un être humain, c'est kyane
, ligne 37. Tout le reste sont des utilisateurs dits "système", dans le sens où ils servent plus au système d'exploitation qu'a un utilisateur. Par exemple le dernier, tcpdump
, est utilisé par le programme tcpdump
(un outil de capture du flux réseau) pour réaliser les opérations qu'il a besoin de faire.
Les groupes
On peut créer autant d'utilisateurs que l'on veut sur Linux, et les répartir dans des groupes. Un groupe est, comme son nom l'indique, un regroupement de plusieurs utilisateurs, ce qui permettra ensuite d'appliquer des règles à tout les utilisateurs d'un même groupe d'un coup. Par défaut chaque utilisateur se trouve dans un groupe qui porte le même nom (l'utilisateur kyane
est par défaut dans le groupe kyane
), c'est ce que l'on appelle le groupe primaire. Mais un utilisateur peut-être ajouté à plusieurs autres groupes par la suite, par exemple le même utilisateur kyane
se trouve aussi dans un groupe bluetooth
, qui me permet d'utiliser le Bluetooth de mon ordinateur.
Définition : UID et GID
Les UID et GID sont les identifiants des utilisateurs et groupes. En effet le système d'exploitation ne manipule pas directement des noms textuels, mais des identifiants numériques. L'UID, pour User ID, est l'identifiant qui correspond à un utilisateur donné. Dans l'exemple de l'utilisateur kyane
plus haut, sont UID est 1000. Le GID pour Group ID
est la même chose mais pour un groupe.
Méthode : La commande id
La commande id
permet d'obtenir très simplement une information sur l'utilisateur avec lequel on est connecté, ainsi que les groupes associés.
$ id
uid=1000(kyane) gid=1000(kyane) groupes=1000(kyane),4(adm),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev),110(lpadmin),113(scanner),119(bluetooth),134(wireshark),999(docker)
Ici on voit en premier que mon UID est 1000, c'est à dire l'utilisateur kyane
, et mon GID est aussi 1000, avec un groupe du même nom (mon groupe primaire). Ensuite on voit la liste des groupes (nom et GID) auquel appartient l'utilisateur.
À retenir
Les utilisateurs et les groupes sont au cœur du fonctionnement de Linux. Ceux-ci possèdent des identifiants numériques, mais on peut manipuler une traduction sous la forme d'un nom textuel, pour les humains.
Appliquer la notion
Je viens d'ouvrir un terminal sur une machine, mais je ne sais pas quel est l'utilisateur avec lequel je suis connecté, ni les groupes auxquels il appartient. Avec quelle commande est-il possible d'obtenir l'information ?
On utilise la commande id
.
Interprétation
Le retour de la commande précédente est le suivant :
uid=700(kyane) gid=700(kyane) groups=700(kyane),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),998(docker)
Quel est le nom et l'UID de l'utilisateur ?
L'utilisateur est kyane
, avec pour UID 700
.
Quel est le GID du groupe nommé docker
?
Son GID est 998
.
L'utilisateur root
Objectifs
Savoir ce qu'est le super-utilisateur
Savoir utiliser le compte
root
.
Un super-utilisateur pour les gouverner tous
Les utilisateurs et groupes peuvent se voir autoriser différents droits sur le système. Ce sera abordé un peu plus loin, mais par exemple l'utilisateur par défaut que l'on a créé à l'installation ne pourra pas forcément lire tout les fichiers d'un autre utilisateur (et cela semble normal). On peut donc se demander « qui créé les utilisateurs ? »
, « qui peut donner des droits ? »
.
La réponse est simple : le super-utilisateur. C'est un utilisateur un peu particulier car il a absolument tout les pouvoirs sur la machine. Sous Linux cet utilisateur s'appelle root
, qui signifie racine.
Fondamental : Super-utilisateur root
L'utilisateur root
est le nom du super-utilisateur sous Linux. Il est le seul à avoir un UID spécial : 0. Il a la possibilité de réaliser toutes les actions et modifications possibles sur le système.
Exemple :
Sur votre installation Linux, essayez de lister les fichiers dans le dossier /root
à l'aide de votre utilisateur classique.
$ ls /root
ls: impossible d'ouvrir le répertoire '/root': Permission non accordée
Nous détaillerons les permissions par la suite, mais votre utilisateur ne peut pas réaliser cette action. Seul l'utilisateur root
peut le faire.
Méthode : Élévation de privilèges
Puisque l'on ne peut pas faire certaines actions en tant qu'utilisateur normal, il existe une technique pour obtenir des privilèges de super-utilisateur, c'est à dire pouvoir se connecter avec le compte root
. Pour cela, on utilise la commande sudo
. Elle permet de lancer une commande en tant que super utilisateur.
$ sudo ls /root
[sudo] Mot de passe de kyane :
fichier_secret
En préfixant notre commande précédente par sudo
on indique au système que l'on souhaite lancer la commande en tant que root
. Le mot de passe de notre utilisateur est demandé, puis la commande est exécuté. C'est ce que l'on appelle une élévation de privilèges.
Cependant, tout le monde n'a pas le pouvoir de lancer des commandes en utilisant sudo
, ce serait beaucoup trop facile, n'importe quel utilisateur pourrait obtenir tout les droits sur la machine. Cela n'est possible que pour un groupe d'utilisateurs bien précis : ceux du groupe sudo
. Avec la commande id
vous pourrez constater que votre utilisateur est bien dans ce groupe, ce qui est le cas pour l'utilisateur créé lors de l'installation.
Méthode : Une console root
Parfois on souhaite réaliser plusieurs opérations en tant que super-utilisateur, et il n'est pas très pratique de voir écrire sudo
au début de toutes les commandes. Pour cela on peut ouvrir une console en tant que root
, pour que toutes nos commandes puissent avoir le privilège super-utilisateur.
kyane@europa:~$ sudo -i
root@europa:~#
Après avoir entré la commande sudo -i
, on remarque que le prompt est modifié : on est l'utilisateur root
et le #
nous confirme que c'est bien un super-utilisateur. On peut désormais lancer plusieurs commandes en mode privilégié.
Attention : With great power comes great responsibility
Lorsque l'on exécute des commandes en tant que root
, on peut tout faire sur la machine. Et quand l'on ne fait pas attention à ce que l'on fait, on a le pouvoir de tout casser. Il n'est pas recommandé de lancer toutes les commandes en root
"juste pour être sûr", mais plutôt de n'utiliser sudo
que lorsque nécessaire, et après une réflexion sur les actions qui sont faites.
À retenir
Le super-utilisateur sur Linux s'appelle root
et c'est celui qui a tout les pouvoirs sur la machine. Tout les autres utilisateurs ont des droits limités. Cependant il est possible d"utiliser la commande sudo
pour élever ses privilèges lorsque nécessaire.
Appliquer la notion
Le fichier /etc/shadow
sur un environnement Linux contient des informations sensibles, entre autre les mots de passe (chiffrés) de certains utilisateurs.
Affichez le contenu de ce fichier dans votre terminal.
Normalement vous n'avez pas les droits pour le faire avec votre utilisateur classique.
On utilise la commande suivante pour afficher le contenu du dossier, en tant qu'utilisateur root
.
sudo cat /etc/shadow
Nous savons que l'UID de l'utilisateur root
est 0, mais comment le vérifier ?
La commande id
permet d'obtenir les informations sur un utilisateur. Si on la lance en tant que root
, on obtient :
$ sudo id
uid=0(root) gid=0(root) groupes=0(root)
Configuration des utilisateurs
Objectifs
Savoir trouver les informations de configuration des utilisateurs
Savoir créer et supprimer des utilisateurs
Le fichier /etc/passwd
Un peu plus tôt nous avions ouvert le fichier /etc/passwd
qui contient la liste des utilisateurs de la machine. Reprenons une ligne de ce fichier pour voir toutes les informations qu'il contient.
kyane:x:1000:1000:Kyâne:/home/kyane:/bin/bash
Chaque information est séparée par un caractère ":
". Dans l'ordre nous avons :
le nom d'utilisateur
kyane
;le caractère "
x
" qui indique que l'utilisateur a un mot de passe (stockée dans/etc/shadow
), en effet il peut exister des utilisateurs sans mot de passe ;l'UID, ici 1000 ;
le GID, ici 1000 ;
une description du compte utilisateur, ici
Kyâne
;le dossier de l'utilisateur, que l'on appelle son
home
;le shell utilisé par l'utilisateur, c'est à dire le programme qui interprète ses commandes (il en existe en fait plusieurs). Par défaut c'est généralement
/bin/bash
.
Attention : Manipuler les utilisateurs
Maintenant que l'on sait où sont configurés les utilisateurs, on est tenté de modifier le fichier /etc/passwd
pour créer ou supprimer des utilisateurs. En réalité ce n'est pas recommandé, on préfère laisser le système s'occuper de cela pour nous et plutôt utiliser des commandes adaptées.
Méthode : Créer un utilisateur
Pour créer un utilisateur, on utilise tout simplement la commande adduser
. Attention, c'est une commande qui nécessite les privilèges root
. Par exemple voici la commande et le retour si je veux créer un utilisateur sarah
.
sudo adduser sarah
C'est une commande interactive, qui demande de rentrer différentes informations sur l'utilisateur. Hormis le mot de passe qui est obligatoire, les autres informations sont celles qui se trouveront dans la description de l'utilisateur, et qui sont donc facultatives. Pour le reste, tout s'est fait automatiquement : la création de l'utilisateur, du groupe associé, du dossier de l'utilisateur, etc.
La commande a créé la ligne suivante dans le fichier /etc/passwd
.
sarah:x:1001:1001:Sarah,,0123456789,,Compte invite:/home/sarah:/bin/bash
Méthode : Supprimer un utilisateur
Si l'on souhaite supprimer l'utilisateur on utilise la commande suivante.
kyane@europa:~$ sudo deluser --remove-home sarah
Recherche des fichiers à sauvegarder ou à supprimer...
Suppression des fichiers...
Suppression de l'utilisateur « sarah »...
Attention ! Le groupe « sarah » ne contient plus aucun membre.
Fait.
kyane@europa:~$
L'option --remove-home
n'est pas obligatoire et permet, comme son nom l'indique, de supprimer aussi le répertoire de l'utilisateur en question. Ce n'est pas le cas par défaut, par mesure de sécurité.
Complément : Changer d'utilisateur
Pour vous connecter avec votre nouvel utilisateur, vous pouvez bien entendu vous connecter avec son nom et mot de passe au démarrage de la session, mais vous pouvez aussi changer d'utilisateur directement dans votre terminal.
kyane@europa:~$ su sarah
Mot de passe :
sarah@europa:/home/kyane$
La commande su
(pour Substitute User) permet de se substituer à un autre utilisateur, et donc de se connecter sous cet utilisateur (en utilisant son mot de passe bien entendu). D'ailleurs si vous avez les privilèges super-administrateur, vous pouvez même utiliser su
sans avoir besoin du mot de passe de l'utilisateur, par exemple en faisant sudo su sarah
. Le super-utilisateur est donc super-puissant (désolé) comme il peut se faire passer pour n'importe qui !
À retenir
Les utilisateurs sont configurés dans le fichier /etc/passwd
, mais il est possible et préférable d'utiliser les commandes adduser
et deluser
pour les manipuler.
Appliquer la notion
Créer des utilisateurs
On souhaite créer 2 utilisateurs sur la machine, alice et bob, mais avec certains contraintes :
alice aura pour UID
1234
le dossier d'utilisateur de bob sera
/usr/etc/bob
Pour le reste, la description des utilisateurs est libre.
Créez les 2 utilisateurs sur votre machine.
Il va sans doute falloir lire le manuel de la commande adduser
.
En lisant le manuel (avec man adduser
) on se rend compte qu'il est possible d'utiliser une option --home
pour choisir le chemin du dossier utilisateur et --uid
pour choisir son UID. On utilise donc les 2 commandes suivantes :
sudo adduser --home /usr/etc/bob bob
sudo adduser --uid 1234 alice
On peut vérifier que cela a bien fonctionné en regardant le fichier /etc/passwd
bob:x:1001:1001:,,,:/usr/etc/bob:/bin/bash
alice:x:1234:1234:,,,:/home/alice:/bin/bash
Supprimer les utilisateurs
Ces utilisateurs ne nous serviront plus par la suite, on peut donc simplement les supprimer.
Supprimez les deux utilisateurs en prenant soin à bien retirer leurs dossiers respectifs.
sudo deluser --remove-home alice
sudo deluser --remove-home bob
Configuration des groupes
Objectifs
Savoir trouver les informations de configuration des groupes
Savoir créer et supprimer des groupes
Savoir assigner des utilisateurs à des groupes
Le fichier /etc/group
Concernant les groupes, c'est le fichier /etc/group
qui est en charge de gérer leur configuration. Si on observe son contenu on constate qu'il a un format proche de /etc/passwd
.
$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:kyane
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:kyane
floppy:x:25:kyane
tape:x:26:
sudo:x:27:kyane
audio:x:29:pulse,kyane
Il contient en fait la liste des groupes de la machine, avec un format proche (ici l'aperçu qui est donné est volontairement tronqué, il y a sans doute plus de lignes dans votre fichier). Isolons la dernière ligne pour l'étudier.
audio:x:29:pulse,kyane
Les informations sont, ici aussi, séparées par des ":". Dans l'ordre nous avons :
le nom du groupe
audio
;un caractère "
x
" qui n'a, en fait, pas d'importance dans ce fichier ;le GID du groupe, ici 29 ;
la liste, séparée par des virgules, des utilisateurs faisant partie du groupe.
On peut donc lire la ligne suivante de cette manière : le groupe audio
a pour GID 29
et les utilisateurs pulse
et kyane
sont présents dans ce groupe.
Méthode : Créer un groupe
Mais si l'on souhaite grouper plusieurs utilisateurs dans un groupe, par exemple pour gérer leurs droits, on a besoin de créer un groupe. Pour cela un utilisateur, on utilise tout simplement la commande addgroup
.
kyane@europa:~$ sudo addgroup enfants
Ajout du groupe « enfants » (GID 1001)...
Fait.
On voit que la commande a créer un groupe nommé enfants
sur la machine. Le fichier /etc/group
a été modifié en conséquence.
enfants:x:1001:
Pour le moment notre groupe est complètement vide. Pour ajouter des utilisateurs à un groupe, on peut utiliser la commande usermod
. C'est une commande qui permet de modifier de nombreux attributs d'un utilisateur, ou même de le renommer. Nous n'allons pas nous intéresser à toutes les possibilités offertes par cette commande, mais uniquement à l'utilisation pour modifier les groupes d'un utilisateur.
Méthode : Modifier les groupes d'un utilisateur
À l'aide des option -aG
il est possible d'ajouter un groupe à un utilisateur.
sudo usermod -aG enfants roxane
L'utilisateur roxane
fait désormais partie du groupe enfants
. L'option G
permet d'indiquer qu'on modifie les groupes de l'utilisateur, et a
permet d'append (ajouter) un groupe. On peut le vérifier dans le fichier /etc/group
.
enfants:x:1001:roxane
roxane:x:1002:roxane
Méthode : Supprimer un groupe
De manière assez évidente, la commande delgroup
permet de supprimer un groupe.
kyane@europa:~$ sudo delgroup enfants
À retenir
Le fichier /etc/group
contient la configuration des groupes sur la machine, et les commandes addgroup
et delgroup
permettent de les manipuler. On utilise ensuite usermod
, en particulier avec ses options -aG
, pour modifier les groupes auxquels appartient un utilisateur.
Appliquer la notion
On souhaite créer 3 utilisateurs sur notre machine :
joe
paul
mike
On souhaite aussi avoir 2 groupes :
administrateurs
dont feront partiejoe
etpaul
utilisateurs
dont feront partiejoe
etmike
On fera en sorte que les 3 utilisateurs conservent leur groupe primaire d'origine.
Créez les 2 utilisateurs et groupes sur la machine
On commence par créer les 3 utilisateurs
sudo adduser paul
sudo adduser mike
sudo adduser joe
Puis on créé les 2 groupes.
sudo addgroup administrateurs
sudo addgroup utilisateurs
Enfin on assigne les bons groupes.
sudo usermod -aG administrateurs paul
sudo usermod -aG administrateurs,utilisateurs joe
sudo usermod -aG utilisateurs mike
Pour valider, on doit retrouver les lignes suivantes dans les fichiers /etc/passwd
et /etc/group
.
joe:x:1001:1001:,,,:/home/joe:/bin/bash
mike:x:1002:1002:,,,:/home/mike:/bin/bash
paul:x:1003:1003:,,,:/home/paul:/bin/bash
joe:x:1001:joe
mike:x:1002:mike
paul:x:1003:paul
administrateurs:x:1004:joe,paul
utilisateurs:x:1005:joe,mike
Affichage des droits sous Linux (ls -al)
Sous Linux, chaque dossier et chaque fichier :
appartient à un utilisateur et à un groupe ;
possède des droits.
Ces droits se divisent en trois :
Les droits pour l'utilisateur propriétaire
Les droits pour les utilisateurs membres du groupe propriétaire
Les droits pour tous les autres utilisateurs
Fondamental : ls -al
La commande ls -al
affiche tous les fichiers et dossiers d'un répertoire, avec leurs propriétaires et leurs droits.
drwxr-x--- 3 stc friends 4096 mars 31 19:11 .dir
Le premier caractère indique que l'élément est un dossier (d) ou un fichier (-).
Les trois caractères suivants indiquent les droits de l'utilisateur propriétaire (ici stc a les droits rwx : lire, écrire, parcourir)
Les trois caractères suivants indiquent les droits des utilisateur membres du groupe propriétaire (ici les membres de friends ont les droits r-x : lire et parcourir, mais pas écrire)
Les trois caractères suivants indiquent les droits des autres utilisateurs (ici --- : aucun droit)
Le nombre suivant indique le nombre de sous-dossiers dans le dossier listé (ici .dir a 3 sous-dossiers, dont . et .. donc un seul vrai sous-dossier)
La chaîne suivante indique l'utilisateur propriétaire (ici l'utilisateur stc)
La chaîne suivante indique le groupe propriétaire (ici le groupe friends)
Le nombre suivant indique la taille de l'élément en octets (ici 4096 octets)
La chaîne suivante indique la date et l'heure de dernière modification du fichier (ici le 31 mars à 19h11)
La dernière chaîne est le nom du fichier (ici .dir)
Exemple :
-rw------- 1 root root 2048 mars 31 19:11 .config
drwx------ 2 stc stc 4096 avril 3 20:25 firefox
-rw-rw-r-- 1 stc www 31691 avril 2 10:11 test.jpg
Le fichier .config appartient à l'utilisateur root et au groupe root (il y a souvent un utilisateur et un groupe de même nom) ; l'utilisateur root peut le lire et le modifier, personne d'autre ne peut y accéder.
Le dossier firefox appartient à l'utilisateur stc et au groupe stc ; l'utilisateur stc peut y accéder, le lire et le modifier, personne d'autre ne peut y accéder.
Le fichier test.jpg appartient à l'utilisateur stc et au groupe www ; l'utilisateur stc ainsi que les membres du groupe www peuvent le lire et le modifier, les autres utilisateurs peuvent seulement le lire.
Fondamental : Les droits rwx
r (read) : lire le contenu d'un fichier (exécuter more par exemple) ou d'un dossier (ls)
w (write) : écrire un fichier (nano), écrire dans un dossier (touch)
x (execute) : exécuter un fichier, entrer dans un dossier (cd)
Appliquer la notion
On se demande quels sont les droits par défaut d'un fichier que l'on vient de créer sur notre machine.
Comment obtenir cette information ?
On peut tout simplement créer un fichier avec touch
et regarder les droits avec ls -l
.
Quels sont les droits par défaut pour le propriétaire ? Pour le groupe ? Pour les autres utilisateurs ?
Le fichier créé a les droits suivants :
kyane@europa:~$ ls -l test.txt
-rw-r--r-- 1 kyane kyane 0 4 déc. 15:48 test.txt
Par défaut le propriétaire est le créateur du fichier, et son groupe est le groupe primaire du créateur.
Le propriétaire a les droits de lecture et écriture.
Le groupe a uniquement les droits de lecture.
Les autres utilisateurs ont aussi les droits de lecture par défaut.
Gestion des droits sous Linux
Rappel :
Fondamental : chmod
La commande chmod
permet de modifier l'attribution des droits d'un fichier ou d'un dossier. Pour cela on ressort d'un côté nos trois types d'utilisateurs : le user propriétaire u
, le group propriétaire g
et les others o
, et d'un autre côté les trois droits read, write et execute.
On donne a chmod
les modifications que l'on souhaite apporter puis la liste des fichiers/dossiers auquel l'appliquer. Une modification de droit est décrite par [usertype][action][permissions]
où :
usertype
estu
g
ouo
(oua
pour all)action
est+
-
ou=
pour ajouter, retirer ou fixer des permissionspermissions
estr
w
oux
Exemple :
$ ls -l index.html
-rw-rw---- 1 antoine antoine 8578 janv. 22 09:34 index.html
$ chmod a=r index.html
$ ls -l index.html
-r--r--r-- 1 antoine antoine 8578 janv. 22 09:34 index.html
$ chmod +x index.html
$ ls -l index.html
-r-xr-xr-x 1 antoine antoine 8578 janv. 22 09:34 index.html
$ chmod o-rx index.html
$ ls -l index.html
-r-xr-x--- 1 antoine antoine 8578 janv. 22 09:34 index.html
Alternativement, les administrateurs système hirsutes préfèrent attribuer 3 nombres de 0 à 7 correspondant aux 3 types d'utilisateurs tel que :
r vaut 4, w vaut 2, x vaut 1 (ce sont des puissances de 2 pour ceux qui voudraient une petite explication de comment ça marche n'hésitez pas !) ;
on somme les droits que l'on veut cumuler.
Ainsi on peut régler tous les droits de tous les types d'utilisateurs d'un coup mais c'est moins intuitif.
Exemple :
chmod 640 file
donne les droits rw (4+2) à user, r (4) à group et aucun droit (0) à others.chmod 775 file
donne les droits rwx (4+2+1) à user et group et rx (4+1) à others.
Méthode : Droits courant pour un fichier (non exécutable)
chmod 666 file
(fichier non exécutable public)chmod 644 file
(fichier non exécutable public, modifiable par soi uniquement)chmod 600 file
(fichier privé)chmod 400 file
(fichier privé en lecture seule)chmod 444 file
(fichier public en lecture seule)
Droits courant pour un dossier (et de son contenu)
chmod 777 dir
(dossier public)
chmod 755 dir
(dossier public, modifiable par soi uniquement)
chmod 700 dir
(dossier privé)
chmod 500 dir
(dossier privé en lecture seule)
chmod 555 dir
(dossier public en lecture seule)
Complément : chmod -R Changer les droits de tout un répertoire
chmod -R XXX dir
affecte les droit XXX à dir et à tous les fichiers et sous-dossiers de dir (récursivement).
Complément : chown : Changer les propriétaires d'un fichier
chown user:group target
permet de donner la propriété de target à l'utilisateur user et au groupe group.
Appliquer la notion
On reprends les utilisateurs et groupes créés un peu plus tôt, avec les commandes suivantes. On considère que toutes les commandes sont lancées en root
.
adduser paul
adduser mike
adduser joe
addgroup administrateurs
addgroup utilisateurs
usermod -G paul,administrateurs paul
usermod -G joe,administrateurs,utilisateurs joe
usermod -G mike,utilisateurs mike
Dans le dossier /home/joe
créez :
un fichier nommé
README
que seuljoe
pour modifier, mais que tout le monde pourra lireun dossier nommé
admin
accessible en lecture et écriture a toutes les personnes du groupeadministrateurs
, et à personne d'autreun fichier dans le dossier
admin
nommésecret.txt
que seul seuls les membres du groupeadministrateurs
pourront lire et modifier
On commence par créer (en root
) les dossiers et fichiers.
mkdir /home/joe/admin
touch /home/joe/README /home/joe/admin/secret.txt
Puis on attribue les bons propriétaires et groupes.
chown joe:joe /home/joe/README
chown joe:administrateurs /home/joe/admin
chown joe:administrateurs /home/joe/admin/secret.txt
Enfin on configuré correctement les droits d'accès.
chmod 644 /home/joe/README
chmod 770 /home/joe/admin
chmod 660 /home/joe/admin/secret.txt
On peut ensuite observer la bonne configuration des droits.
root@europa:~# ls -l /home/joe/README
-rw-r--r-- 1 joe joe 0 4 déc. 16:10 /home/joe/README
root@europa:~# ls -la /home/joe/admin
total 8
drwxrwx--- 2 joe administrateurs 4096 4 déc. 16:10 .
drwxr-xr-x 3 joe joe 4096 4 déc. 16:10 ..
-rw-rw---- 1 joe administrateurs 0 4 déc. 16:10 secret.txt
Quiz
Quiz - Culture
Qu'est-ce que le groupe primaire d'un utilisateur Linux ?
Le dernier groupe dans lequel il vient d'être ajouté
Le groupe principal dans lequel il se trouve, généralement attribué à la création de l'utilisateur
Le groupe qu'il partage avec l'utilisateur root
Qu'est-ce qu'un UID ?
Un identifiant unique associé à la machine
Un identifiant associé à un groupe d'utilisateur
Un identifiant associé à un utilisateur
Par défaut il est conseillé d'utiliser tout le temps l'utilisateur root
pour administrer la machine.
Vrai
Faux
Dans quel fichier est-il possible de trouver la configuration des utilisateurs de la machine ?
/etc/passwd
/root/passwd
/root/users
/etc/users
Quiz - Méthode
Pour créer un groupe sur Linux, on préfère :
utiliser la commande addgroup
utiliser la commande groupadd
modifier le fichier /etc/group
Pour lancer une commande avec les privilèges super-utilisateur, quelles sont les différentes possibilités ?
Me connecter avec l'utilisateur root
au démarrage
Utiliser la commande sudo -i
pour ouvrir un terminal root
puis lancer ma commande
Lancer la commande sudo MACOMMANDE
Utiliser la commande root MACOMMANDE
Si je souhaite donner l'accès à un fichier à plusieurs utilisateurs précis.
Il faut donner des droits en lecture à tout les utilisateurs du système
Ce n'est pas possible
Il faut ajouter les utilisateurs en question dans un groupe et donner les droits de lecture de notre fichier à ce groupe
Quiz - Code
Quelles sont les affirmations vraies pour un fichier dont ls -l
affiche les informations suivantes ? drwxrwxr-x
Il s'agit d'un dossier
Seul le propriétaire a des droits d'écriture
Tout les utilisateurs peuvent le lire
Il n'est associé à aucun groupe
Quels sont les droits que l'on s'attend à avoir si l'on fait la commande chmod 640
?
rwxrw----
rw-rw----
r-xr-----
rw-r-----
Quiz - Culture
Qu'est-ce que le groupe primaire d'un utilisateur Linux ?
Le dernier groupe dans lequel il vient d'être ajouté
Le groupe principal dans lequel il se trouve, généralement attribué à la création de l'utilisateur
Le groupe qu'il partage avec l'utilisateur root
Qu'est-ce qu'un UID ?
Un identifiant unique associé à la machine
Un identifiant associé à un groupe d'utilisateur
Un identifiant associé à un utilisateur
Par défaut il est conseillé d'utiliser tout le temps l'utilisateur root
pour administrer la machine.
Vrai
Faux
Au contraire, il vaut mieux n'utiliser les privilèges de super-utilisateur que lorsque c'est nécessaire.
Dans quel fichier est-il possible de trouver la configuration des utilisateurs de la machine ?
/etc/passwd
/root/passwd
/root/users
/etc/users
Quiz - Méthode
Pour créer un groupe sur Linux, on préfère :
utiliser la commande addgroup
utiliser la commande groupadd
modifier le fichier /etc/group
On évite généralement de modifier directement le fichier
/etc/group
.La commande
addgroup
est plus facile à utiliser, mais elle n'est pas disponible sur tous les Linux.La commande
groupadd
est moins ergonomique mais elle est toujours disponible.
Pour lancer une commande avec les privilèges super-utilisateur, quelles sont les différentes possibilités ?
Me connecter avec l'utilisateur root
au démarrage
Utiliser la commande sudo -i
pour ouvrir un terminal root
puis lancer ma commande
Lancer la commande sudo MACOMMANDE
Utiliser la commande root MACOMMANDE
Me connecter avec l'utilisateur root
au démarrage
Ce n'est pas une pratique conseillée, mais certaines installations permettent au compte root
de se connecter au démarrage.
Utiliser la commande sudo -i
pour ouvrir un terminal root
puis lancer ma commande
Lancer la commande sudo MACOMMANDE
Utiliser la commande root MACOMMANDE
Si je souhaite donner l'accès à un fichier à plusieurs utilisateurs précis.
Il faut donner des droits en lecture à tout les utilisateurs du système
Ce n'est pas possible
Il faut ajouter les utilisateurs en question dans un groupe et donner les droits de lecture de notre fichier à ce groupe
Quiz - Code
Quelles sont les affirmations vraies pour un fichier dont ls -l
affiche les informations suivantes ? drwxrwxr-x
Il s'agit d'un dossier
Seul le propriétaire a des droits d'écriture
Tout les utilisateurs peuvent le lire
Il n'est associé à aucun groupe
Le caractère "d
" au début indique que c'est un dossier, et on constate que le groupe a les droits rwx
, donc qu'il n'y a pas que le propriétaire qui a des accès en écriture. Les droits pour tout les utilisateurs r-x
indique que le dossier est accessible à tout le monde.
Quels sont les droits que l'on s'attend à avoir si l'on fait la commande chmod 640
?
rwxrw----
rw-rw----
r-xr-----
rw-r-----
Si l'on décompose les droits appliqués
6
signifie lecture et écriture (4+2) doncrw-
pour le propriétaire4
signifie lecture doncr--
pour le groupe0
signifie aucun droits donc---
pour les autres utilisateurs