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

11

Então, eu uso o Linux há alguns anos e realmente devo saber essa resposta, mas estou tendo problemas para encontrá-la. Especificamente, eu tenho usado distro baseado em Debian .... principalmente Ubuntu.

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

Por exemplo:

Se eu tiver um arquivo com estas 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 tenho a fazer é ter o usuário1 como dono do arquivo, o usuário2 estar no grupo1 e o usuário3 pode não estar - correto?

Mas, e se eu tiver um usuário4 e um usuário5 .

  • user4 _wx
  • user5 __x

Como eu configuraria isso?

Eu nunca tive que fazer isso antes, mas fui perguntado por um administrador do Windows e sinceramente não consegui responder.

trueCamelType
fonte
8
Para esse tipo de granularidade nas permissões, você precisará utilizar as listas de controle de acesso (ACLs). Você pode encontrar um tutorial rápido aqui . Embora seja uma palavra de cautela, uma vez que você inicia o caminho das ACLs em vez de permissões, é uma inclinação muito escorregadia e as coisas ficam complicadas rapidamente, com algumas conseqüências indesejadas no final.
MelBurslan

Respostas:

19

As permissões unix tradicionais permitem apenas permissões de usuário, grupo e outras como você encontrou. Isso pode resultar em uma combinação estranha de grupos que precisam ser criados ...

Portanto, uma nova forma de ACL (Access Control Lists) foi implementada. Isso permite que você especifique vários usuários e vários grupos com permissões diferentes. Estes são definidos com o setfaclcomando e lidos comgetfacl

$ 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 lssaída:

$ 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.

Stephen Harris
fonte
2

Sim, as ACL: s permitem definir livremente direitos diferentes para diferentes usuários ou grupos. As permissões de grupo usuais do IIRC limitam o conjunto de permissões que grupos e usuários podem ter através da ACL: s (mostrada como maskem getfacl), mas setfacldevem lidar com isso se você adicionar permissões.

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

Eu tenho 3 usuários com essas permissões desejadas ....
- user1 rwx
- user2 rw_
- user3 r__

Você pode implementar isso com ACL: s ou (aproximadamente) com as permissões usuais do Unix, tornando o usuário1 o proprietário do arquivo, o usuário2 um membro do grupo e permitindo que outros, incluindo o usuário3, tenham acesso de leitura. Embora todos (com acesso ao diretório) também tenham 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 usual. 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 em que faz sentido ter acesso de execução para alguns usuários, mas não para outros, é quando o executável possui privilégios elevados através do suid. Mas, se esse fosse o caso, você também não deveria ter outros usuários com acesso de gravação ao arquivo.

No mesmo sentido, user4 with -wxe user5 with --xnão fazem sentido para mim. O acesso somente de gravação pode fazer sentido se houver a possibilidade de permitir anexos apenas , mas o sistema de permissão não é tão refinado.

(* a menos que eles não possam escrever em nenhum lugar)


No entanto, se removermos o requisito estranho do xbit, ficaremos com um arquivo em que usuário1 e usuário2 devem ter acesso de gravação e usuário3 deve ter acesso de leitura. Um escritor e vários leitores seriam fáceis com o modelo tradicional, mas neste caso seriam necessários truques para combinar as permissões de arquivo com as permissões do diretório que o contém. 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 ACL: s. Mas, com isso, esse exemplo em particular parece bastante complicado para mim.

ilkkachu
fonte
Se o usuário puder gravar apenas em um sistema de arquivos montado sem permissão de execução, ele não poderá executar uma cópia, mesmo que possa executar o original se as permissões apropriadas forem definidas. Além disso, somente execução pode fazer sentido se você quiser impedi-los de procurar explorações. -wxé definitivamente estranho, no entanto.
26916 celtschk
1
Alguns sistemas têm um mecanismo de permitir apenas anexos. Linux tem chattr +a, por exemplo. E mesmo sem nada específico do sistema, você pode tornar o arquivo um FIFO. --xe, por extensão -wx, também faz sentido para mim para diretórios .
Random832