Permissões do Linux UID 0 vs Anel 0

Permissões do Linux UID 0 vs Anel 0

Estou estudando para um exame de segurança de computadores e estou lutando para entender o exemplo de pergunta a seguir.

'Explique a diferença entre executar no anel 0 em x86 e executar como UID 0 no Linux. Dê um exemplo de algo que cada um possibilita, mas o outro não.'

Meu entendimento atual é que o anel 0 no x86 é o nível de sistema operacional mais privilegiado e que o código do kernel é executado no anel 0. UID 0 é o superusuário do Linux que pode essencialmente executar qualquer coisa. Com minha compreensão atual desses conceitos, não entendo como responder a essa pergunta.

Observe que esta NÃO é uma questão de dever de casa e NÃO é algo em que receberei nota, é apenas material de estudo.

Responder1

Seu entendimento está correto. “Ring 0” é o termo x86 para o modo kernel do processador. “Executando no anel 0” significa “código do kernel”.

Em termos de segurança, tudo o que pode ser feito por um processo (sob qualquer UID) pode ser feito pelo kernel. Algumas coisas são muito inconvenientes de se fazer no código do kernel, por exemplo, abrir um arquivo, mas são possíveis.

Por outro lado, em circunstâncias normais, se você puder executar o código no UID 0, poderá executar o código do kernel carregando um módulo do kernel. Portanto, não há barreira de segurança entre o UID 0 e o nível do kernel em uma configuração típica. No entanto, o código executado em um processo ainda está sujeito às limitações do modo de usuário do processador: todo acesso a um periférico (incluindo discos, rede, etc.) ainda precisa ser feito por meio de uma chamada de sistema. É possível configurar uma máquina para ter um UID 0 que não seja totalmente poderoso, por exemplo:

  • Desative o carregamento de módulos do kernel.
  • Use umestrutura de segurançacomoSELinuxpara retirar privilégios de um processo: o UID 0 não necessariamente os supera, por exemplo, é possível criar uma conta de convidado com o UID 0, mas essencialmente sem privilégios com a política SELinux correta.
  • UID 0 em umespaço para nome do usuáriosó tem as permissões do criador do namespace.

informação relacionada