Depois de ignorar este problema por uma semana, agora de repente funciona ... Eu não sei o que causou isso, mas funciona ... Eu tentei a sugestão de este blog , mas modificou-o para incluir AW
como direitos. Então eu testei de novo, desta vez apenas com as minhas antigas regras de negação (sobrescrevendo as novas completamente), isso também funcionou. Por fim, usei as primeiras configurações da minha própria pergunta, que nunca funcionaram, mas agora elas funcionaram.
Depois de mais alguns testes, acho que foi porque o serviço SMB não foi reiniciado antes e as ACLs de compartilhamento não foram reconhecidas corretamente. Mudá-los era a única maneira de restaurar o comportamento antigo (e errado).
Portanto, para referência futura, a solução é definir as permissões normais nos próprios arquivos e não permitir permissões Co
no nível de compartilhamento:
-
Aplique as seguintes regras de ACL ao diretório e (herdadas) a todos os arquivos recém-criados:
/usr/bin/chmod A=\ user:root:rwxpdDaARWcCos:fd-----:allow,\ # root has full access user:alice:rwx---a-R-c--s:-------:allow,\ # dir: create files, read everything user:alice:rwxp--aARWc--s:f-i----:allow \ # files: wpAW is needed for full file write access, everything is only inherited to files /pool/share
-
Aplique as seguintes regras de ACL ao diretório de compartilhamento oculto do conjunto de dados do ZFS (isso é necessário para impedir que o proprietário modifique as ACLs, para obter detalhes, consulte a resposta do @ embedded e a postagem vinculada do servidor):
/usr/bin/chmod A=\ user:root:full_set:-------:allow,\ # root has full access everyone@:modify_set:-------:allow \ # anyone else cannot modify permissions /pool/share/.zfs/shares/testshare
-
Reinicie o servidor SMB (necessário para atualizar as ACLs de compartilhamento alterado, consulte este tópico ):
svcadm restart svc:/network/smb/server:default # restart service svcs -xv svc:/network/smb/server:default # check if the startup date has changed
Agora, novos arquivos podem ser criados e gravados, mas não excluídos, e também os usuários do Windows não podem conceder direitos adicionais. Esta solução funciona bem para minha situação, mas posso ver duas pequenas desvantagens:
- Você precisa lembrar / documentar que alterou o nível de compartilhamento, se permissões adicionais precisarem ser definidas no futuro.
- É possível que um usuário modifique o conteúdo dos documentos. Por exemplo,
alice
pode sobrescrever caracteres ou linhas em um documento de texto. Acho que isso acontece porque o aplicativo que eu uso precisa dos privilégios de anexar e escrever e não há nenhum ACL que verifique "somente gravação inicial" ou similar.