Por que os usuários podem excluir arquivos no compartilhamento do Samba quando aparentemente não têm permissão para isso?

1

Estou tentando entender as permissões de arquivo em um compartilhamento do Samba, e o seguinte me intriga, porque tanto o usuário1 quanto o usuário2 podem excluir os arquivos uns dos outros, mesmo que não pareçam ter permissão para isso. Isto é o que esses arquivos parecem na máquina Ubuntu executando o servidor samba:

-rwxr--r-- 1 user1 private 0 okt 8 00:43 'test file user1.txt'*
-rwxr--r-- 1 user2 private 0 okt 8 00:06 'test file user2.txt'*

Caso isso de alguma forma importe, tanto user1 como user2 são membros de private . Ambos os usuários estão acessando o compartilhamento através de suas respectivas máquinas windows, primeiro criando seus respectivos arquivos, e depois apagando os arquivos uns dos outros.

No smb.conf , este compartilhamento é configurado da seguinte maneira:

 [Together]
   path = /srv/together
   browseable = yes
   read only = no
   writable = yes
   create mask = 0755
   directory mask = 0755
   valid users = @private
   force group = private

Meu melhor palpite é que o parâmetro valid users é muito mais poderoso do que eu pensava, basicamente elevando todos os membros do grupo ao status de proprietário. Isso é assim?

Editar: (em resposta aos comentários)

O diretório pai possui as seguintes permissões:

drwxrwx--- 19 root      private   44 okt  8 00:58 together/

Então eu acho que isso é o que garante as exclusões. Eu acho que eu preciso fazer um curso intensivo em permissões de arquivos Linux. Nunca teria ocorrido a mim que a exclusão não é simplesmente um tipo especial de edição ... Então, isso significa que, se os usuários tivessem tentado editar os arquivos, eles não seriam capazes, mesmo que a exclusão funcionasse bem?

A dica do sticky bit t também é útil. Obrigado.

Quanto ao suporte estendido da ACL: sim, ele está ativado (aparentemente por padrão), mas não consigo entender o que isso significa para meu "problema" (se assumirmos por um minuto que as permissões do diretório pai não explicar as coisas). A extensão da ACL teria que estar ativada ou desativada para criar o tipo de comportamento que estou vendo?

    
por Christoph 08.10.2018 / 01:28

1 resposta

3

Ok, vou tentar resumir aqui e dar uma explicação rápida sobre como funcionam as permissões do Linux (sem incluir as ACLs) e por que elas funcionam assim:

Em suma, para dar a resposta: para excluir um arquivo de dentro de um diretório, você precisa escrever permissões no diretório e não no próprio arquivo.

Explicação:

Um diretório é apenas um tipo especial de arquivo que contém informações sobre arquivos e seus números de inode (inodes são basicamente os metadados de um arquivo, por exemplo, onde exatamente no disco rígido o conteúdo dos dados arquivo é armazenado, permissões no arquivo etc.), em suma, é basicamente um arquivo de texto que contém uma lista dos arquivos dentro dele.

Por exemplo quando você usa ls você basicamente a lista de dentro do "diretório-arquivo" (é por isso que você precisa de permissões de leitura em um diretório para listar seu conteúdo).

Um arquivo só existe (com algumas exceções, mas isso é demais para este post), desde que haja algum "link" / "entrada de lista" apontando para ele, também conhecido como listado em algum diretório. Se você excluir todas as listagens de um arquivo de todos os diretórios nos quais ele está listado, o arquivo (e seus dados) desaparecerá. Isso é um pouco complicado de entender, mas por enquanto vamos supor que um arquivo existe apenas uma vez.

Espero que isso deixe claro por que você precisa escrever permissões no diretório e não no próprio arquivo para excluí-lo, porque, novamente, um diretório é apenas um "arquivo de texto" que contém uma lista de seu conteúdo. Se você apagar a entrada de um arquivo do "diretório-arquivo" em que está listado, você efetivamente apaga o arquivo.

Novamente, os diretórios são apenas um tipo especial de arquivo para o qual as permissões têm significados ligeiramente diferentes (bem, na verdade, se você pensar nisso, apenas para a permissão e x ecute):

  • leia (r ou 4) - > listar os nomes do conteúdo do diretório (por exemplo, com ls )
  • escreva (w ou 2) - > modificar o "arquivo de diretório", necessário para excluir arquivos dentro desse diretório, também necessário para criar arquivos dentro desse diretório (se você pensar em um diretório como um arquivo de texto, fica mais fácil entender esse conceito)
  • execute (x ou 1) - > mude para este diretório e leia os inodes dos arquivos dentro do diretório (esta é a maior diferença entre um diretório e um arquivo "normal"). Sem ele, você não pode acessar nenhum arquivo desse diretório e não pode cd , por exemplo, se você não tiver a permissão x no diretório /test , não poderá acessar /test/testfile.txt , mesmo que tenha permissões de leitura em testfile.txt . Basicamente, o x-flag é a permissão de leitura para os inodes dentro de um diretório.

Se você estiver interessado em mais informações sobre o tópico de permissões, confira esta introdução às permissões de arquivos e diretórios do Unix pelo Professor Pollock, que também vai brevemente em ACLs (que é basicamente como o Windows você define permissões para cada pasta / arquivo por usuário / grupo além de atribuir um usuário e um grupo): link

Se você estiver no processo de aprendizado do sistema de permissão do Linux, não usarei as ACLs por enquanto, a menos que você realmente precise de permissões mais específicas.

Oh e btw: as permissões de gravação em um arquivo dentro desse diretório dão a você permissão para modificar (gravar) esse arquivo. No seu exemplo, user2 poderia não escrever no 'arquivo de teste user1.txt' mesmo que ele possa deletá-lo.

Edit: Eu também queria adicionar uma explicação sobre inodes e como eles interagem com diretórios etc., mas decidi que isso iria longe neste post. Se você estiver interessado, há muitas fontes interessantes sobre o assunto, mas isso não deve preocupar muito você, caso precise apenas configurar o seu Samba.

    
por 09.10.2018 / 01:43