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

20

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) fileX. Isto está certo? Alguém pode confirmar que esse é realmente o comportamento esperado?

As únicas ações que posso executar são mve rmporque tenho permissões de gravação no diretório pai.

O problema é que sempre pensei que essas permissões entrariam em colapso, começando pela mais geral (outra -> grupo -> usuário). Em outras palavras, se o=rwxquem se importa com o que são as persuasões para grupo e usuário? Aparentemente, esse não é o caso, mas não faz muito sentido para mim; parece contra-intuitivo. A única coisa em que essa abordagem parece útil é excluir facilmente uma pessoa / grupo muito específico, o que não parece ser uma maneira inteligente de fazer isso (imho). Além disso, o proprietário (e o grupo?) Deve ser capaz de chmodqualquer maneira, certo? Alguma opinião sobre este assunto?

alex
fonte
você definitivamente está no groupX?
exussum
sim, definitivamente; verificado gid eficaz comid
alex

Respostas:

24

O problema é que sempre pensei que essas permissões entrariam em colapso, começando pela mais geral (outra -> grupo -> usuário).

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

Em outras palavras, se o = rwx quem se importa com o que as persmissões para grupo e usuário são?

Isso é diferente da sua frase anterior. Aqui você está sugerindo que as permissões são unidas, por exemplo, que o userX tenha permissão de leitura se o userX for o proprietário do arquivo e o arquivo for legível pelo usuário ou se um grupo ao qual o userX pertence for o proprietário do arquivo e o arquivo for group -readable, ou se o arquivo for de outra leitura. Mas não é assim que funciona. De fato, o=rwxsignifica que as rwxpermissões se aplicam a outras pessoas, mas não diz nada sobre entidades que não são outras.

Primeiro, não importa diretamente a quais grupos um usuário pertence. O kernel não tem uma noção de usuários pertencentes a grupos. O que o kernel mantém é, para cada processo, um ID do usuário (o UID efetivo ) e uma lista de IDs de grupo (o GID efetivo e os GIDs complementares). 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ário e grupo 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 dos IDs de grupo suplementares do processo, os bits de permissão do grupo serão usados.
  • Caso contrário, os outros bits de permissão serão usados.

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

  • Se houver uma ACL no arquivo para o UID efetivo do processo, ele será usado para determinar se o acesso é concedido.
  • Caso contrário, se houver uma ACL no arquivo para o GID efetivo do processo ou um dos IDs de grupo suplementares do processo, os bits de permissão do grupo serão usados.
  • Caso contrário, os outros bits de permissão serão usados.

Consulte também Precedência da 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 internsindica um arquivo que pode ser lido e gravado 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 (se ela é estagiária ou não). Como Alice pode ligar chmodpara 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 ou grupos específicos, o que às vezes é útil.

Usar um único conjunto de bits, em vez de ordenar todos os bits para cada ação (leitura, gravação, execução), possui várias vantagens:

  • Ele tem o efeito útil de permitir remover 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.

Gilles 'SO- parar de ser mau'
fonte
bem ... pelo "colapso" Eu meio que queria dizer a mesma coisa, uma operação OR :)
alex
Obrigado pelo seu tempo; +1 para a resposta muito detalhada e muito técnico
alex
Ótima resposta. Mas eu tenho uma pergunta sobre seus pontos finais: é realmente mais simples de implementar e analisar? As permissões de verificação não se resumem a ORing juntas como o OP achava que era o caso?
precisa saber é o seguinte
Este argumento de ponta ainda me parece bobo: (usuárioX no grupoX) + (usuárioZ no grupoX). Você tem um arquivoX usuárioX: groupX --- rwx ----. Agora, o criador da pasta original userX não pode acessar o arquivoX .. mas o userZ pode. E ambos fazem parte do mesmo grupo. Realmente não intuitivo.
alexfvolk 01/03
4

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

userX no grupoX

arquivoX usuárioX: grupoX --- 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

https://en.wikipedia.org/wiki/File_system_permissions#Classes

kog
fonte
2

-rwxrw---- significa que o proprietário tem permissões de leitura, gravação e execução, o grupo tem leitura e gravação e outros não têm permissão.

As permissões que você forneceu dão ao grupo 'groupX' permissões para ler, gravar e executar o arquivo. Se você for um membro do grupo "groupX", mas não for o proprietário do arquivo, essas permissões serão aplicadas a você.

Nesse caso, estou assumindo que você é realmente o proprietário do arquivo. Somente as permissões definidas para o proprietário serão aplicadas a você. Obviamente, 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 solicitará que você confirme se está gravando em um arquivo para o qual não tem permissão de gravação, mas é o proprietário.

Normalmente 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 de grupo se aplicam. Caso contrário, as permissões para "Outro" se aplicam a mim.

Em alguns casos, é útil ser o proprietário de um arquivo, mas não ter permissões de gravação. Ele protege você contra a exclusão ou modificação acidental do arquivo. Pessoalmente, configurei a permissão 400 em todos os meus arquivos de modelo, apenas para garantir que não os modifique por acidente. O mesmo vale para permissões de execução.

arnefm
fonte
11
Eu acredito que você não entendeu a pergunta. Quando o OP disse que as permissões "colapsam" como Outros-> Grupo-> Usuário, acho que elas significavam que, ao determinar se sua ação é permitida, primeiro as permissões "Outros" são verificadas, depois as "Agrupadas" e finalmente (se tudo o resto falhar) "Usuário".
Joseph R.
@JosephR. yeap, é isso que eu quis dizer :)
alex
Oh, minhas desculpas. Vou remover essa parte. Existe algo útil na resposta?
Arnefm
Nota: você deve editar a sua resposta um pouco e remove (ou reformula) o segundo parágrafo como uma espécie de "obscurecer" (não é clara o suficiente, tipo de contrariando o comportamento que eu descrevi)
alex
Pensando bem, eu poderia ter sido rápido em aceitar a resposta. Me desculpe por isso. Então, você está dizendo que às vezes é útil não ter permissões de gravação para não alterar acidentalmente alguns arquivos importantes; mas de que serve quando outras pessoas têm permissões totais? (assim ... você será parado de cometer erros, mas não os outros )
alex
0

Consegui adicionar um usuário a um grupo, conceder permissões ao grupo em um diretório (070) e, em seguida, após o reinício, consegui acessar a pasta.

Criar grupo: sudo groupadd groupname

Adicionar usuário ao grupo: sudo gpasswd -a nome de usuário groupname

Verifique se o diretório inteiro está sob a propriedade correta do grupo (deve ser o membro atual do nome do grupo para executar): sudo chgrp -R nome do grupo nome_do_grupo / caminho

Dê apenas o grupo rwx para a pasta (pode ser apenas rw, ajuste conforme necessário): sudo chmod -R 070 directory_path

Depois de fazer o acima, certifique-se de sair e entrar novamente. Se isso não funcionar, reinicie a máquina. Fazer isso funcionou para mim.

Justin Woods
fonte