Como um sistema operacional impede que um processo não privilegiado 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.
  • Informações sobre permissões talvez estejam em algum lugar na memória secundária. Portanto, emitiria uma instrução de gravação.
  • Antes de 2, ele verificaria se o usuário tem o privilégio de fazer isso. Se ele não estiver, apenas emitirá uma mensagem de erro.

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

aprendiz
fonte

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) vê que o processo que chama a chamada do sistema não possui permissões suficientes para executar a operação no objeto do sistema de arquivos e a chamada do sistema retorna com um erro de permissão.

Ignacio Vazquez-Abrams
fonte
5

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

  1. Como um sistema operacional impede que um processo não privilegiado execute uma instrução privilegiada?
  2. Por que um processo não privilegiado não pode ser chamado chmod 777 /?

Resposta para 2:

chmodinvoca internamente uma função da libc (convenientemente também chamada chmod()). Esta função verifica se o chamador possui privilégios suficientes para a operação - caso contrário, retorna erro EPERM.

A resposta para 1 é mais interessante:

O mecanismo exato depende da plataforma do sistema operacional e do 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 essas instruções privilegiadas". Portanto, o próprio processador aplicará a restrição nas 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 encerrará o programa com comportamento inadequado. Para detalhes, consulte, por exemplo, https://en.wikipedia.org/wiki/Ring_%28computer_security%29

sleske
fonte