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 lê 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 emtestfile.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.