Nota: Estou apenas supondo aqui, não sou um guru de samba.
O Samba / CIFS, pelo menos do jeito que você está usando aqui, não reproduz credenciais entre o servidor e o cliente. Por causa da diretiva force user
no servidor, todas as operações são executadas como o usuário erpm
no 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 do UNIX pareçam funcionar até certo ponto, mas apenas na medida em que o servidor permitir, e você se deparou com um caso em que o que as permissões do Unix reivindicam e o que o servidor permite diferem.
Você notará que todos os arquivos aparecem como o ID do usuário 501. Esse é o uid deles no servidor.
Quando você tenta criar ou remover um arquivo, isso requer permissão de gravação no diretório. Todos os acessos são mapeados para um único usuário no servidor, portanto, a permissão de gravação resume se erpm
tem permissão para gravar nesse diretório no servidor. A resposta é sim.
Quando você executa touch
, ele cria o arquivo e altera seu horário de modificação. Alterar o tempo de 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 open
call (que cria o arquivo) é bem-sucedido e, em seguida, utimes
chama (ou melhor, no Linux o sistema utimensat
chamada) falha em definir os horários.
Isto é realmente um pouco estranho porque utimes
deve ter sucesso, já que touch
o chama com um argumento NULL (significando “set the timestamp to the time atual”), e isso é suposto ser permitido a qualquer chamador que possa escrever no arquivo, e não apenas ao proprietário, como configurar um timestamp arbitrário. Eu suspeito que utimensat
está 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 POSI do CIFS, 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 opção forceuid
mount.