Como permitir que várias pessoas alterem o mtime -timestamp de um arquivo através do sftp?

7

Eu tenho um diretório ao qual vários usuários têm acesso. Eles alteram, carregam e excluem arquivos no diretório. Todos pertencem ao mesmo grupo de usuários. Os arquivos no diretório têm direitos de acesso de 660.

O problema é que os usuários não podem definir o horário de modificação dos arquivos se não forem os proprietários desse arquivo.

Por exemplo, o usuário AAA faz o upload de um arquivo 'EXAMPLE.jpg', o usuário BBB faz o download, modifica e faz o upload novamente. O carimbo de data / hora 'last modified' do arquivo será do momento em que BBB o enviou, não quando foi realmente modificado pela última vez. Eu tentei definir as permissões do arquivo para o 777, mas isso não ajudou.

O problema é mostrado em sftp-logs como:

Dec  5 16:37:08 servername sftp-server[695]: open "/shared_directory/EXAMPLE.jpg" flags WRITE,CREATE,TRUNCATE mode 0666
Dec  5 16:37:08 servername sftp-server[695]: close "/shared_directory/EXAMPLE.jpg" bytes read 0 written 42765
Dec  5 16:37:08 servername sftp-server[695]: set "/shared_directory/EXAMPLE.jpg" modtime 20111205-15:53:31
Dec  5 16:37:08 servername sftp-server[695]: sent status Permission denied

O Winscp irá reclamar da situação como Upload of file 'example.jpg' was successful, but error occurred while setting the permissions and/or timestamp. If the problem persists, turn on 'ignore permission errors' . O aviso pode ser facilmente ignorado, mas e se eu quiser permitir que meus usuários "preservem" os timestamps editando-os após o upload do arquivo?

Já existe pergunta semelhante , mas ficou sem resposta : (.

    
por jous 05.12.2011 / 16:19

2 respostas

8

Por algum motivo misterioso, os sistemas Unix / Linux guardam o mtime o mais strongmente possível. Somente o proprietário [*] pode fazer o que você precisa. Você não pode controlá-lo, mesmo com as ACLs (man setfacl).

Uma solução que posso pensar é usar o Samba, que tem a opção dos filemode . Ele faz exatamente o que você precisa (embora o nome não seja muito óbvio). Claro que estou longe de recomendar o samba sobre o sftp; o samba é um pesadelo administrativo.

Na verdade, se eu fosse você, eu faria um hack muito, muito feio. Escreva um script que varre o arquivo sftp-log para a linha set ... modtime , e para cada linha imediatamente tente executar touch --mtime . Obviamente, o script precisa ser executado como root, portanto, certifique-se de que ele esteja seguro contra a injeção de código (como nomes de arquivos e datas contendo 'ou' ou $ caracteres).

[*] Na verdade, também o usuário possui CAP_FOWNER (como root), mas esse é o recurso de todo o sistema, portanto, não se aplica ao seu caso.

    
por 05.12.2011 / 18:24
2

Os usuários podem excluir e carregar os arquivos alterados. Dessa forma, eles alterarão a propriedade e poderão atualizar o registro de data e hora do arquivo.

A permissão da pasta deve ser algo como drwxrwsr-x e a permissão do arquivo deve ser -rw-rw-r-- . o usuário deve estar no mesmo grupo da pasta e dos arquivos.

Veja também: Como eu defino a estrutura de permissões para vários usuários editando vários sites em / var / www no Ubuntu 9.10?

    
por 05.12.2011 / 16:59