Permissões de arquivo: kernel ou sistema de arquivos?

1

Quando dizemos "permissões de arquivo" estamos nos referindo a algo que está dentro do kernel, ou uma função do sistema de arquivos? Qual camada determina onde essas permissões são armazenadas. Estou confuso em que nível existem permissões de arquivo. Alguém pode ajudar a esclarecer o limite?

Eu sei como chown chmod funcionam na Perspectiva do usuário, mas não sei como estão implementados ou o que realmente gera o erro "Permissão negada"

touch foo
chmod 000 foo
cat foo
cat: foo: Permission denied

Alguém pode me guiar pelo processo de como o kernel, o sistema de arquivos, o io e os bits se encaixam nessa sequência acima?

    
por Evan Carroll 12.05.2018 / 00:56

1 resposta

1

A melhor resposta de uma palavra para esta questão é tanto como mu .

No projeto do sistema operacional Unix, a funcionalidade do sistema de arquivos é fornecida pelo kernel. Assim, as permissões de arquivo vêm do kernel e são aplicadas pelo kernel.

Dentro do kernel, há um subsistema que lida com os acessos aos arquivos. Permissões são aplicadas por esse subsistema. Os subsistemas não têm um limite claramente definido, são uma construção humana para entender a estrutura do sistema. Na verdade, é útil separar a parte do kernel que manipula os acessos aos arquivos em duas partes:

  • o sistema de arquivos virtual (VFS), que manipula acessos do aplicativo e analisa caminhos;
  • drivers de sistema de arquivos individuais, que gerenciam o acesso a sistemas de arquivos específicos que armazenam informações em um formato específico.

Cada driver do sistema de arquivos decide como ele armazena e recupera as permissões. A camada VFS não se importa: seu trabalho é despachar solicitações para os drivers corretos. Os sistemas de arquivos para arquivos de disco armazenam as permissões em algum lugar do disco, caso sejam compatíveis. Sistemas de arquivos para arquivos de disco que seguem as tradicionais permissões de armazenamento de design Unix com outros metadados no inode de um arquivo. Os sistemas de arquivos de rede perguntam ao servidor quais são as permissões, se o protocolo suportar permissões. Se o formato ou protocolo não suportar permissões Unix, cabe ao driver criar algo, por exemplo, relatando as mesmas permissões para todos os arquivos. Sistemas de arquivos na memória, como procfs e sysfs, armazenam permissões em uma estrutura de dados na memória ou as calculam em tempo real. O FUSE chama uma função no programa que implementa o sistema de arquivos, e assim por diante.

Observe que a camada VFS e o driver do sistema de arquivos contribuem para determinar se uma solicitação de acesso é concedida. Uma solicitação pode envolver vários drivers de sistema de arquivos se envolver um caminho que atravessa pontos de montagem (por exemplo, se /foo/bar é um ponto de montagem, um acesso a /foo/bar/qux requer a consulta de um sistema de arquivos para o percurso de / e /foo e outro para o percurso de /foo/bar e /foo/bar/qux ). Os detalhes da divisão podem variar dependendo da variante Unix, mas normalmente a camada VFS relaciona as permissões de arquivo com o contexto de chamada e pode aplicar outras restrições (montagem somente leitura, estruturas como SELinux, etc.) e o sistema de arquivos individual pode aplicar restrições adicionais (por exemplo, para um sistema de arquivos de rede, o servidor sempre pode dizer não).

    
por 12.05.2018 / 01:43