A permissão de compartilhamento do Samba negou o arquivo de gravação do usuário, mas ainda mostra

12

Problema muito estranho ...

Compartilhamento do Samba no controle remoto:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

Comando Mount no local usando root:

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

O root pode ler / gravar / cd sem nenhum problema:

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

Mas se eu mudar para um usuário comum e fizer a mesma coisa, recebo o seguinte:

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

Eu posso lle posso ver que ele escreveu o arquivo de qualquer maneira:

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

Eu não posso mesmo rmproblema:

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

Eu tentei diferentes opções de montagem. uid=501não muda nada. Tentei, nounixmas depois não funciona e não vejo nada usando o usuário root ou shawn.

camarão
fonte
Esse Q parece ser quase o mesmo problema: unix.stackexchange.com/questions/71896/… .
slm
Não é exatamente o mesmo problema.
shrimpwagon
Eu disse quase 8-). Esse comentário foi mais direcionado para eu vincular Q's e A's comuns para futuros visitantes, mas achei que você poderia dar uma olhada.
slm

Respostas:

7

Nota: Eu estou supondo que aqui, eu não sou um guru do samba.

O Samba / CIFS, pelo menos da maneira que você está usando aqui, não reproduz credenciais entre o servidor e o cliente. Por causa da force userdiretiva no servidor, todas as operações são executadas como o usuário erpmno servidor. No entanto, como o cliente e o servidor estão executando um sistema unix, eles negociaram automaticamente as extensões CIFS POSIX . Isso faz com que as permissões unix pareçam funcionar até certo ponto, mas apenas na medida em que o servidor permitir, e você terá um caso em que o que as permissões unix reivindicam e o que o servidor permite diferir.

Você notará que todos os arquivos aparecem como ID do usuário 501. Esse é o seu uid no servidor.

Quando você tenta criar ou remover um arquivo, isso requer permissão de gravação no diretório. Todo o acesso é mapeado para um único usuário no servidor, portanto, a permissão de gravação se resume a se erpmé permitido gravar nesse diretório no servidor. A resposta é sim.

Quando você executa touch, ele cria o arquivo e altera seu tempo de modificação. Alterar a hora da modificação de um arquivo requer propriedade, e isso é testado pelo código genérico do sistema de arquivos, no lado do cliente.

Se você executar strace touch test, notará que a openchamada (que cria o arquivo) é bem-sucedida e, em seguida, a utimeschamada (ou melhor, no Linux, a utimensatchamada do sistema) falha ao definir os horários.

Na verdade, isso é um pouco estranho, porque utimes deve ser bem - sucedido, já que o touchchama com um argumento NULL (que significa "definir o carimbo de data / hora para o horário atual"), e isso deve ser permitido a qualquer chamador que possa gravar no arquivo, e não apenas para o proprietário, como definir um carimbo de data e hora arbitrário. Suspeito que utimensatesteja realmente fazendo uma verificação baseada em permissões e determinando que as permissões digam que você não pode gravar nesse arquivo, mesmo que o sistema de arquivos permita uma operação de gravação independentemente das permissões reais.

A principal vantagem das extensões CIFS POSIX, quando o lado do servidor está sendo executado com as permissões de um usuário não raiz, é transportar o bit executável e, possivelmente, a propriedade do grupo. Pode ser menos confuso se você mapear a propriedade do usuário para um único usuário do lado do cliente com a forceuidopção de montagem.

Gilles 'SO- parar de ser mau'
fonte
3
Muito obrigado pela resposta completa. Eu finalmente tentei username=guest,defaults,noperme isso resolveu totalmente o problema. Não sei qual resposta aceitar nesta, pois username=guest,defaults,nopermprovavelmente não é a melhor resposta e simplesmente não tenho mais tempo para tentar sua resposta. Mais uma vez obrigado!
shrimpwagon
@shrimpwagon Obrigado pela sua atualização. Isso resolveu o meu problema ... Eu já havia me esquecido de ter que inserir padrões e noperm na montagem.
Matthew