Herdar a permissão de gravação do grupo, mas não executar para arquivos, no OmniOS (Illumos) usando o ZFS ACL

3

Nós operamos com umask 027 a maior parte do tempo. Para determinados diretórios, onde vários usuários estão envolvidos, encontrei uma maneira legal de emular umask 002 usando a herança da ACL.

Aqui está o comando que estou usando. Essencialmente, isso é chmod 775 com herança:

/usr/bin/chmod A=owner@:rwxpDaARWcCos:fd:allow,group@:rwxpDaARWcs:fd:allow,everyone@:rxaRcs:fd:allow $@'

$@ representa a lista de arquivos a serem atualizados. Estou usando a edição do OpenSolaris em /usr/bin/chmod , pois /usr/gnu/bin/chmod não parece oferecer suporte à sintaxe total da ACL.

Funciona como um encanto e também define g+s para que o nome do grupo seja herdado. No entanto, há algumas melhorias que eu gostaria de ajudar:

  1. A permissão a+x (executar) deve se aplicar apenas aos diretórios e não deve ser herdada para arquivos automaticamente.
  2. A permissão o+r (leitura) deve ser aplicada apenas a arquivos e diretórios não , porque eu quero desabilitar ls capacidade para usuários anônimos.

Estou muito satisfeito com o OmniOS / Illumos & ZFS, mas infelizmente ele usa o esquema ACL do Solaris, que é bem diferente da sintaxe ACL do Linux mais comumente encontrada.

Algum tipo de herança condicional está em ordem, herdando um caminho para os arquivos e o outro caminho para os diretórios. Isso é possível?

    
por George Bailey 30.11.2016 / 18:29

1 resposta

3

The a+x (execute) permission should only apply to directories, and should not be inherited for files automatically.

Você pode especificar para cada ACE (entrada de controle de acesso) da ACL (a lista completa) como ela deve ser herdada. As opções são retiradas do Guia de administração do Solaris , que também se aplica ao OmniOS (Tabelas 8.1 a 8.3):

  • file_inherit (f): Herda somente a ACL do diretório pai para os arquivos do diretório.
  • dir_inherit (d): Herda somente a ACL do diretório pai para os subdiretórios do diretório.
  • inherit_only (i): Herdar a ACL do diretório pai, mas se aplica somente aos arquivos recém-criados ou subdiretórios e não ao próprio diretório. Requer f / d / fd.
  • no_propagate (n): Somente herda a ACL do diretório pai para o conteúdo de primeiro nível do diretório, não o segundo nível ou conteúdo subseqüente. Requer f / d / fd.

Você pode adicionar várias ACEs para o mesmo usuário e obter o efeito desejado, porque elas são combinadas durante a aplicação (semelhante às ACLs do Windows). Exemplo reduzido para @owner, porque para os outros seria o mesmo:

/usr/bin/chmod A=\
    owner@:rw-p-D-ARWcCos:fd-----:allow, \
    owner@:--x---a-------:-d-----:allow, \
    [...]
$@

Isso significa que

  • a primeira ACE é aplicada ao diretório e é herdada para todos os arquivos e diretórios, mas exclui as permissões a + x
  • a segunda ACE é aplicada ao diretório e é herdada para todos os subdiretórios, mas não para arquivos e tem apenas as permissões a + x
  • para obter a ACL completa resultante, é possível "sobrepor" ambas as linhas para diretórios (é por isso que prefiro a sintaxe com os traços, você vê o que está faltando)

Eu não testei que ele faz o que você quer, às vezes também depende de aplicativos, então você deve testá-lo. Os arquivos herdados e as ACLs de diretório são marcados com um grande I na última posição, como owner@:rw-p-D-ARWcCos:fd----I:allow .

The o+r (read) permission should only apply to files, and not directories, because I want to disable ls ability for the anonymous users.

Semelhante à primeira pergunta, mas o contrário. Você também pode combiná-lo com n se desejar apenas herança de primeiro nível (semelhante a find -maxdepth 1 ). Novamente, tome cuidado para testar, porque provavelmente os sinalizadores simples não são suficientes e você também precisa dos avançados ( ARWC ). Além disso, você ainda pode aplicar ACLs recursivamente com a opção chmod -R em arquivos e diretórios, que podem ser necessários em alguns casos (por exemplo, se as ACLs devem ser modificadas retroativamente, porque uma vez que um arquivo é gravado, sua ACL é corrigida, dependendo da propriedade de aclinherit ).

I'm very pleased with OmniOS/Illumos & ZFS, but unfortunately it uses the Solaris ACL scheme which is quite different from the more commonly found Linux ACL syntax.

Isso pode parecer infeliz do seu lado agora, mas as ACLs modelam de perto as ACLs do NFSv4, portanto, você não precisará alterar nada se decidir usar o NFS versão 4. Ele também representa as ACLs do Windows (apenas exceção: order em SOlaris é fixo, ordem no Windows é sempre Negar antes de permitir, mas se você não usar Negar, não importa), o que significa que você pode editar as permissões de cada PC com o Co direitos definidos como permitidos. Isso funciona para domínios e grupos de trabalho, portanto, a interoperabilidade com o Windows é melhor do que as soluções alternativas que o Samba empregou no passado.

    
por 01.12.2016 / 11:12