Comment un système d'exploitation empêche-t-il un processus non privilégié d'exécuter une instruction privilégiée?

8

Sous Unix,

si vous êtes un utilisateur invité et que vous avez:

chmod 777 /

Cela échouerait.

Mais comment cela se produit-il en interne au niveau matériel?

Jusqu'à présent, je pense que c'est ce qui se passe:

  • L'OS essaie d'exécuter cette instruction.
  • Les informations sur les autorisations se trouvent peut-être quelque part dans la mémoire secondaire. Il émettrait donc une instruction d'écriture.
  • Avant 2, il vérifierait si l'utilisateur est autorisé à le faire. S'il ne l'est pas, il émettra simplement un message d'erreur.

Est-ce ainsi que cela se passe, ou une interruption est-elle déclenchée lorsqu'une telle situation se présente? Existe-t-il une routine dans la table ISR dans la mémoire principale correspondant à des instructions non privilégiées?

apprenant
la source

Réponses:

10

chmodest une opération de système de fichiers , pas une instruction privilégiée. Les autorisations du système de fichiers ne sont pas gérées au niveau matériel. Le logiciel (en particulier le système d'exploitation) voit que le processus appelant l'appel système ne dispose pas des autorisations suffisantes pour effectuer l'opération sur l'objet système de fichiers et l'appel système renvoie avec une erreur d'autorisation.

Ignacio Vazquez-Abrams
la source
5

En fait, vous posez deux questions différentes:

  1. Comment un système d'exploitation empêche-t-il un processus non privilégié d'exécuter une instruction privilégiée?
  2. Pourquoi un processus non privilégié ne peut-il pas être invoqué chmod 777 /?

Réponse pour 2:

chmodinvoque en interne une fonction de la libc (aussi appelée commodément chmod()). Cette fonction vérifie si l'appelant dispose de privilèges suffisants pour l'opération - sinon, elle renvoie une erreur EPERM.

La réponse pour 1 est plus intéressante:

Le mécanisme exact dépend du système d'exploitation et de la plate-forme matérielle, mais en gros, c'est comme ceci: tous les processeurs modernes ont des fonctionnalités de sécurité intégrées. Cela permet au système d'exploitation de dire au processeur: "exécutez ce programme, mais ne le laissez pas exécuter ces instructions privilégiées". Ainsi, le processeur lui-même appliquera la restriction sur les instructions autorisées. Si le programme essaie d'exécuter une instruction privilégiée, le processeur transmettra le contrôle au système d'exploitation, ce qui mettra généralement fin au programme incorrect. Pour plus de détails, voir par exemple https://en.wikipedia.org/wiki/Ring_%28computer_security%29

sleske
la source