Permissões do sistema de arquivos - File-system permissions

A maioria dos sistemas de arquivos inclui atributos de arquivos e diretórios que controlam a capacidade dos usuários de ler, alterar, navegar e executar o conteúdo do sistema de arquivos. Em alguns casos, as opções ou funções do menu podem ficar visíveis ou ocultas, dependendo do nível de permissão do usuário; esse tipo de interface do usuário é conhecido como orientado por permissão .

Dois tipos de permissões estão amplamente disponíveis: permissões Unix tradicionais e Listas de Controle de Acesso (ACLs) que são capazes de um controle mais específico.

Variações do sistema de arquivos

O sistema de arquivos File_Allocation_Table original , projetado para sistemas de usuário único, tem um atributo somente leitura que não é realmente uma permissão.

O NTFS implementado no Microsoft Windows NT e seus derivados, usa ACLs para fornecer um conjunto complexo de permissões.

OpenVMS usa um esquema de permissão semelhante ao do Unix. Existem quatro categorias (Sistema, Proprietário, Grupo e Mundo) e quatro tipos de permissões de acesso (Ler, Gravar, Executar e Excluir). As categorias não são mutuamente separadas: Mundo inclui Grupo, que por sua vez inclui Proprietário. A categoria Sistema inclui independentemente os usuários do sistema.

HFS implementado em sistemas operacionais Mac OS clássicos , não oferece suporte a permissões.

Mac OS X versões 10.3 ("Panther") e anteriores usam permissões compatíveis com POSIX. O Mac OS X, a partir da versão 10.4 ("Tiger"), também oferece suporte ao uso de ACLs NFSv4. Eles oferecem suporte a "permissões Unix tradicionais", conforme usadas em versões anteriores do Mac OS X, e o Manual de administração de serviços de arquivos do Apple Mac OS X Server versão 10.4+ recomenda o uso apenas de permissões Unix tradicionais, se possível. Ele também ainda suporta o atributo "Protected" do Mac OS Classic.

O suporte do Solaris ACL depende do sistema de arquivos que está sendo usado; O sistema de arquivos UFS mais antigo oferece suporte a ACLs POSIX.1e, enquanto o ZFS oferece suporte apenas a ACLs NFSv4.

O Linux suporta ext2 , ext3 , ext4 , Btrfs e outros sistemas de arquivos, muitos dos quais incluem ACLs POSIX.1e. Há suporte experimental para NFSv4 ACLs para sistemas de arquivos ext3 e ext4.

O FreeBSD suporta ACLs POSIX.1e em UFS e ACLs NFSv4 em UFS e ZFS.

IBM z / OS implementa segurança de arquivo usando RACF (Resource Access Control Facility)

O sistema de arquivos AmigaOS, AmigaDOS, suporta um sistema de permissões relativamente avançado para um sistema operacional monousuário . No AmigaOS 1.x, os arquivos tinham permissões / sinalizadores de Arquivar, Ler, Gravar, Executar e Excluir (conhecidos coletivamente como ARWED). No AmigaOS 2.xe superior, permissões / sinalizadores adicionais Hold, Script e Pure foram adicionados.

Permissões tradicionais do Unix

As permissões em sistemas de arquivos do tipo Unix são gerenciadas em três escopos ou classes conhecidas como usuário , grupo e outros . Quando um arquivo é criado, suas permissões são restritas pelo umask do processo que o criou.

Aulas

Os arquivos e diretórios são propriedade de um usuário. O proprietário determina a classe de usuário do arquivo . Permissões distintas se aplicam ao proprietário.

Arquivos e diretórios são atribuídos a um grupo , que define a classe de grupo do arquivo . Permissões distintas se aplicam aos membros do grupo do arquivo. O proprietário pode ser um membro do grupo do arquivo.

Os usuários que não são o proprietário, nem um membro do grupo, constituem a classe de outros de um arquivo . Permissões distintas se aplicam a outras pessoas.

As permissões efetivas são determinadas com base na primeira classe em que o usuário se enquadra na ordem de usuário, grupo e depois outros. Por exemplo, o usuário que é o proprietário do arquivo terá as permissões concedidas à classe de usuário, independentemente das permissões atribuídas à classe de grupo ou outras classes.

Permissões

