Deixe-me ver se entendi:
-
Você deseja que
group1
tenha acesso de leitura / gravação a uma pasta específica. -
Você deseja que
group2
tenha acesso somente leitura a essa pasta. -
Você não deseja que
others
tenha acesso de leitura a essa pasta.
Por padrão, o sistema de permissões do Linux não permite isso. O motivo é simples: para cada inode existem apenas três bits ( rwx
) que descrevem as permissões para um grupo em particular , ou seja, o grupo que possui o arquivo / diretório referido por esse inode. Qualquer usuário que não seja o proprietário nem pertença a esse grupo caia automaticamente em others
. Na prática, na maioria das vezes isso é suficiente, mas em alguns casos raros pode não ser.
A boa notícia é que o Linux na verdade suporta ACLs (listas de controle de acesso), que permitem muito mais controle de acesso granulado. Para ativar as ACLs, você precisa adicionar acl
às opções de montagem. Por exemplo, se a partição que contém o diretório no qual você deseja configurar o controle de acesso avançado é montada assim em /etc/fstab
:
/dev/sda1 / ext4 defaults 0 1
... você mudaria isso para:
/dev/sda1 / ext4 acl,defaults 0 1
Em seguida, você precisa remontar o sistema de arquivos (por exemplo, mount -o remount /dev/sda1
) ou simplesmente reinicializar.
Em seguida, vamos verificar se sua pasta /path/to/folder
concede acesso de leitura / gravação para group1
. As permissões devem ser parecidas com
drwxrwx--- 2 owner group1 4096 Dec 14 02:42 folder
Além disso, você deseja conceder acesso de leitura para group2
, e nenhum acesso para others
. Para conseguir isso, emita o comando
setfacl -m g:group2:rx /path/to/folder
É isso. Você pode pesquisar as permissões da ACL dessa pasta posteriormente usando getfacl
, a saber:
getfacl /path/to/folder
Mais informações aqui: ACLs: permissões de arquivo estendidas .