Servidor SFTP para responder com arquivo HTTPS

Servidor SFTP para responder com arquivo HTTPS

Tenho um servidor REST-API por HTTPS. Preciso de uma maneira de chamar a API quando um arquivo é recuperado usando SFTP. O conteúdo é gerado dinamicamente por solicitação. Existe uma maneira simples de fazer isso sem precisar adicionar contas de usuário e introduzir falhas de segurança no servidor? Ter a chave permitirá que qualquer pessoa obtenha o conteúdo do arquivo, mas nada mais.

Isto é o que eu tenho:

GET https://myservice/api/items/get?key=XXXX

e fazer isso retornará o mesmo:

sftp XXXX@myservice:/items (or sftp myservice:/items/XXXX)

Responder1

EUpensarEu entendo o que você quer dizer. Você deseja gerar um arquivo baseado no usuário atual (ou arquivo solicitado). Atualmente você faz isso por HTTPS, mas também deseja disponibilizá-lo por SFTP... Certo? Problema interessante.

Você pode ficar chocado ao saber que não acho que haja nada que possa fazer o que você está pedindo imediatamente... Porém, tudo é possível.


Minha primeira abordagem envolve escrever seu próprio sistema de arquivos!

Eu começaria com FUSE. Além disso, python-fuse. Aqui estáo único tutorial que já useipara FUSÍVEL. Isso o levará ao ponto em que você pode começar a editar as coisas. Eu poderia:

  • Faça com que liste apenas um arquivo [falso] emreaddir()
  • Descubra como encontrar o nome de usuário no sistema de arquivos
  • Hotwire open()e read()extrair de um requests.get('your URL')usando o nome de usuário. open()pode apenas precisar ser falsificado e read()controlar a requestssolicitação.
  • Você provavelmente precisará corrigir e simular muitos dos outros métodos para que eles retornem dados, mas obviamente serão falsificados na maioria das vezes
  • Monte este sistema de arquivos FUSE em algum lugar do seu SFTP que todos possam ver como somente leitura

Isso funcionaria para qualquer abordagem sftp (você poderia ver o caminho completo em vez do usuário, por exemplo), mas você precisará de uma única conta sftp com a qual as pessoas possam fazer login.


Alternativamente, se cada usuário tiver uma conta, você poderá tentar monitorar o acesso a um diretório de propriedade de cada usuário. inotifywatche inotifywaitpode permitir que você observe o acesso a um diretório.

inotifywait -mrq --format '%w' /home/*/magicdir/ | while read DIR; do
    user=${DIR:6:-10}  # that is based on the length of /home/ and /magicdir/
    wget -qO $DIR https://path/to/items/${user}
done

E deixe isso rodando em algum lugar em segundo plano. Ele atualizará o arquivo do site sempre que eles acessarem o diretório. Você pode querer verificar (com um echo blaaa $DIR) para ter certeza de que não está prejudicando o servidor. Pode não exibir um arquivo na primeira vez que carregar o diretório.

informação relacionada