Como copiar arquivos para um computador não confiável?

1

Eu quero copiar arquivos de forma segura de um computador para outro, mas o outro computador não é confiável e eu não tenho acesso direto a ele, então dou ao proprietário das instruções do computador. Além disso, essa é uma situação única, portanto, qualquer configuração complicada deve ser evitada. Qual seria a maneira mais fácil e portátil de fazer isso?

O que tenho em mente seria um programa com o seguinte fluxo de trabalho:

  1. O host com os arquivos emite um comando hipotético para tornar os arquivos disponíveis, protegidos com uma senha:

    file-offer -p PASSWORD file1 file2 file3 directory

  2. O outro usa um comando hipotético com a senha para receber um arquivo (uma GUI para selecionar arquivos também seria bem-vinda):

    file-receive -p PASSWORD file2

A coisa mais próxima que eu tenho agora é esse hack, que funciona mas não é muito confortável e daria aos usuários do Windows alguns problemas:

  1. tar cf - [files]... | gpg -c --passphrase PASSWORD | nc -l -p 6666

  2. nc host1 6666 | gpg --passphrase PASSWORD | tar xf - [files]...

Mais algumas notas:

  • nenhum dos usuários tem acesso root (portanto, nenhum servidor acessando portas < 1024)
  • copiar arquivos antes de disponibilizá-los deve ser evitado (ou seja, sem cp files /var/www/ )
  • ssh / scp não funciona pois isso exigiria dar a senha de um host para o outro
  • usar rsync com rsyncd.conf funciona principalmente, mas é complicado de configurar e não fornece uma maneira de compartilhar um único arquivo, apenas diretórios
  • um servidor ftp / http que poderia ser lançado e configurado com uma única linha de comando poderia funcionar, https suporte para criptografia seria bem-vindo, bem como uma maneira de compartilhar arquivos únicos em vez de apenas diretórios, não conhece nenhum servidor se encaixa nesses critérios
  • O USB não é uma opção, pois o outro host pode estar disponível somente na rede
  • um serviço de upload de arquivo também não é uma opção (limites de tamanho de arquivo, upload para terceiros não confiáveis, o usuário pode estar na LAN, não na Internet etc.)
por Grumbel 16.09.2009 / 14:50

7 respostas

2
Criptografia GnuPG !

$ gpg -e mysecretfile
You did not specify a user ID. (you may use "-r")

Current recipients:

Enter the user ID.  End with an empty line: ben

Current recipients:
2048g/52FFA1E 2009-01-02 "Bob McBlah <[email protected]>"

Enter the user ID.  End with an empty line: 

$ ls *.gpg
mysecretfile.gpg

O arquivo mysecretfile.gpg agora é criptografado, de tal forma que somente a pessoa (Bob McBlah) pode descriptografar o arquivo (assimétrico ou criptografia de chave pública ).

O arquivo pode ser enviado com segurança usando qualquer meio capaz de enviar um arquivo (netcat, email, FTP, dropbox, mediafire.com etc etc), praticamente sem risco de interceptação.

Se você usar o sinalizador -a "armadura ASCII", o arquivo criptografado (que seria denominado mysecretfile.asc ) é um texto ASCII simples, que pode ser enviado em qualquer meio que possa enviar texto ASCII, portanto, respostas a qualquer outra pergunta "como posso enviar um arquivo x MB" seria aplicável ..

Para uma solução para seu problema específico, talvez um script Python simples possa ser escrito usando o módulo BaseHTTPServer:

import sys
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

thefile = None

class MyHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        global thefile
        try:
            if self.path == "/":
                f = open(thefile)

                self.send_response(200)
                self.send_header('Content-type', 'application/x-gpg')
                self.send_header('Content-disposition', 'filename="%s"' % thefile.replace("\"", ""))
                self.end_headers()

                self.wfile.write(f.read())
                f.close()
            else:
                self.send_error(404, 'File not found: %s' % self.path)

        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)

def main():
    global thefile
    if len(sys.argv) == 2:
        thefile =  sys.argv[1]
    else:
        print "Usage: %s [path to served file]" % sys.argv[0]
        sys.exit(1)
    try:
        server = HTTPServer(('', 8080), MyHandler())
        print 'Started server on port 8080'
        server.serve_forever()
    except KeyboardInterrupt:
        print 'Keyboard abort, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()

Salve como servefile.py e execute como python servefile.py /path/to/my/file.gpg

O código acima não é exatamente ótimo, mas deve ser bom para transferências únicas.

    
por 16.09.2009 / 19:10
6

A entrega de uma unidade USB é viável? Pode ser muito complicado, mas resolveria a questão de se conectar a um computador não confiável. Além disso, não seria muito difícil para os usuários de qualquer sistema operacional puxarem os arquivos necessários com o mínimo de instrução.

    
por 16.09.2009 / 15:32
3

Se os dois computadores estiverem conectados à Internet, talvez algo como DropBox seja aceitável.

    
por 16.09.2009 / 16:33
2
  • Crie um usuário temporário com senha, mas sem acesso ao shell (por exemplo, com scponly ).
  • Conceda a esse usuário direitos para arquivos.
  • Copiar arquivos com SCP.
  • Quando tudo estiver concluído, remova esse usuário.
por 16.09.2009 / 15:05
1

Se você está procurando um servidor leve esta página na Wikipedia pode ajudar.

    
por 16.09.2009 / 16:37
1

O SSH pode usar autenticação de chave pública / privada . Isso permite que você forneça ao computador "não confiável" sua chave pública. E então você mantém sua chave privada secreta e protegida por senha e então você pode acessar a outra máquina.

Você pode então scp os arquivos contanto que o usuário em que você tenha as permissões apropriadas. E como você está usando o SSH, todos os arquivos são criptografados em trânsito.

    
por 16.09.2009 / 18:04
1

Você também pode configurar uma conta gratuita no Inbox.com . Um de seus serviços (além do email) é o armazenamento de arquivos de até 5 GB (também gratuito). Basta criar uma conta que você possa compartilhar, carregar seus arquivos e permitir que a outra pessoa faça o download deles. Depois, esqueça a conta, mude a senha e guarde, ou faça o que quiser com ela.

    
por 16.09.2009 / 18:11