Precedência do usuário e do proprietário do grupo em permissões de arquivo

17

Acabei de encontrar algo inesperado (para mim) em relação às permissões de arquivo no Linux (Arch Linux). Basicamente eu tenho:

  • userX em groupX
  • fileX userX:groupX ---rwx----

O que me intriga: não consigo executar nenhuma ação ( rwx ) em fileX . Isto está certo? Alguém pode, por favor, confirmar que este é realmente o comportamento esperado?

As únicas ações que posso executar são mv e rm porque tenho permissões de gravação no diretório pai.

O problema é que sempre achei que essas permissões colapsam umas nas outras, começando com a mais geral (outro - > grupo - > usuário). Em outras palavras, se o=rwx se importa com o que as persmissões para grupo e usuário são? Aparentemente, este não é o caso, mas não faz muito sentido para mim; parece contra-intuitivo. A única coisa em que essa abordagem parece ser útil é excluir facilmente uma pessoa / grupo muito específico, o que não parece ser uma maneira inteligente de lidar com isso (imho). Além disso, o dono (e o grupo?) Deve poder chmod , certo? Alguma opinião sobre este assunto?

    
por alex 03.06.2014 / 22:48

3 respostas

20

The thing is, I always thought these permissions collapse on each other, starting with the most general one (other -> group -> user).

Se fosse esse o caso, as permissões "outros" se aplicariam a todos.

In other words, if o=rwx who cares what the persmissions for group and user are?

Isso é diferente da sua frase anterior. Aqui, você insinua que as permissões são cumpridas juntas, por exemplo, que o userX tem permissão de leitura se o userX possuir o arquivo e o arquivo for legível pelo usuário, ou se um grupo ao qual o userX pertence possui o arquivo e o arquivo for legível por grupo ou se o arquivo for legível por outros. Mas não é assim que funciona. De fato, o=rwx significa que as permissões rwx se aplicam a outras, mas não diz nada sobre entidades que não são outras.

Primeiro, não importa diretamente quais grupos um usuário pertence. O kernel não tem noção de usuários pertencentes a grupos. O que o kernel mantém é, para cada processo, um ID de usuário (o UID efetivo ) e uma lista de IDs de grupos (o GID efetivo e os GIDs suplementares). Os grupos são determinados no momento do login, pelo processo de login - é o processo de login que lê o banco de dados do grupo (por exemplo, /etc/group ). Os IDs de usuários e grupos são herdados por processos filhos¹.

Quando um processo tenta abrir um arquivo com permissões tradicionais do Unix:

  • Se o usuário proprietário do arquivo for o UID efetivo do processo, os bits de permissão do usuário serão usados.
  • Caso contrário, se o grupo proprietário do arquivo for o GID efetivo do processo ou um do ID do grupo suplementar do processo, os bits de permissão do grupo serão usados.
  • Caso contrário, os outros bits de permissão são usados.

Apenas um conjunto de bits rwx é usado. O usuário tem precedência sobre o grupo que tem precedência sobre o outro. Quando existem listas de controle de acesso , o algoritmo descrito acima é generalizado:

  • Se houver uma ACL no arquivo para o UID efetivo do processo, ela será usada para determinar se o acesso é concedido.
  • Caso contrário, se houver uma ACL no arquivo para o GID efetivo do processo ou um ID de grupo suplementar do processo, os bits de permissão do grupo serão usados.
  • Caso contrário, os outros bits de permissão são usados.

Veja também Precedência do ACLS quando um usuário pertence a vários grupos para obter mais detalhes sobre como as entradas da ACL são usadas, incluindo o efeito da máscara.

Assim, -rw----r-- alice interns indica um arquivo que pode ser lido e escrito por Alice e que pode ser lido por todos os outros usuários, exceto estagiários. Um arquivo com permissões e propriedade ----rwx--- alice interns é acessível apenas para estagiários, exceto Alice (seja ela interna ou não). Como Alice pode chamar chmod para alterar as permissões, isso não fornece nenhuma segurança; é um caso de ponta. Em sistemas com ACLs, o mecanismo generalizado permite remover permissões de usuários específicos ou grupos específicos, o que às vezes é útil.

Usar um único conjunto de bits, em vez de orar todos os bits para cada ação (ler, escrever, executar), tem várias vantagens:

  • Ele tem o efeito útil de permitir a remoção de permissões de um conjunto de usuários ou grupos, em sistemas com ACLs. Em sistemas sem ACLs, as permissões podem ser removidas de um grupo.
  • É mais simples de implementar: verifique um conjunto de bits, em vez de combinar vários conjuntos de bits.
  • É mais simples analisar as permissões de um arquivo, porque menos operações estão envolvidas.

¹ Eles podem mudar quando um processo setuid ou setgid é executado. Isso não está relacionado ao problema em questão.

    
por 04.06.2014 / 02:48
3

As permissões mais específicas têm precedência sobre as menos específicas.

userX in groupX

fileX userX:groupX ---rwx----

Como você é o proprietário do arquivo, você receberá apenas permissões de proprietário. O proprietário não tem permissões. Assim, você não pode fazer nada. Se você não fosse o proprietário do arquivo e um membro do grupo, as permissões do grupo seriam aplicadas.

Por favor, leia esta seção da página wiki

link

    
por 04.01.2016 / 22:02
2

-rwxrw---- significa que o proprietário leu, escreveu e executou permissões, o grupo leu e escreveu e outras não têm permissões.

As permissões fornecidas fornecem às permissões do grupo 'groupX' para ler, gravar e executar o arquivo. Se você é um membro do grupo "groupX", mas não o proprietário do arquivo, essas permissões serão aplicadas a você.

Neste caso, suponho que você seja o proprietário do arquivo. Somente as permissões definidas para o proprietário serão aplicadas a você. É claro que o proprietário pode substituir ou alterar as permissões no arquivo. O grupo, no entanto, não pode fazer isso. Por exemplo, o vim irá pedir-lhe para confirmar se você está escrevendo para um arquivo que você não tem permissões de escrita, mas é o proprietário de.

Eu geralmente leio permissões da esquerda para a direita. Eu sou o dono? Se sim, as permissões do proprietário se aplicam. Se não; Eu sou um membro do grupo? Se sim, as permissões do grupo se aplicam. Se não, então as permissões para "Outro" se aplicam a mim.

Em alguns casos, é útil ser o proprietário de um arquivo, mas não possui permissões de gravação. Ele protege você de excluir ou modificar acidentalmente o arquivo. Pessoalmente, eu configurei a permissão 400 em todos os meus arquivos de modelo, apenas para ter certeza de que não os modifico acidentalmente. O mesmo vale para permissões de execução.

    
por 03.06.2014 / 23:14