TP 7 - Utilisateurs et autorisations

Accès privilégié

Le mode privilégié est le plus souvent activé en accédant à un compte d'utilisateur privilégié. Nous disons donc que sur un système, nous avons des comptes d'utilisateurs réguliers (utilisateurs réguliers) et des comptes d'utilisateurs privilégiés (utilisateur privilégié). L'utilisateur privilégié est aussi appelé administrateur, admin ou superutilisateur. Sous Linux, l'utilisateur privilégié est appelé root.

Un utilisateur ordinaire ne peut pas effectuer d'actions critiques ; seul l'utilisateur privilégié peut le faire. Par conséquent, nous devrons accéder à l'utilisateur privilégié pour effectuer des actions critiques.

Exercice : actions privilégiées

Effectuez les actions suivantes à partir du compte d'utilisateur régulier et voyez qui a besoin d'un accès privilégié. Expliquez pourquoi certains ont besoin d'un accès privilégié.

  • touch /home/student/a.txt
  • apt install strace
  • ip address show
  • cat /etc/passwd
  • cat /etc/shadow
  • touch /etc/test.conf
  • touch /tmp/my.data
  • service ssh restart
  • dmesg
  • dmesg -c

Redirection avec sudo

Supposons qu'il y ait une situation où nous voulons écrire des informations dans un fichier. Disons que nous voulons écrire les informations All for the empire dans le fichier /home/student/zealot.txt. Nous avons deux options :

  1. Nous éditons le fichier en utilisant nano /home/student/zealot.txt, écrivons les informations All for the empire* puis sauvegardons
  2. Nous utilisons la commande echo “All for the empire” > /home/student/zealot.txt.

Si nous choisissons un fichier auquel l'utilisateur actuel n'a pas accès, l'intuition serait de préfixer les commandes ci-dessus avec sudo. Autrement dit, dans le cas du fichier /etc/zealot.txt, nous effectuerions les actions :

  1. Nous éditons le fichier en utilisant sudo nano /etc/zealot.txt, écrivons les informations All for the empire puis sauvegardons.
  2. Utilisation d'un processus shell privilégié.
  3. Utilisation d'une commande précédée de la commande sudo pour ouvrir le fichier /etc/zealot.txt sans redirection. De cette façon, le fichier sera ouvert en mode privilégié.

Pour la deuxieme variante:

student@uso:~$ sudo su
root@uso:/home/student# echo "All for the empire" > /etc/zealot.txt

Dans cette situation, la deuxième commande est exécutée avec les autorisations du compte privilégié (racine).

Pour la troisième variante, on peut utiliser la commande tee qui reçoit en argument un fichier dans lequel écrire des informations. Le préfixe avec sudo entraînera l'exécution de la commande tee en mode privilégié, c'est-à-dire qu'il ouvrira également /etc/zealot.txt en mode privilégié. La commande utilisée est :

student@uso:~$ echo "All for the empire" | sudo tee /etc/zealot.txt
All for the empire

La commande tee a pour effet d'écrire les informations dans le fichier reçu en argument et sur la sortie standard. C'est pourquoi le message All for the empire apparaît également dans le fichier /etc/zealot.txt et sur la sortie standard.

La commande tee en mode ajout.

Dans le formulaire par défaut ci-dessus, la commande tee écrase le contenu du fichier reçu en argument. Si nous voulons ajouter du contenu au fichier (append), nous utilisons l'option -a de la commande tee :

student@uso:~$ echo "All for the empire" | sudo tee -a /etc/zealot.txt

Shell privilégiée

Souvent, nous souhaitons effectuer plusieurs actions critiques, sous la forme d'exécution de plusieurs commandes. Le moyen le plus simple consiste à utiliser un processus shell qui s'exécute en mode privilégié.

Comme nous l'avons vu plus haut, nous utilisons la commande sudo su pour obtenir un shell privilégié :

student@uso:~$ sudo su
root@uso:/home/student#

Une autre façon d'obtenir un shell root consiste à utiliser la commande sudo bash, avec les mêmes effets que ci-dessus :

student@uso:~$ sudo bash
root@uso:/home/student#

Les deux commandes (sudo su, respectivement sudo bash) conduisent à exécuter certaines commandes en mode privilégié : la commande su est exécutée en mode privilégié, la commande bash est exécutée en mode privilégié. L'effet est de créer un processus shell Bash qui s'exécute en tant que privilégié ; et donc un shell dans lequel nous pouvons exécuter des commandes privilégiées.

Pour fermer le processus shell exécuté en mode privilégié, nous utilisons les commandes habituelles pour fermer le shell : exit, logout ou la combinaison de touches Ctrl+d. Une fois le processus shell privilégié terminé, nous reviendrons au processus shell d'origine.

