信頼できないコンピューターにファイルをコピーする方法は?


1

あるコンピューターから別のコンピューターにファイルを安全にコピーしたいのですが、他のコンピューターは信頼されておらず、コンピューターの所有者に指示を与える以外に直接アクセスすることはできません。それに加えて、これは1回限りの状況なので、面倒な設定は避けてください。最も簡単で移植性の高い方法は何でしょうか?

私が考えているのは、次のワークフローを備えたプログラムです。

  1. ファイルを持つホストは、パスワードで保護されたファイルを使用可能にする仮想コマンドを発行します。

    file-offer -p PASSWORD file1 file2 file3 directory

  2. もう1つは、ファイルを受け取るためのパスワード付きの仮想コマンドです(ファイルを選択するためのGUIも歓迎します)。

    file-receive -p PASSWORD file2

私が今持っている最も近いものはこのハックです。これは動作しますが、あまり快適ではなく、Windowsユーザーにいくつかの問題を与えます。

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

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

さらにいくつかの注意事項:

  • どちらのユーザーにもルートアクセス権がない(したがって、ポートにアクセスするサーバーは1024未満ではない)
  • ファイルを使用可能にする前にファイルをコピーすることは避けてください(つまりno cp files /var/www/
  • ssh / scpは、一方のホストのパスワードを他方に与える必要があるため機能しません。
  • rsyncd.confでrsyncを使用することはほとんど機能しますが、セットアップが面倒で、単一のファイルを共有する方法を提供せず、ディレクトリのみを共有します。
  • 単一のコマンドラインで起動および設定できるftp / httpサーバーが機能します。暗号化のhttpsサポートは歓迎されるだけでなく、ディレクトリだけでなく単一のファイルを共有する方法もあります。これらの基準に合うサーバーは知りません
  • 他のホストはネットワーク経由でのみ使用できるため、USBはオプションではありません
  • ファイルアップロードサービスもオプションではありません(ファイルサイズの制限、信頼できないサードパーティへのアップロード、ユーザーはインターネット上ではなくLAN上など)

最初の文に問題があります。信頼できないコンピューターでは、または信頼できるコンピューターでは安全に何もできません。「安全に」とはどういう意味ですか?
デビッドソーンリー

「安全に」とは、第三者がファイルを傍受できないようにすることを意味します(つまり、暗号化された送信とパスワードで保護されたアクセスがあれば十分です)。「信頼されていない」とは、単に他のユーザーを信頼できないことを意味します。コンピューター自体は問題ありません(つまり、scpを実行しても、パスワードを入力するか、または彼に提供する必要があるため)。
グリュンベル

「信頼できない」とは、これらのファイルで他のユーザーを信頼できるが、他の機密性の高い個人情報では信頼できないという意味ですか?
デビッドZ

はい、正確に。
グランベル

回答:


2

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 <bob.mcblah@example.com>"

Enter the user ID.  End with an empty line: 

$ ls *.gpg
mysecretfile.gpg

これで、ファイルmysecretfile.gpgは暗号化され、個人(Bob McBlah)のみがファイルを復号化できます(非対称または公開キー暗号化)。

ファイルは、実質的に傍受のリスクなしで、ファイルを送信できる任意の媒体(netcat、email、FTP、dropbox、mediafire.comなど)を使用して安全に送信できます。

-a「ASCII armour」フラグを使用すると、暗号化されたファイル(名前はmysecretfile.asc)はプレーンASCIIテキストであり、ASCIIテキストを送信できる任意のメディアで送信できるため、他の「x MBファイル」の質問が該当します。

特定の問題を解決するには、おそらくBaseHTTPServerモジュールを使用して簡単なPythonスクリプトを作成できます。

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()

名前を付けて保存してservefile.py実行python servefile.py /path/to/my/file.gpg

上記のコードは正確ではありませんが、1回限りの転送には適しています。


6

USBドライブの受け渡しは可能ですか?面倒すぎるかもしれませんが、信頼できないコンピューターに接続する問題は解決します。また、OSのユーザーが最小限の指示で必要なファイルをプルすることはそれほど難しくありません。


「磁気テープで満たされたステーションワゴンの帯域幅を過小評価しないでください」という古い格言があります。DVD-Rや外付けハードドライブなど、言葉を現代化できます。ただし、待機時間は苦痛になります。
デビッドソーンリー

あなたが南アフリカにいる場合は、ハトが最善の策です:news.com.au/technology/story/0,25642,26053119-5014239,00.html
shufler

3

両方のコンピューターがインターネットに接続されている場合、DropBoxのようなものが受け入れられる可能性があります。


2
  • パスワードを使用し、シェルアクセスを使用しない一時ユーザーを作成します(例:scponly)。
  • そのユーザーにファイルへの権利を与えます。
  • SCPを使用してファイルをコピーします。
  • すべてが完了したら、そのユーザーを削除します。

その方法は機能しますが、複数のレベルでは受け入れられません。ルート権限、共有するファイルの変更が必要であり、必要以上の権限が付与されるため、非常に面倒です。簡単で安全で、共有する必要のあるファイルを変更する必要のないものを探しています。
グランベル

@Grumbel:なぜこれにはルート権限が必要なのですか?また、そのユーザーに対して(chmod)ファイルを読み取り専用に設定できます。SSHは...また、root以外のユーザーのために働く
ヨシップMedved

一時ユーザーを作成および削除するには、root権限が必要です。
グランベル

@Grumbel:サーバーコンピューターにアクセスできると仮定しました。そうでない場合、これは問題です。
ヨシップMedved


1

SSHは公開/秘密キー認証を使用できます。これにより、「信頼されていない」コンピューターに公開鍵を与えることができます。そして、秘密鍵を秘密にしてパスワードを保護し、他のマシンにログインできます。

その後、sshを実行するユーザーに適切な権限がある限り、ファイルをscpできます。また、SSHを使用しているため、すべてのファイルは転送中に暗号化されます。


他の方法でも動作するはずです-リモートユーザーにキーペアを生成させ、公開キーを送信してください。その後、彼はあなたのマシンからscpできます。パスワードは必要ありません。
クリス

公開鍵は、共有する必要のある少数のファイルへの単なるアクセスではなく、マシンへのフルアクセスを依然として提供します。
グリュンベル

これにより、他のマシンへのアクセス可能になり、フルアクセスではなく、ログインしたユーザーのアクセスレベルに関係なくアクセスできます。これは、私が過去に行ったこと(彼らが何をしていたかを知っている一部の人々によって)を私が見た方法であり、私がお勧めします。
デビッドZ

@grumbelは、私が考えていたファイル許可に基づいて許可されるファイルをより適切に制限するでしょう。ただし、SSH / SCPを特定のディレクトリに制限するために、chroot(howtoforge.com/chrooted_ssh_howto_debian)でSSHをセットアップできます。
オリー

1

Inbox.comで無料のアカウントを設定することもできます。サービスの1つ(メール以外)は、最大5 GBのファイルストレージ(無料)です。両方のユーザーが共有できるアカウントを作成し、ファイルをアップロードして、他のユーザーがそれらをダウンロードできるようにします。その後、アカウントを忘れ、パスワードを変更して保持するか、必要な操作を行います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.