Usando setfacl para permitir que membros do grupo gravem em qualquer arquivo em um diretório

12

Gostaria de usar o setfacl para que qualquer pessoa do grupo 'app' possa editar qualquer arquivo contido em / usr / local / users / app, independentemente do que dizem as permissões tradicionais do UNIX. Eu tenho dois usuários John e Ben. Tentei seguir as instruções de outra pergunta , mas john não consegue gravar em alguns arquivos. Parece que isso é por causa da máscara acl. No entanto, eu configurei a máscara padrão no diretório rwx; portanto, os arquivos dentro dele não devem herdar isso quando criados?

Por exemplo, john não pode gravar no arquivo abaixo, mas ele é membro do grupo 'app', que possui acls de gravação no arquivo, então estou surpreso que ele não possa editar o arquivo.

ben@app1:/usr/local/users$ ls -la app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
-rw-r--r--+ 1 ben users 38326 Apr  2 10:21 app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar

ben@app1:/usr/local/users/app$ getfacl app-1.0-SNAPSHOT/lib/
# file: app-1.0-SNAPSHOT/lib/
# owner: ben
# group: users
user::rwx
group::rwx          #effective:r-x
group:app:rwx       #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:group::rwx
default:group:app:rwx
default:mask::rwx
default:other::r-x

ben@app1:/usr/local/users$ getfacl app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
# file: app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar
# owner: ben
# group: users
user::rw-
group::rwx          #effective:r--
group:app:rwx       #effective:r--
mask::r--
other::r--
Ben McCann
fonte

Respostas:

7

Você notará o comentário "eficaz" que o getfacl está jogando para você. O problema é que as permissões são calculadas para que "app" não esteja recebendo o bit de gravação definido. Isso está acontecendo porque a máscara no arquivo está configurada para somente leitura. A máscara é usada para limitar a quantidade de permissões que podem ser concedidas em um arquivo ou diretório específico.

Um exemplo de por que você desejaria esse comportamento seria se você soubesse que o arquivo pode legitimamente precisar de diferentes usuários / grupos para ter acesso a ele, mas por algum motivo as coisas estão ficando complicadas com permissões e você deseja uma maneira de dizer "Qualquer que seja o outro as permissões padrão são definidas como, sejam quais forem as participações em grupos ou o setfacl recursivo que for executado posteriormente, DEFINITIVAMENTE NÃO DÊ ISSO ! " O usuário proprietário possui um status especial no mundo POSIX, possui direitos que outros usuários não têm, como a capacidade de não ser root e alterar permissões em um arquivo e seus direitos não serem limitados pela máscara (que seria de qualquer maneira, sem sentido por causa do primeiro privilégio que o sistema lhes concede). É por isso que eles ainda recebem rwx, embora a máscara seja restrita.

Para responder sua pergunta específica : adicione o bit de gravação à máscara no arquivo e tente novamente como johnusuário.

Aqui está uma versão em linha de comando da explicação acima, observe como os direitos "efetivos" mudam quando tudo o que modifico é a máscara.

Bratchley
fonte
Obrigado. Eu realmente aprecio a resposta. É possível que novos arquivos sejam criados com uma máscara padrão de rwx? Editei minha pergunta com mais alguns detalhes.
Ben McCann
Sim, a máscara é uma das categorias (como usuários e grupos) nas quais você pode definir uma ACL padrão. A máscara padrão deve herdar os subdiretórios e aplicar aos arquivos. Exemplo: setfacl -md: m :: rwx / caminho / para / Dir
Bratchley
O padrão ACL está herdando a subdiretórios, mas não para arquivos, tornando as ACLs completamente inútil :-(
Ben McCann
Apenas para garantir que estamos falando da mesma coisa, você está falando sobre a ACL padrão para a entrada da máscara? É isso que recebo nos testes.
Bratchley #
Também repeti o teste acima para novos arquivos em / testBed após alterar a máscara efetiva no diretório pai e obtive o mesmo resultado (a entrada da máscara padrão é aplicada ao arquivo e não à máscara efetiva do pai).
Bratchley #
0

É impossível. cp, rsync, etc. criam arquivos ignorando as ACLs padrão

Por que o cp não respeita as ACLs?

Ben McCann
fonte
incorreto O usuário estava executando a mesma máscara que você estava executando anteriormente e recebeu uma resposta incorreta de outra pessoa. Não cabe ao "cp" ou a qualquer outro utilitário ignorar as entradas padrão da ACL, o que acontece no nível do sistema de arquivos quando o cp cria o arquivo. A ferramenta tem a opção de emitir chamadas do sistema para distribuir / adicionar as ACLs necessárias, mas seria necessário fazer isso.
Bratchley #
O inferno disso é que você pode ver a entrada da ACL falando deles: são apenas as permissões efetivas que eles esperam ver que não existem. Essa foi uma oportunidade perfeita para dizer "ei cara, verifique sua máscara".
Bratchley #
1
Na verdade, retiro que parece que o EvilRyry postou sobre a máscara e o OP respondeu com "não funcionou" e depois publicou a saída getfacl que parece mostrar que "felles" ficaram rwx no arquivo. Nesse ritmo, a resposta mais votada não corresponde à minha experiência pessoal e ao que ilustrei aqui com exemplos de comando.
Bratchley #