Falhas de permissão do Mysterious Samba após a migração do serviço

3

Depois de migrar um compartilhamento de rede maildir (CIFS) para um novo servidor de armazenamento, comecei a ter problemas com as permissões de arquivo (usuários incapazes de excluir emails antigos). Meu serviço IMAP é o Dovecot, mas podemos identificar o problema em um nível inferior a esse.

Como root , posso navegar para um diretório de correio que exibe esse problema no servidor que hospeda os arquivos e o servidor no qual eles estão montados (doravante denominado 'cliente') e experimente / observe o seguinte comportamento:

  • ls mostra a mesma listagem de arquivos e permissões nas duas máquinas.
  • As permissões não correspondem exatamente desde a migração, mas nenhuma alteração de permissão afeta o comportamento. (Todas as operações futuras são realizadas em arquivos com permissões -rw-rw---- 1 mail mail .)
  • A execução de operações como mail em vez de root também não tem efeito.
  • Tentativa de alterações de permissão, como chmod g-rw * :

    • no servidor funciona bem
    • no cliente funciona bem para arquivos criados desde a migração
    • no cliente produz este erro para arquivos de pré-migração:

      chmod: alterando permissões de '1479603582.M874812P11259.Pantheon, S = 84750, W = 85933: 2, Sa': Argumento inválido

  • Tentando ler o arquivo:
    • no servidor funciona bem
    • no autocompletes de nome de arquivo do cliente e relatórios do vim Permission Denied

Procurando por quaisquer ACLs que possam estar afetando arquivos mais antigos, obtenho essa saída no servidor:

root@<storage-server>:/<path-to-share>/<site>/<user>/folders/cur# getfacl <filename>
# file: <filename>
# owner: mail
# group: mail
user::rw-
group::rw-
other::---

getfattr não produz nada.

O servidor de armazenamento era anteriormente um sistema operacional abandonware solaris + debian (Nexenta) servindo com o CIFS em um pool de armazenamento do ZFS. Agora é o Ubuntu 16.04, novamente servindo com o CIFS em um pool de armazenamento do ZFS. Em todos os casos, as ACLs são / foram suportadas, mas não usadas em nenhum lugar.

Minha configuração de compartilhamento do Samba:

[Maildir]
    path = /<path-to-share>
    browseable = no
    guest ok = no
    valid users = mail
    writable = yes
    create mode = 0660
    directory mode = 0770

, que é montado como //<host>/Maildir /var/mail cifs auto,credentials=/root/.smb_mail,user,rw,exec 0 0 . Todas as propriedades do zfs estão no padrão para este sistema de arquivos e seus pais.

Eu tentei remover o modo modo de criação / diretório e adicionar @mail a usuários válidos, tudo sem efeito.

De que outra forma minhas permissões poderiam estar erradas?

Atualização:

Eu tentei mudar para um compartilhamento NFS, e o problema persiste . Eu tentei copiar o conteúdo do maildir para um novo local (em um novo sistema de arquivos diferente) com cp -r e chown -r mail:mail , e novamente ele persiste, enquanto é servido de um caminho completamente diferente.

Por fim, tentei mv somefile backup && rm somefile && cat backup > somefile && chown mail:mail somefile e a tentativa de ler esse arquivo ainda falha com Permissão negada.

Não sei como as operações em arquivos específicos podem ser bloqueadas de maneira independente do mecanismo de compartilhamento, localização lógica, permissões / propriedade do UNIX e até mesmo qualquer forma de metadados de arquivo.

Atualização 2:

Eu tive outra chance de mudar para um compartilhamento NFS e desta vez a questão da permissão foi embora. No entanto, eu não quero mudar para o NFS, pois está causando outros problemas, particularmente para a inicialização. O problema é definitivamente com o samba, mas limpar todos os dados operacionais (vários arquivos .tdb e .dat, etc.) também não ajudou.

Atualização 3:

O problema foi reduzido a nomes de arquivos com dois-pontos neles. Renomear um arquivo para remover o cólon o torna legível no cliente, e renomear para um nome arbitrário e original com dois pontos torna-o ilegível. Parece que o Dovecot está renomeando os arquivos ao longo do tempo para rastrear algumas informações e que adiciona dois pontos, o que eventualmente torna todos os emails ilegíveis / não-regraváveis, mas isso também teria sido o caso anteriormente.

Algumas observações adicionais: criar e ler um arquivo com dois pontos no cliente funciona (e os dois pontos aparecem como aspas duplas no servidor). Aliás, é assim que teríamos nomes de arquivos com dois pontos ... Os arquivos mais recentes parecem ter dois pontos, mas no servidor são mostrados como tendo uma aspa dupla e dois pontos.

Está começando a parecer algum tipo de problema de codificação - especialmente estranho, já que esses dois sistemas são homogêneos pela primeira vez.

    
por HonoredMule 13.12.2016 / 22:39

1 resposta

2

O Samba não permite dois pontos em nomes de arquivos e usa o remapeamento de caracteres (para aspas) para suportá-los de uma maneira presumivelmente amigável para o Windows. Em algum momento, o tratamento foi diferente, resultando em dois pontos reais no nome do servidor. Isso, ou eu posso em algum momento ter realmente copiado os arquivos através do compartilhamento. (É improvável, já que tudo foi mantido com envios incrementais zfs durante a transição.) Além disso, ao usar um servidor NFS, a Dovecot começou a aplicar renomeações que quebraram o Samba para conteúdo mais recente também.

Como os dois-pontos fazem parte dos metadados descartáveis incorporados no nome do arquivo, que são regenerados se estiverem incorretos, usei um script para remover todos os dois pontos reais do compartilhamento: find "$@" -name '*:*' -exec rename 's/://g' {} + .

(Eu tentei ser um pouco mais esperto, mas o nome do arquivo aparece para ter uma aspa dupla no lugar de dois pontos, e calcular a tradução precisa é de valor mínimo para o esforço, especialmente depois de 12 horas de bater cabeça.)

Depois disso, todos os arquivos se tornaram legíveis novamente, e a única perda de dados real foi ter que marcar um monte de e-mails lidos novamente. Eu só espero que essa correção seja uma questão única.

    
por 14.12.2016 / 14:04