![Qual é a relação entre raiz e kernel?](https://rvso.com/image/52099/Qual%20%C3%A9%20a%20rela%C3%A7%C3%A3o%20entre%20raiz%20e%20kernel%3F%20.png)
Com base em parte da primeira resposta deesta pergunta:
ler de um arquivo (o kernel deve verificar se as permissões permitem que você leia o arquivo e então o kernel executa as instruções reais para o disco para ler o arquivo)
É necessário ter privilégios de root para alterar a permissão de um arquivo. Com privilégio de root, o usuário pode acessar qualquer arquivo sem se preocupar com permissão. Então, há alguma relação entre root e kernel?
Responder1
Primeiro, um esclarecimento:
É necessário ter privilégios de root para alterar a permissão de um arquivo.
Dehomem 2 chmodpodemos ver que a chamada do sistema chmod() retornará EPERM (um erro de permissão) se:
O UID efetivo não corresponde ao proprietário do arquivo e o processo não é privilegiado (Linux: não possui o recurso CAP_FOWNER).
Isso normalmente significa que vocêqualquerprecisa ser o proprietário do arquivo ou o usuário root. Mas podemos ver que a situação no Linux pode ser um pouco mais complicada.
Então, há alguma relação entre root e kernel?
Como o texto que você citou apontou, o kernel é responsável por verificar se o UID do processo que faz uma chamada do sistema (ou seja, o usuário como ele está sendo executado) tem permissão para fazer o que está solicitando. Assim, os superpoderes do root vêm do fato do kernel ter sido programado para sempre permitir uma operação solicitada pelo usuário root (UID=0).
No caso do Linux, a maioria das várias verificações de permissões que ocorrem verificam se o UID fornecido possui o necessáriocapacidade. O sistema de capacidades permite um controle mais refinado sobre quem tem permissão para fazer o quê.
No entanto, para preservar o significado tradicional do UNIX do usuário "root", um processo executado com o UID 0 possui todos os recursos.
Observe que embora os processos executados como UID=0 tenham privilégios de superusuário, eles ainda precisam fazer solicitações ao kernel por meio da interface de chamada do sistema.
Assim, um processo do espaço do usuário, mesmo rodando como root, ainda é limitado no que pode fazer enquanto está rodando em "modo de usuário"e o kernel está rodando em"modo kernel"que são, na verdade, modos de operação distintos para a própria CPU. No modo kernel, um processo pode acessar qualquer memória ou emitir qualquer instrução. No modo de usuário (em CPUs x86, existem vários modos protegidos diferentes), um processo só pode acessar sua própria memória e só pode emitir algumas instruções. Assim, um processo de espaço de usuário executado como root ainda tem acesso apenas aos recursos do modo kernel que o kernel expõe a ele.