
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] em
readdir()
- Descubra como encontrar o nome de usuário no sistema de arquivos
- Hotwire
open()
eread()
extrair de umrequests.get('your URL')
usando o nome de usuário.open()
pode apenas precisar ser falsificado eread()
controlar arequests
solicitaçã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. inotifywatch
e inotifywait
pode 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.