Exercices : Shell privilégiée
  1. Utilisez les commandes sudo su et sudo bash tour à tour pour obtenir un shell privilégié. Utilisez ensuite la commande exit ou la commande logout ou la combinaison de touches Ctrl+d pour fermer le shell actuel.
  2. Utilisez la commande sudo su pour obtenir un shell privilégié. Dans le nouveau shell privilégié, utilisez la commande sudo su pour obtenir un nouveau shell privilégié. Utilisez deux instances de commandes de sortie du shell (exit ou logout ou Ctrl+d) pour revenir au shell d'origine (non privilégié).

Identification de l'utilisateur

L'invite du shell est configurable et peut ne pas fournir d'informations sur l'utilisateur actuel. Pour des raisons de sécurité, nous utilisons des commandes dédiées pour identifier l'utilisateur actuel.

whoami

La commande la plus directe, pour afficher le nom de l'utilisateur courant (username), est la commande whoami :

student@uso:~$ whoami
student
student@uso:~$ sudo whoami
root

L'exécution de la commande whoami affiche l'utilisateur actuel (student). Le préfixe de la commande avec sudo entraîne l'affichage du nom de l'utilisateur privilégié (root).

id

Une commande qui permet d'afficher des informations sur les utilisateurs est la commande id. Une simple utilisation de la commande affiche des informations détaillées sur l'utilisateur actuel :

student@uso:~$ id
uid=1000(student) gid=1000(razvan) groups=1000(student),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),128(kvm),130(docker)

Pour l'utilisateur actuel, il affiche :

  • l'identifiant de l'utilisateur (user id, uid), une valeur numérique, ici 1000
  • nom d'utilisateur, la chaîne que nous utilisons, ici student
  • l'identifiant du groupe de l'utilisateur (group id, gid) et le nom du groupe (group name), ici 1000 et étudiant (l'égalité de l'identifiant de l'utilisateur et du nom de l'utilisateur peut être considérée comme une coïncidence)
  • autres groupes auxquels l'utilisateur appartient (groupes)

Les informations relatives à l'identifiant et au nom d'utilisateur sont pertinentes à ce stade. L'identifiant d'utilisateur (UID) est utilisé par le système d'exploitation pour vérifier les autorisations. Le nom d'utilisateur est utilisé par nous, les humains, qui se souviennent plus facilement des chaînes / noms au lieu des chiffres. Il en va de même pour les processus : le système d'exploitation les identifie par un numéro appelé PID (process identifier).

Tout utilisateur possède un identifiant (pour le système d'exploitation) et un nom (pour les humains). Typiquement, le premier utilisateur régulier (non privilégié) sur un système Linux a l'identifiant 1000 ; c'est le cas de l'utilisateur étudiant ci-dessus.

Nous pouvons également utiliser la commande id pour afficher des informations sur les autres utilisateurs du système, par exemple sur l'utilisateur privilégié (root) :

razvan@uso:~$ id root
uid=0(root) gid=0(root) groups=0(root)
 
razvan@uso:~$ id -u root
0
 
razvan@uso:~$ id -un 0
root

Lors de la première exécution de la commande, j'ai affiché des informations sur l'utilisateur root. L'utilisateur a l'UID 0 ; c'est ainsi qu'il est reconnu par le système d'exploitation. Fondamentalement, le nom root est une convention ; ce qui privilégie un processus est la présence de l'UID 0 comme attribut de processus.

Nous pouvons afficher uniquement l'UID d'un utilisateur en utilisant l'option -u de la commande id, comme dans la deuxième commande ci-dessus. De même, nous pouvons afficher uniquement le nom correspondant à un UID en utilisant l'option -un, comme dans la troisième commande ci-dessus.

Exercices : Identification des utilisateurs
  1. Obtenez une shell privilégiée. Utilisez les commandes whoami et id pour afficher des informations sur l'utilisateur actuel (root). Utilisez la commande id pour afficher l'ID de votre utilisateur.
  2. À partir d'un shell de n'importe quel type (privilégié ou non privilégié), lancez :
    • L'UID de l'utilisateur daemon.
    • L'UID de l'utilisateur syslog.
    • Nom d'utilisateur avec UID 100.
    • Nom d'utilisateur avec UID 2.
  3. Créez le répertoire noms_de_users, et à l'intérieur un fichier nommé users.txt. Écrivez-y le nom de l'utilisateur actuel et l'UID de l'utilisateur syslog, en utilisant les redirections et les commandes whoami et id.

Ces utilisateurs sont des utilisateurs du système, non interactifs - c'est-à-dire qu'ils ne sont pas des utilisateurs avec lesquels nous pouvons nous connecter au système.

sde2/laboratoare/07_uso.txt · Last modified: 2023/05/15 20:53 by cristiana.andrei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0