Utilisateurs et droits sous Linux

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éfinitionUID 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éthodeLa 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.

FondamentalSuper-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éthodeUne 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é.

AttentionWith 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.

AttentionManipuler 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éthodeCré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éthodeSupprimer 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émentChanger 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éthodeCré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éthodeModifier 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éthodeSupprimer 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 partie joe et paul

  • utilisateurs dont feront partie joe et mike

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 :

  1. Les droits pour l'utilisateur propriétaire

  2. Les droits pour les utilisateurs membres du groupe propriétaire

  3. Les droits pour tous les autres utilisateurs

Fondamentalls -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.

FondamentalLes 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

Fondamentalchmod

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 est u g ou o (ou a pour all)

  • action est + - ou = pour ajouter, retirer ou fixer des permissions

  • permissions est r w ou x

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 :

  1. 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 !) ;

  2. 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éthodeDroits 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émentchmod -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émentchown : 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 seul joe pour modifier, mais que tout le monde pourra lire

  • un dossier nommé admin accessible en lecture et écriture a toutes les personnes du groupe administrateurs, et à personne d'autre

  • un fichier dans le dossier admin nommé secret.txt que seul seuls les membres du groupe administrateurs 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) donc rw- pour le propriétaire

  • 4 signifie lecture donc r-- pour le groupe

  • 0 signifie aucun droits donc --- pour les autres utilisateurs

Commandes de bases sous Linux : cd, ls, mkdir, rm, find, cat, nano...

Le manuel !

La commande man permet d'afficher le manuel d'une autre commande.

Par exemple man ls permet d'afficher les option de la commande ls, et man man est l'affichage du manuel du manuel.

Organisation des fichiers

Les fichiers sont organisés sous Linux dans des dossiers (ou répertoires) arborescents (il n'y a pas de notion de disques).

Le premier de ces dossiers, appelé racine, est /.

Des fils courants de racines sont :

  • /bin qui contient des programmes du systèmes ;

  • /home qui contient les données des utilisateurs ;

  • /tmp qui contient des données volatiles accessibles à tous.

Gestion de fichiers
  • pwd savoir où je me situe dans l'arborescence

  • cd aller quelque part dans l'arborescence

    • cd /home aller dans /home (déplacement absolu)

    • cd me aller dans le répertoire me fils de mon répertoire courant (déplacement relatif)

    • cd .. remonter dans l'arborescence (déplacement vers son père)

    • cd ~ permet de retourner dans son dossier initial (retour au domicile)

  • ls voir les fichiers et dossiers dans mon dossier actuel (sauf les fichiers cachés commençant par un .)

  • ls -al voir tous les fichiers et dossiers dans mon dossier actuel avec leurs informations associées (vue détaillée)

  • touch file créer un fichier file

  • rm file supprimer le fichier file dans mon dossier actuel

  • mkdir dir créer un nouveau dossier dir dans mon dossier actuel

  • rm * supprimer tous les fichiers de mon dossier actuel

  • rm -R dir supprimer le dossier dir dans mon dossier actuel

  • cat file afficher le contenu du fichier file

  • more afficher le contenu du fichier file en mode paginé

  • less afficher le contenu du fichier file en mode défilement

Édition de fichiers
  • nano file

    • Éditeur dans le terminal (simple d'utilisation)

    • Les commandes sont indiqués en bas de l'éditeur

  • gedit file &

    • Éditeur graphique

    • Utiliser une extension de fichier standard ou le menu Affichage > Mode de coloration pour obtenir une visualisation adapté au type de fichier édité (par exemple .sql pour un fichier SQL)

Rechercher un fichier
  • find / -name '*test*' permet de rechercher un fichier contenant la chaîne test sur tout le disque

  • find ~ -name '*test*' permet de rechercher un fichier contenant la chaîne test dans son espace personnel

Agir en tant que root (su / sudo)

Un système Linux est généralement utilisé par plusieurs utilisateurs (ou user) identifiés par un compte.

Tous les système ont en commun le premier de ces utilisateurs : root, l'administrateur du système qui possède tous les droits.

Syntaxesu

Pour se connecter en tant qu'utilisateur root (et pouvoir faire les opérations qui lui sont réservées) : su root.

  • Le mot de passe de utilisateur root est demandé par le système.

Syntaxesudo

Pour exécuter une commande en tant que root sans changer d'user : sudo commande.

  • Le mot de passe de utilisateur lançant sudo est demandé par le système.

  • Seuls certains utilisateurs appelés sudoers ont le droit d'exécuter la commande sudo.

  • Pour ajouter un utilisateur dans la liste des sudoers, excéuté en tant que root (ou via un autre utilisateur sudoers) :

    • adduser user sudo (en tant que root)

    • sudo adduser user sudo (avec un utilisateur déjà membre des sudoers)

AttentionDebian (sudo)

Sous Debian la commande sudo n'est pas installée par défaut.

AttentionUbuntu (su)

Sous Ubuntu l'utilisateur root n'est pas actif et il n'est donc pas possible d'exécuter la commande su root. On peut en revanche utiliser sudo, l'utilisateur créé à l'installation est membre des sudoers.

Pour activer le compte root, il faut lui attribuer un mot de passe avec la commande : sudo passwd root.

ComplémentAgir en tant qu'un autre utilisateur

Pour agir en tant qu'utilisateur user, exécuter :

su user, ou su - user pour adopter l'environnement de user.

Installation d'applications sous Debian et Ubuntu (apt-get)

Pour installer une application exécuter la commande suivante en tant que root ou via sudo :

sudo apt-get install applications

ExempleInstaller virtualbox, lftp, cups-pdf, pdftk, dia, gimp et git
sudo apt-get install virtualbox lftp cups-pdf pdftk dia gimp git
ComplémentMaintenir le système à jour

Pour mettre le système à jour, exécuter les deux commandes suivantes en tant que root ou via sudo :

  1. sudo apt-get update

  2. sudo apt-get upgrade

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 :

  1. Les droits pour l'utilisateur propriétaire

  2. Les droits pour les utilisateurs membres du groupe propriétaire

  3. Les droits pour tous les autres utilisateurs

Fondamentalls -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.

FondamentalLes 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)

Liste des raccourcis clavier

Liste des fonctions de navigation et leurs raccourcis clavier correspondant :

  • Bloc Suivant : flèche droite, flèche bas, barre espace, page suivante, touche N
  • Bloc Précédent : flèche gauche, flèche haut, retour arrière, page précédente, touche P
  • Diapositive Suivante : touche T
  • Diapositive Précédente : touche S
  • Retour accueil : touche Début
  • Menu : touche M
  • Revenir à l'accueil : touche H
  • Fermer zoom : touche Échap.