Servidor SFTP para responder com o arquivo HTTPS

0

Eu tenho um servidor REST-API por HTTPS. Eu preciso de uma maneira de chamar a API quando um arquivo é recuperado usando o SFTP. O conteúdo é gerado dinamicamente por solicitação. Existe uma maneira simples de fazer isso sem ter que 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.

Isso é o que eu tenho:

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

e fazendo isso deve retornar o mesmo:

sftp XXXX@myservice:/items (or sftp myservice:/items/XXXX)
    
por Markus Johansson 07.10.2015 / 11:35

1 resposta

0

Eu acho que eu entendo o que você quer dizer. Você deseja gerar um arquivo com base no usuário atual (ou no arquivo solicitado). Você atualmente faz isso em HTTPS, mas também quer disponibilizá-lo em SFTP ... Certo? Problema interessante.

Você pode ficar chocado ao saber que não há nada que possa fazer o que você está pedindo para sair da caixa ... Qualquer coisa é possível.

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

Eu começaria com o FUSE. Além disso, python-fusível. Aqui está o o único tutorial que eu já usei para o FUSE. Ele vai te levar ao ponto em que você pode começar a editar as coisas. Eu gostaria de:

  • Listar apenas um arquivo [falso] em readdir()
  • Saiba como encontrar o nome de usuário no sistema de arquivos
  • Hotwire open() e read() para extrair de requests.get('your URL') usando o nome de usuário. open() talvez precise ser falsificado e read() seja um identificador da solicitação requests .
  • Você provavelmente precisará corrigir e aplicar muitos dos outros métodos para que eles retornem dados, mas eles obviamente serão falsificados na maioria das vezes
  • Monte este sistema de arquivos FUSE em algum lugar no seu SFTP que todos possam ver como somente leitura

Isso funcionaria para a abordagem sftp (você poderia ver o caminho completo em vez do usuário, por exemplo), mas você precisaria de uma única conta sftp com a qual as pessoas pudessem se conectar.

Como alternativa, 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 podem permitir que você veja 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 que corra em algum lugar no fundo. Ele atualizará o arquivo do site sempre que acessar o diretório. Você pode querer verificá-lo (com um echo blaaa $DIR ) para certificar-se de que não está martelando o servidor. Pode não exibir um arquivo na primeira vez que carregar o diretório.

    
por Oli 07.10.2015 / 12:11