Os sistemas do tipo Unix implementam três permissões específicas que se aplicam a cada classe:

  • A permissão de leitura concede a capacidade de ler um arquivo. Quando definida para um diretório, essa permissão concede a capacidade de ler os nomes dos arquivos no diretório, mas não de descobrir qualquer outra informação sobre eles, como conteúdo, tipo de arquivo, tamanho, propriedade, permissões.
  • A permissão de gravação concede a capacidade de modificar um arquivo. Quando definida para um diretório, essa permissão concede a capacidade de modificar entradas no diretório, o que inclui a criação de arquivos, exclusão de arquivos e renomeação de arquivos. Observe que isso requer que execute também esteja definido; sem ele, a permissão de gravação não tem sentido para diretórios.
  • A permissão de execução concede a capacidade de executar um arquivo. Essa permissão deve ser definida para programas executáveis, a fim de permitir que o sistema operacional os execute. Quando definida para um diretório, a permissão de execução é interpretada como a permissão de pesquisa : concede a capacidade de acessar o conteúdo do arquivo e meta-informações se seu nome for conhecido, mas não lista os arquivos dentro do diretório, a menos que read também seja definido.

O efeito de definir as permissões em um diretório, ao invés de um arquivo, é "um dos problemas de permissão de arquivo mais frequentemente mal compreendidos".

Quando uma permissão não é definida, os direitos correspondentes são negados. Ao contrário dos sistemas baseados em ACL, as permissões em sistemas do tipo Unix não são herdadas. Os arquivos criados em um diretório não têm necessariamente as mesmas permissões desse diretório.

Alterar o comportamento da permissão com bits setuid, setgid e sticky

Os sistemas do tipo Unix normalmente empregam três modos adicionais. Na verdade, esses são atributos, mas são chamados de permissões ou modos. Esses modos especiais são para um arquivo ou diretório geral, não por classe, embora na notação simbólica (veja abaixo) o bit setuid seja definido na tríade para o usuário, o bit setgid é definido na tríade para o grupo e o sticky bit é definido na tríade para outros.

  • O ID do usuário definido , setuid ou modo SUID. Quando um arquivo com setuid é executado, o processo resultante assumirá o ID de usuário efetivo fornecido à classe proprietária. Isso permite que os usuários sejam tratados temporariamente como root (ou outro usuário).
  • O conjunto de ID de grupo , setgid ou permissão SGID. Quando um arquivo com setgid é executado, o processo resultante assumirá o ID de grupo dado à classe de grupo. Quando setgid é aplicado a um diretório, novos arquivos e diretórios criados nesse diretório herdarão seu grupo desse diretório. (O comportamento padrão é usar o grupo primário do usuário efetivo ao definir o grupo de novos arquivos e diretórios, exceto em sistemas derivados de BSD que se comportam como se o bit setgid estivesse sempre definido em todos os diretórios (consulte Setuid ).)
  • O modo aderente (também conhecido como modo Texto ). O comportamento clássico do sticky bit em arquivos executáveis ​​tem sido encorajar o kernel a reter a imagem do processo resultante na memória além do término; no entanto, esse uso do sticky bit agora está restrito a apenas uma minoria de sistemas operacionais do tipo Unix ( HP-UX e UnixWare ). Em um diretório, a permissão permanente evita que os usuários renomeiem, movam ou excluam arquivos contidos pertencentes a usuários que não sejam eles próprios, mesmo que tenham permissão de gravação no diretório. Apenas o proprietário do diretório e o superusuário estão isentos disso.

Esses modos adicionais também são chamados de setuid bit , setgid bit e sticky bit , devido ao fato de que cada um ocupa apenas um bit.

Notação de permissões tradicionais do Unix

Notação simbólica

As permissões Unix são representadas em notação simbólica ou em notação octal.

A forma mais comum, conforme usada pelo comando ls -l, é a notação simbólica .

Três tríades de permissão
primeira tríade o que o dono pode fazer
segunda tríade o que os membros do grupo podem fazer
terceira tríade o que outros usuários podem fazer
Cada tríade
primeiro personagem r: legível
segundo personagem w: gravável
terceiro personagem x: executável
sou t: setuid / setgid ou sticky (também executável)
Sou T: setuid / setgid ou sticky (não executável)

O primeiro caractere da lstela indica o tipo de arquivo e não está relacionado às permissões. Os nove caracteres restantes estão em três conjuntos, cada um representando uma classe de permissões como três caracteres. O primeiro conjunto representa a classe do usuário . O segundo conjunto representa a classe do grupo . O terceiro conjunto representa as outras classes.

Cada um dos três caracteres representa as permissões de leitura, gravação e execução:

  • rse a leitura é permitida, -se não for.
  • wse escrever é permitido, -se não for.
  • xse a execução for permitida, -se não for.

