Como um sistema operacional impede que um processo sem privilégios execute uma instrução privilegiada?

8

No Unix,

se você é um usuário convidado e fez:

chmod 777 /

Isso falharia.

Mas como isso acontece internamente no nível do hardware?

Até agora, acho que é isso que acontece:

  • O sistema operacional tenta executar essa instrução.
  • As informações sobre permissões talvez estejam em algum lugar na memória secundária. Então, seria emitir uma instrução de escrita.
  • Antes de 2, Verificaria se o usuário tem o privilégio de fazer isso. Se ele não é, seria apenas uma mensagem de erro.

É assim que acontece, ou é uma interrupção levantada quando tal situação surge? Existe uma rotina na tabela ISR na memória principal correspondente a instruções não privilegiadas?

    
por learner 02.02.2014 / 16:47

2 respostas

10

chmod é uma operação do sistema de arquivos , não uma instrução privilegiada. As permissões do sistema de arquivos não são tratadas no nível do hardware. O software (especificamente o sistema operacional) considera que o processo que invoca a chamada do sistema não possui permissões suficientes para executar a operação. objeto do sistema de arquivos e a chamada do sistema retorna com um erro de permissão.

    
por 02.02.2014 / 18:49
5

Na verdade, você está fazendo duas perguntas diferentes:

  1. Como um sistema operacional impede que um processo sem privilégios execute uma instrução privilegiada?
  2. Por que um processo não privilegiado não pode invocar chmod 777 / ?

Responder por 2:

chmod invoca internamente uma função da libc (convenientemente também chamada chmod() ). Esta função verifica se o chamador tem privilégios suficientes para a operação - se não, ele retornará o erro EPERM .

A resposta para 1 é mais interessante:

O mecanismo exato depende do SO e da plataforma de hardware, mas basicamente é assim: Todos os processadores modernos possuem recursos de segurança integrados. Isso permite que o sistema operacional informe ao processador: "execute este programa, mas não permita que ele execute estas instruções privilegiadas". Assim, o próprio processador aplicará a restrição às instruções permitidas. Se o programa tentar executar uma instrução privilegiada, o processador passará o controle de volta para o sistema operacional, o que normalmente terminará com o programa mal-comportado. Para detalhes, veja por exemplo link

    
por 02.02.2014 / 22:33