Grave o acesso de um cliente Windows via um ZFS SMB para um arquivo criado no host em OpenIndiana

2

Eu tenho um servidor OpenIndiana executando o ZFS que é compartilhado usando um nobody user e group. Eu não entendo totalmente as permissões de ACL do Solaris, mas sei as permissões de estilo do Linux. O cliente é o Windows 8 e o servidor é OpenIndiana é oi_148.

Não estou conseguindo descobrir como fazer com que a permissão de gravação funcione corretamente para o cliente Windows. É capaz de fazer novos arquivos, mas não pode modificar arquivos criados pelo shell em OpenIndiana.

Quando um arquivo ( "local file" ) é criado localmente como o usuário nobody no bash e outro arquivo ( "smb file" ) criado remotamente via SMB (como nobody também), eles são bem diferentes em permissões:

# ls -V
-rw-r--r--   1 nobody   nobody         0 Dec  2 12:24 local file
                 owner@:rw-p--aARWcCos:-------:allow
                 group@:r-----a-R-c--s:-------:allow
              everyone@:r-----a-R-c--s:-------:allow

-rwx------+  1 nobody   nobody         0 Dec  2 12:24 smb file
            user:nobody:rwxpdDaARWcCos:-------:allow
       group:2147483648:rwxpdDaARWcCos:-------:allow

No bash, posso gravar em smb file , mas vice-versa, o cliente Windows não pode gravar em local file . Isso é confuso para mim porque parece que deve permitir que o cliente SMB grave em local file , porque nobody é o proprietário e tem um w na ACL.

A configuração sharesmb é bem chata, embora eu espere que haja algo para definir aqui, semelhante a umask:

sharesmb name=shared,guestok=true

Como posso fazer esses dois trabalhos em conjunto e ter um sistema de permissão simétrico, em que tanto o SMB quanto o usuário local produzem as mesmas permissões?

Existe algum tipo de ACL que pode ser definido na raiz do sistema de arquivos para permitir que todos os arquivos sejam criados de maneira semelhante?

    
por Gerald Kaszuba 02.12.2012 / 02:54

1 resposta

2

Houve alguns problemas com minha configuração:

  • A ACL criada pelo usuário local não tinha d e D sinalizadores definidos, o que significa que não pode ser excluída / movida, embora eu ainda não entenda por que o usuário local conseguiu excluí-la quando o SMB não conseguiu.
  • As ACLs não foram definidas de forma que as ACLs fossem herdadas, ou seja, as fd flags.
  • A propriedade
  • ZFS aclinherit deve ser definida como passthrough em vez de restricted .

por exemplo:

# chmod A=owner@:rwxpdDaARWcCos:fd:allow /z/shared
# zfs set aclinherit=passthrough z/shared

Depois de criar arquivos do SMB e localmente:

$ ls -V
total 2
-rwx------+  1 nobody   nobody         0 Dec  8 00:17 local
                 owner@:rwxpdDaARWcCos:------I:allow
-rwx------+  1 nobody   nobody         0 Dec  8 00:17 smb
                 owner@:rwxpdDaARWcCos:------I:allow

Observe o I , que mostra que a ACL é herdada.

As configurações do ZFS são descritas no guia de administração do ZFS :

restricted – For new objects, the write_owner and write_acl permissions are removed when an ACL entry is inherited.

passthrough – When property value is set to passthrough, files are created with a mode determined by the inheritable ACEs. If no inheritable ACEs exist that affect the mode, then the mode is set in accordance to the requested mode from the application.

Agora, o cliente SMB pode excluir arquivos criados localmente.

    
por 07.12.2012 / 14:23