web-dev-qa-db-ja.com

VPSサービスを使用して、VPSホストからデータにアクセスできないようにできますか?

デジタルオーシャンなどのプロバイダーを使用して、プライベート/機密情報をVPSに保存する場合、SFTPおよびSSHアクセスを保持したまま、その情報を保護する(VPSホストがアクセスを取得するのを防ぐ)方法はありますか?

4
David Alsh

残念ながら、それはまったく不可能です。以下に、これについての簡単な説明をいくつか示します。

  • 暗号化を使用しても、プロバイダーはメモリとディスクの現在の状態のスナップショットを作成し、新しいインスタンスのクローンを作成して、できるだけ多くのアクセスを取得できます。 ( ソース

  • 暗号化されたファイルシステムでVPSを実行している場合でも、RAM内のデータはすべて暗号化されず、VPSホストのシステム管理者は、復号化パスフレーズを含めてアクセスできます。この厳しいセキュリティ要件を本当にお持ちの場合は、物理的にセキュリティで保護された独自のシステムを実行するか、この種のことを専門とする専用サーバーホスティング会社を見つける必要があるようです。 ( ソース

  • ... VPSイメージにアクセスできる人は誰でも、コードにバグを追加して、使用するパスフレーズを検出できる可能性があることに留意してください。 ( ソース

  • [暗号化]は、ハードウェアを制御できる場合に意味があります。他の誰かがハードウェアを制御する場合、ホストが実際にそれを見たくないと信じない限り、それはほとんど意味がありません...( source

  • 物理アクセスはルートアクセスであるため、サーバーがVMまたはベアメタルにあるかどうかに関係なく、サーバーに物理的にアクセスできる場合は、ルートアクセスが許可されます。 KVMの場合、ベアメタルホストの所有者はゲストにアクセスできます。データはいつでも暗号化できますが、アクセスするとデータが復号化されるため、制限された利点があります。

    ネットワークと同じ。 VMの所有者は、ネットワークトラフィックを見ることができます。ここでも、一部のトラフィック(https、sshなど)を暗号化できます。 ( ソース


VPSに機密データを保存するだけの場合の特定のソリューションを次に示します。

ECryptfsで暗号化されたディレクトリを作成して使用し、リモートでマウントする方法

前提条件

パッケージecryptfs-utilsおよびsshfsをインストールし、システムを再起動します。

Sudo apt update && Sudo apt -y install ecryptfs-utils sshfs
Sudo apt update && Sudo systemctl reboot

標準セットアップと使用法

ターミナルウィンドウを開き、次のコマンドを実行します。

ecryptfs-setup-private

次に、次のように求められます。

  • Enter your login passphrase [<user>]:このパスフレーズは現在のユーザーのパスワードと一致する必要があり、暗号化された情報のロック解除(復号化)に使用されます。

  • Enter your mount passphrase [leave blank ...]:このパスフレーズは、暗号化されたデータのマウント時に自動的に使用されますが、緊急事態が発生してデータを回復する必要がある場合に必要になるため、安全な場所に書き留めてください。

上記のコマンドは、2つのディレクトリを作成します。

  • ~/.Private暗号化されたデータが保存される場所。
  • ~/Privateディレクトリ~/.Privateは、復号化された状態でマウントされます。

~/.Privateはディレクトリ内にマウントされませんが、~/Privateには2つのファイルと指示があります。

ユーザーのパスワード(login passphrase)を使用してシステムにログインすると、~/.Privateディレクトリが~/Privateに自動的にマウントされ、そこで作業できるようになります。 logoutまたはexitを使用すると、ディレクトリ~/.Privateがマウント解除されます。これを手動で行うには、ecryptfs-mount-privateおよびecryptfs-umount-privateコマンドを使用できます。これらのオプションの詳細については、記事 ArchLinux WikiのeCryptfs をご覧ください。参照: ランダムディレクトリでecryptfsを使用する方法

パスワードを使用してSSH/SFTP接続を認証する場合、上記が機能します。ただし、SSHキーペアを使用して自分自身を認証する場合は、ecryptfs-mount-privateを使用して~/.Privateをマウントする必要があります。この場合、最初にシステムにSSHで接続し、ecryptfs-mount-privateを実行する必要があります。次に、SFTPを使用して~/Privateディレクトリに移動できます。このプロセスを自動化するには、ecryptfs-mount-privateコマンドを~/.bashrcの最後に追加します。

echo -e "\n# Mount my Private directory\necryptfs-mount-private\n" | tee -a ~/.bashrc

暗号化されたリモートディレクトリをマウントし、ローカルでロック解除(復号化)します

リモートマシン(VPS)とローカルマシンで次のコマンドを実行し、両方のマシンのlogin passphrasemount passphraseに同じデータを入力します。

ecryptfs-setup-private --nopwcheck --noautomount

オプション--nopwcheckを使用すると、ユーザーログインパスフレーズとは異なるパスフレーズを選択できます。オプション--noautomountは一目瞭然です。

リモートマシンで:

  • コマンドを実行します:

    ecryptfs-mount-private
    

    注:このアプローチをテストする間、上記のコマンドを2回実行する必要がありました!

  • いくつかの簡単なコンテンツを作成します。

    echo "Hello Word!" > ~/Private/hello.txt
    
  • アンマウント~/.Private

    ecryptfs-umount-private
    
  • さらに、復号データが保存されているディレクトリ~/.ecryptfs(VPSから)を削除できます。

ローカルマシンで:

  • リモート暗号化フォルダー~/.Privateをローカルフォルダー~/.Privatesshfs経由でマウントし、ファイルの所有権を偽装します(<user>@<Host_name_or_ip>を置き換えます):

    sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<Host_name_or_ip>:.Private ~/.Private
    

    アンマウントするには、fusermount -u ~/.PrivateまたはSudo umount -l ~/.Privateコマンドを使用します。

  • 次に、ローカルディレクトリ~/.Private~/Privateにマウント(および復号化)します

    ecryptfs-mount-private
    
  • ファイルhello.txtが存在するかどうかを確認します。

    $ cat ~/Private/hello.txt
    Hello Word!
    
  • コマンドecryptfs-umount-privateumount.ecryptfs_private)で問題が発生した場合、コマンド~/Privateを使用してローカルSudo umount -l ~/Privateディレクトリをアンマウントできます。

  • eCryptfsには bugs があり、場合によってはecryptfs-mount-privateおよびecryptfs-umount-privateが正しく機能しません。

  • 上記によれば、プロセス全体(マウント/アンマウント)を自動化する(~/.bashrcを置き換える)<user>@<Host_name_or_ip>内に2つの関数を作成できます。

    function ecryptfs-remote-mount {
            sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<Host_name_or_ip>:.Private ~/.Private > /dev/null 2>&1
            Sudo keyctl clear @u
            Sudo ecryptfs-insert-wrapped-passphrase-into-keyring $HOME/.ecryptfs/wrapped-passphrase
            # Attempt to mount, and loop the function unless it is true - due to  CLI usage bug
            ecryptfs-mount-private && echo "Done!" || ecryptfs-remote-mount            
    }
    
    function ecryptfs-remote-umount {
            ecryptfs-umount-private > /dev/null 2>&1 || Sudo umount -l $HOME/Private
            fusermount -u $HOME/.Private > /dev/null 2>&1 || Sudo umount -l $HOME/.Private
            echo "Done!"
    }
    
    export -f ecryptfs-remote-mount ecryptfs-remote-umount
    

    次に、source ~/.bashrcを使用すると、ecryptfs-remote-mountおよびecryptfs-remote-umountをコマンドとして使用できます。

参照とさらなる読み物

7
pa4080