Como funcionam as permissões / atributos de arquivos? Nível de kernel, nível de FS ou ambos?

5

Uma pergunta que me ocorreu anteriormente: são permissões / atributos de arquivo OS- (e, portanto, kernel-) dependentes ou são dependentes do sistema de arquivos? Parece-me que a segunda alternativa é a mais lógica, mas eu nunca ouvi falar de reiserfs permissões de arquivo, por exemplo: apenas "permissões de arquivo Unix". Por outro lado, para citar um artigo da Wikipédia :

As new versions of Windows came out, Microsoft has added to the inventory of available attributes on the NTFS file system

que parece sugerir que os atributos de arquivo do Windows estão de alguma forma vinculados ao sistema de arquivos.

Alguém pode, por favor, me esclarecer?

    
por Joseph R. 19.06.2013 / 10:22

4 respostas

5

O kernel e o sistema de arquivos desempenham um papel. As permissões são armazenadas no sistema de arquivos, portanto, é necessário que haja um local para armazenar as informações no formato do sistema de arquivos. As permissões são aplicadas e comunicadas aos aplicativos pelo kernel, portanto, o kernel deve implementar regras para determinar o que as informações armazenadas no sistema de arquivos significam.

"Permissões de arquivo Unix" referem-se a um sistema de permissão tradicional que envolve três ações (leitura, gravação, execução ) controlado por três tipos de funções (usuário, grupo, outro). O trabalho do sistema de arquivos é armazenar 3 × 3 = 9 bits de informação. O trabalho do kernel é interpretar esses bits como permissões; em particular, quando um processo tenta uma operação em um arquivo, o kernel deve determinar, considerando o usuário e os grupos que o processo está executando, os bits de permissão do arquivo e a operação solicitada, para permitir a operação. (“Permissões de arquivo Unix” também incluem setuid e setgid bits , que não são estritamente permissões.)

Sistemas Unix modernos podem suportar outras formas de permissões. A maioria dos sistemas unix modernos (Solaris, Linux, * BSD) suportam listas de controle de acesso que permitem atribuir permissões de leitura / gravação / execução para mais de um usuário e mais de um grupo para cada arquivo. O sistema de arquivos deve ter espaço para armazenar essas informações extras, e o kernel deve incluir código para procurar e usar essas informações. Ext2, reiserfs, btrfs, zfs e a maioria dos outros formatos modernos de sistemas de arquivos unix definem um local para armazenar tais ACLs. O Mac OS X suporta um conjunto diferente de ACL que incluem permissões não tradicionais como “acrescentar” e “criar subdiretório”; o formato do sistema de arquivos HFS + os suporta. Se você montar um volume HFS + no Linux, essas ACLs não serão aplicadas, já que o kernel do Linux não as suporta.

Por outro lado, existem sistemas operacionais e sistemas de arquivos que não suportam controle de acesso. Por exemplo, FAT e variantes foram criados para sistemas operacionais de usuário único e mídia removível e suas permissões são limitadas a leitura / leitura -Escreva e oculto / visível. Estas são as permissões impostas pelo DOS . Se você montar um sistema de arquivos ext2 no DOS, ele não aplicará as permissões ext2. Por outro lado, se você acessar um sistema de arquivos FAT no Linux, todos os arquivos terão as mesmas permissões.

Versões sucessivas do Windows adicionaram suporte a mais tipos de permissão. O sistema de arquivos NTFS foi estendido para armazenar essas permissões extras. Se você acessar um sistema de arquivos com as permissões mais recentes em um sistema operacional mais antigo, o SO não saberá sobre essas permissões mais recentes e, portanto, não aplicará essas permissões. Por outro lado, se você acessar um sistema de arquivos mais antigo com um sistema operacional mais recente, ele não terá as novas permissões e cabe ao SO fornecer fallbacks sensatos.

    
por 20.06.2013 / 17:56
3

Para utilizar certos direitos ambos o kernel e o sistema de arquivos deve suportá-los. Se o sistema de arquivos nem mesmo suportar os direitos de acesso mais básicos, então o código do sistema de arquivos precisa falsificá-los (por exemplo, com a opção de montagem umask for vfat).

    
por 19.06.2013 / 13:03
3

Meu entendimento é que o kernel implementa inodes no VFS. inodes contêm informações de permissão (UNIX e ACL) junto com outros metadados e o sistema de arquivos pode estender o inode para incluir recursos. Se você estiver interessado, leia mais sobre o material VFS - Linux se não for um programador de sistemas.

    
por 19.06.2013 / 15:01
1

Como regra geral, a permissão de arquivos e os atributos dos arquivos são armazenados em filesistem [a maneira exata depende do sistema de arquivos em questão (ext3 / 4, riser, NTFS etc ...)] mas são < strong> usado pelo kernel, normalmente para impor algo.

Por exemplo O kernel em * nix como sistema é "a coisa" que conhece o significado do UID associado a um arquivo / diretório. Um UID de arquivo é simplesmente um número armazenado ao lado de um arquivo certan pelo sistema de arquivos, mas a "tradução" desse número para um determinado usuário (e direitos correspondentes para fazer algo ou não) é feita pelo kernel.

    
por 19.06.2013 / 15:43