A seguir estão alguns exemplos de notação simbólica:

  • -rwxr-xr-x: um arquivo regular cuja classe de usuário tem permissões totais e cujo grupo e outras classes têm apenas as permissões de leitura e execução.
  • crw-rw-r--: um arquivo especial de caractere cujo usuário e classes de grupo têm as permissões de leitura e gravação e cujas outras classes têm apenas a permissão de leitura.
  • dr-x------: um diretório cuja classe de usuário tem permissão de leitura e execução e cujo grupo e outras classes não têm permissão.

Em alguns sistemas de permissão, símbolos adicionais no ls -ldisplay representam recursos de permissão adicionais:

  • + (mais) sufixo indica uma lista de controle de acesso que pode controlar permissões adicionais.
  • . (ponto) sufixo indica que um contexto SELinux está presente. Os detalhes podem ser listados com o comando ls -Z.
  • @ sufixo indica que atributos de arquivo estendidos estão presentes.

Para representar os atributos setuid , setgid e sticky ou text , o caractere executável ( xou -) é modificado. Embora esses atributos afetem o arquivo geral, não apenas os usuários em uma classe, o atributo setuid modifica o caractere executável na tríade para o usuário, o atributo setgid modifica o caractere executável na tríade para o grupo e o atributo sticky ou text modifica o caráter executável na tríade para outros. Para os atributos setuid ou setgid, na primeira ou segunda tríade, o xtorna - se se o -torna - se S. Para o atributo sticky ou text, na terceira tríade, o xtorna - se te o -torna - se T. Aqui está um exemplo:

  • -rwsr-Sr-t: um arquivo cuja classe de usuário possui permissões de leitura, gravação e execução; cuja classe de grupo tem permissão de leitura; cuja outra classe tem permissão de leitura e execução; e que possui os atributos setuid , setgid e sticky definidos.

Notação numérica

Outro método para representar as permissões do Unix é uma notação octal (base 8), conforme mostrado por stat -c %a. Essa notação consiste em pelo menos três dígitos. Cada um dos três dígitos mais à direita representa um componente diferente das permissões: proprietário, grupo e outros. (Se um quarto dígito estiver presente, o dígito mais à esquerda (de ordem superior) endereça três atributos adicionais, o bit setuid , o bit setgid e o bit sticky .)

Cada um desses dígitos é a soma de seus bits componentes no sistema numérico binário . Como resultado, bits específicos adicionam à soma, pois é representado por um numeral:

  • O bit lido adiciona 4 ao seu total (no binário 100),
  • O bit de gravação adiciona 2 ao seu total (no binário 010), e
  • O bit de execução adiciona 1 ao seu total (no binário 001).

Esses valores nunca produzem combinações ambíguas; cada soma representa um conjunto específico de permissões. Mais tecnicamente, esta é uma representação octal de um campo de bits - cada bit faz referência a uma permissão separada e agrupar 3 bits por vez em octal corresponde ao agrupamento dessas permissões por usuário, grupo e outros.

Estes são os exemplos da seção de notação simbólica dada em notação octal:


Notação simbólica

Notação numérica
inglês
---------- 0000 Nenhuma permissão
-rwx------ 0700 ler, escrever e executar apenas para o proprietário
-rwxrwx--- 0770 ler, escrever e executar para o proprietário e grupo
-rwxrwxrwx 0777 ler, escrever e executar para o proprietário, grupo e outros
---x--x--x 0111 executar
--w--w--w- 0222 Escreva
--wx-wx-wx 0333 escrever e executar
-r--r--r-- 0444 ler
-r-xr-xr-x 0555 ler e executar
-rw-rw-rw- 0666 ler escrever
-rwxr----- 0740 o proprietário pode ler, escrever e executar; o grupo só pode ler; outros não têm permissões

Grupo privado de usuários

Alguns sistemas divergem do modelo POSIX tradicional de usuários e grupos, criando um novo grupo - um "grupo privado de usuários" - para cada usuário. Assumindo que cada usuário seja o único membro de seu grupo privado de usuários, esse esquema permite que um umask de 002 seja usado sem permitir que outros usuários gravem em arquivos recém-criados em diretórios normais porque esses arquivos são atribuídos ao grupo privado do usuário que os criou. No entanto, quando o compartilhamento de arquivos é desejável, o administrador pode criar um grupo contendo os usuários desejados, criar um diretório gravável em grupo atribuído ao novo grupo e, o mais importante, tornar o diretório setgid. Torná-lo setgid fará com que os arquivos criados nele sejam atribuídos ao mesmo grupo do diretório e o umask 002 (habilitado usando grupos privados de usuários) garantirá que outros membros do grupo possam gravar nesses arquivos.

Veja também

Referências

links externos