Negando modificação de timestamp no servidor SFTP

2

Eu tenho um servidor SFTP do Linux que uso para compartilhar arquivos com outras pessoas.

Existe um script que localiza e apaga automaticamente arquivos enviados há mais de 10 dias:

find . -not -path . -mtime +10 -exec rm -frv {} \;

Percebi que alguns clientes SFTP preservam a data última modificação , fazendo com que o script exclua os arquivos antes do esperado.

Por exemplo, se Hoje for 15 de dezembro e um cliente fizer o upload de um arquivo que ele modificou em seu computador no dia 1º de dezembro, o arquivo será excluído imediatamente, em vez de 25 de dezembro.

Então, como posso negar que os clientes alterem o atributo modificado pela última vez após o upload?

    
por Delta 20.12.2016 / 10:22

2 respostas

2

O sftp-server (e o internal-sftp compatível) tem as opções -P e -p preto / branco lista certas solicitações de SFTP.

Você pode usá-los para não permitir setstat e fsetstat solicitações:

Subsystem sftp internal-sftp -P setstat,fsetstat

Observe que isso também não permitirá alterações nas permissões (e outros atributos).

Você pode fazer isso por usuário (ou por outro critério) usando a diretiva Match .

    
por 21.12.2016 / 13:22
2

Você não pode fazer isso de forma limpa e está agindo "contra" práticas estabelecidas pelo Unix / Linux. A maneira esperada de executar sua tarefa é usar -mtime +10 -ctime +10 , ou seja, excluir arquivos antigos em relação a mtime e ctime .

Muitas ferramentas que operam arquivos definem o mtime de volta ao passado quando o conteúdo significativamente foi alterado. Mas o ctime ("inode change time") é um indicador de que algo sobre o arquivo foi alterado: mtime ou conteúdo ou permissões ou outros metadados.

Também aviso: seu script terá consequências indesejadas, pois verifica também o mtime de diretórios e exclui diretórios inteiros. Quando você escreve em arquivos, o mtime do diretório e o ctime não mudam, assim os arquivos serão apagados como resultado de rm -r ./that/directory

    
por 20.12.2016 / 11:02