Permissões do Linux: Usuários, Grupos, Outros, lista branca ou lista negra? E ajude a compartilhar diretórios com permissões completas, parciais e sem permissões

1

Atualização: para meus propósitos gerais, o que eu descobri aqui é bom o suficiente: UPDATE: link

Portanto, parece-me que as permissões do Linux funcionam como uma lista branca (forçosamente permite que um único usuário especificado ou único, um grupo especificado) em vez de uma lista negra (negue vigorosamente um único usuário especificado ou único especificado) grupo algo). Isso está correto? Em caso afirmativo, como posso colocar alguém na lista negra para poder ler, escrever ou executar em um diretório específico ou em um conjunto de arquivos?

Ex: ls -l mostrando permissões em um diretório, pois drwxr-xr-x significa que é um diretório, Usuários têm permissões de leitura, gravação, execução (rwx), Grupos têm permissões de rx e Outros têm permissões de rx. Digamos que o usuário seja "user0" e o grupo seja "user0".

Como faço para permitir explicitamente que "user1" e "user2" tenham todas as permissões neste diretório "user0", "user3" e "user4" não obtenham permissões e "user5" e "user6" obter permissões parciais?

Parece-me que eu teria que listar o user3 e o user4, o user1 e o user2 na lista branca e o user5 e o user6 parcialmente na lista branca ou na lista negra parcialmente.

Como (eu acho) as permissões do Linux são apenas de lista branca, qual é a melhor maneira de conseguir isso?

Note que parte da minha confusão está nos fatos que:

  1. Um diretório ou arquivo pode pertencer a apenas um usuário ou grupo de cada vez (em vez de, por exemplo, conceder permissões a vários grupos para acessar um diretório ou arquivo específico)
  2. Um usuário pode pertencer a vários grupos

Acho que só preciso de alguns bons exemplos desse material.

Uma solução parcial , que ajuda a demonstrar o problema que estou tendo, é a seguinte:

Vamos supor que o diretório user0 no qual desejo definir essas permissões seja "/ home / user0"

Primeiro, faça o usuário do diretório "user0" e o grupo "user0" (já feito por padrão apenas usando sudo adduser user0 em primeiro lugar). Em seguida, defina as permissões para "drwxrwx ---" (usuário e grupo ambos rwx, mas outros nada)

Permitir ao usuário1 e ao usuário2 todas as permissões para o diretório adicionando-as ao grupo usuário0

Não conceda ao usuário3 nem ao usuário4 permissões: já que Outros possuem acesso "---" e usuário3 e usuário4 NÃO fazem parte do grupo usuário0.

Conceder permissões parciais de user5 e user6 (ex: "r-x"): -não pode ser feito ???? --porque se eu fizer as permissões "r-x", então isso também dá ao user3 e ao user4, mas eu quero que elas sejam listadas na lista negra (com permissões "---").

A leitura em segundo plano que já fiz inclui:

por Gabriel Staples 07.12.2016 / 18:39

2 respostas

2

Sim, se você quiser expressar dessa forma, as permissões padrão do Unix serão "whitelist".

A maneira usual de lidar com as permissões é criar um novo grupo que abstrai todos os arquivos que devem se comportar de maneira semelhante, fornecer a esses arquivos o id do grupo correspondente e fazer com que todos os usuários tenham essas partes no grupo. É por isso que os usuários podem ser membros de muitos grupos.

As permissões para usar dispositivos são tratadas da mesma maneira. Por isso, você tem grupos como input , disk etc. em muitas distribuições.

Então, nesse sentido, você poderia pensar em um grupo como uma "regra" particular do seu "conjunto de regras de permissão". A restrição é que cada arquivo só pode ter uma única regra com uma única combinação rwx de permissões, além das permissões "usuário" e "outras".

Assim, o cenário em que um grupo de usuários precisa ter um conjunto de permissões e outro grupo precisa ter um conjunto diferente de permissões para o mesmo arquivo ou diretório não pode ser implementado com permissões padrão do Unix.

No entanto, existe uma extensão para as permissões unix padrão, chamadas listas de controle de acesso (ACL). Veja man acl para detalhes. Para muitos sistemas de arquivos, você deve especificar uma opção para ativar o acl ao montá-los.

    
por 07.12.2016 / 19:05
2

Para esse tipo de granularidade, você desejará usar as ACLs. Com os ALCs, você pode atribuir permissões diferentes a vários usuários ou grupos. Para realizar o que você está perguntando, você executaria os seguintes comandos (assumindo que seu diretório é chamado dir):

setfacl -m u:user1:rwx dir
setfacl -m u:user2:rwx dir
setfacl -m u:user3:- dir
setfacl -m u:user4:- dir
setfacl -m u:user5:rx dir
setfacl -m u:user6:rx dir

Isso dará acesso total ao usuário1 e 2, sem acesso ao usuário3 e 4, e permissões de leitura / execução ao usuário5 e 6. Se você fizer um ls -ld no diretório, perceberá que ele tem + acrescentado aos bits de permissão.

$ ls -ld dir
drwxrwxr-x+ 2 user0 users 40 Dec  7 11:42 dir

O + significa que tem uma ou mais ACLs associadas a ele. Você pode ver as ACLs com o comando getfacl :

$ getfacl dir
# file: dir
# owner: user0
# group: users
user::rwx
user:user1:rwx
user:user2:rwx
user:user3:---
user:user4:---
user:user5:r-x
user:user6:r-x
group::r-x
mask::rwx
other::r-x

Também vale notar que o comando ls parece mostrar que o diretório é de grupo, mas o comando getfacl mostra que não é. A ACL está correta aqui, ou seja, se um usuário no grupo users , mas sem o nome contrário na ACL ou a propriedade do arquivo tentar criar um arquivo no diretório, ele falhará.

    
por 07.12.2016 / 19:05