Como eu concedo permissões diferentes para cada usuário?

11

Então, eu uso o Linux há alguns anos, e eu realmente deveria saber essa resposta, mas estou tendo problemas para encontrá-lo. Especificamente, eu tenho usado a distribuição baseada em Debian .... principalmente o Ubuntu.

Se eu tiver um servidor com mais de três usuários, como configurarei um conjunto diferente de permissões para um arquivo para cada usuário.

Por exemplo:

Se eu tiver um arquivo com essas permissões e propriedade:

rwx rw_ r__ user1:group1 file1.txt

e eu tenho 3 usuários com essas permissões desejadas ....

  • user1 rwx
  • user2 rw _
  • user3 r __

Tudo o que preciso fazer é ter user1 como proprietário do arquivo, user2 estar em group1 e user3 não pode ser nem? correto?

Mas, e se eu tiver um user4 e um user5 .

  • user4 _wx
  • user5 __x

Como eu configuraria isso?

Eu não tive que fazer isso antes, mas essa pergunta foi feita por um administrador do Windows e, sinceramente, não consegui responder.

    
por trueCamelType 26.07.2016 / 16:30

2 respostas

19

As permissões tradicionais de unix permitem apenas permissões de usuário, grupo e outras permissões conforme você encontrou. Estes podem resultar em alguma combinação desajeitada de grupos que precisam ser criados ...

Assim, uma nova forma de ACL (Access Control Lists) foi adicionada. Isso permite que você especifique vários usuários e vários grupos com permissões diferentes. Eles são definidos com o comando setfacl e lidos com getfacl

$ setfacl -m u:root:r-- file.txt
$ setfacl -m u:bin:-wx file.txt 
$ setfacl -m u:lp:--x file.txt 
$ getfacl file.txt
# file: file.txt
# owner: sweh
# group: sweh
user::rw-
user:root:r--
user:bin:-wx
user:lp:--x
group::r--
mask::rwx
other::r--

Você pode saber facilmente se um arquivo tem uma ACL observando a ls output:

$ ls -l file.txt
-rw-rwxr--+ 1 sweh sweh 0 Jul 26 10:33 file.txt

O + no final das permissões indica uma ACL.

    
por 26.07.2016 / 16:35
2

Sim, a ACL: s permite definir livremente diferentes direitos para diferentes usuários ou grupos. IIRC as permissões de grupo habituais limitam o conjunto de permissões que grupos e usuários podem ter através de ACL: s (mostrado como mask em getfacl ), mas setfacl deve lidar com isso se você adicionar permissões.

Mas, em alguns casos, você precisa perguntar se o conjunto de permissões faz algum sentido.

I have 3 users with these desired permissions....
- user1 rwx
- user2 rw_
- user3 r__

Você poderia implementar isso com ACL: s ou (aproximadamente) com as permissões habituais do Unix, tornando user1 o proprietário do arquivo, user2 um membro do grupo e permitindo que outras pessoas, incluindo user3, tenham acesso de leitura. Embora então todos (com acesso ao diretório) também tivessem acesso de leitura.

Vamos considerar o significado dessas permissões. Você tem um usuário que pode ler e outro que pode ler e escrever. Isso é completamente normal. Nenhum deles tem acesso para executar o arquivo, mas um terceiro usuário também deve fazer isso.

Isso não faz muito sentido em minha mente. Qualquer usuário que possa ler o arquivo, pode fazer uma cópia (*), marcá-lo como executável e executá-lo, sem acesso para executar o arquivo original. A única situação que faz sentido ter acesso de execução para alguns usuários, mas não para outros, é quando o executável tem privilégios elevados através do suid. Mas se fosse esse o caso, você não deveria ter outros usuários com acesso de gravação ao arquivo.

No mesmo sentido, user4 com -wx e user5 com --x não faz sentido para mim. O acesso somente de gravação pode fazer sentido se houver a possibilidade de permitir somente anexos , mas o sistema de permissões não é tão refinado.

(a menos que não seja possível escrever em qualquer lugar)

No entanto, se removermos o requisito estranho para o x bit, ficamos com um arquivo em que user1 e user2 devem ter acesso de gravação, e user3 deve ter acesso de leitura. Um escritor e vários leitores seriam fáceis com o modelo tradicional, mas esse caso precisaria de truques para combinar as permissões de arquivo com as permissões do diretório contido. Felizmente, em muitos casos, um usuário com mais permissões é suficiente.

Sem o requisito no bit de execução, isso parece um caso para usar o ACL: s. Mas com isso, este exemplo particular parece bastante complicado para mim.

    
por 26.07.2016 / 18:37