História
Originalmente, o Unix só tinha permissões para o usuário proprietário e para outros usuários: não havia grupos. Veja a documentação do Unix versão 1, em particular chmod(1)
. Portanto, compatibilidade com versões anteriores, se nada mais, requer permissões para o usuário proprietário.
Os grupos vieram depois. As ACLs que permitem envolver mais de um grupo nas permissões de um arquivo vieram muito mais tarde.
Potência expressiva
Ter três permissões para um arquivo permite permissões mais refinadas do que ter apenas duas, a um custo muito baixo (muito menor que as ACLs). Por exemplo, um arquivo pode ter o modo rw-r-----
: gravável somente pelo usuário proprietário, legível por um grupo.
Outro caso de uso são os executáveis setuid que são executáveis apenas por um grupo. Por exemplo, um programa com o modo rwsr-x---
de propriedade de root:admin
permite que apenas usuários do grupo admin
executem esse programa como root.
“Existem permissões que este esquema não pode expressar” é um argumento terrível contra ele. O critério aplicável é, existem suficientes casos expressivos comuns que justifiquem o custo? Nesse caso, o custo é mínimo, especialmente considerando as outras razões para o usuário / grupo / outro tríptico.
Simplicidade
Ter um grupo por usuário tem uma sobrecarga de gerenciamento pequena, mas não insignificante. É bom que o caso extremamente comum de um arquivo privado não dependa disso. Um aplicativo que cria um arquivo privado (por exemplo, um programa de entrega de e-mail) sabe que tudo o que precisa fazer é fornecer ao arquivo o modo 600. Ele não precisa percorrer o banco de dados do grupo procurando o grupo que contém apenas o usuário - e o que fazer se não houver tal grupo ou mais de um?
Vindo de outra direção, suponha que você veja um arquivo e deseje auditar suas permissões (por exemplo, verifique se elas são o que devem ser). É muito mais fácil quando você pode “só acessível ao usuário, bem, próximo” do que quando precisa rastrear as definições do grupo. (Essa complexidade é a ruína de sistemas que fazem uso pesado de recursos avançados, como ACLs ou recursos.)
Ortogonalidade
Cada processo executa acessos ao sistema de arquivos como um usuário em particular e um grupo particular (com regras mais complicadas em unices modernos, que suportam grupos suplementares). O usuário é usado para muitas coisas, incluindo testes para a permissão raiz (uid 0) e entrega de sinal (baseada no usuário). Há uma simetria natural entre distinguir usuários e grupos nas permissões de processo e distinguir usuários e grupos nas permissões do sistema de arquivos.