デジタルオーシャンなどのプロバイダーを使用して、プライベート/機密情報をVPSに保存する場合、SFTPおよびSSHアクセスを保持したまま、その情報を保護する(VPSホストがアクセスを取得するのを防ぐ)方法はありますか?
残念ながら、それはまったく不可能です。以下に、これについての簡単な説明をいくつか示します。
暗号化を使用しても、プロバイダーはメモリとディスクの現在の状態のスナップショットを作成し、新しいインスタンスのクローンを作成して、できるだけ多くのアクセスを取得できます。 ( ソース )
暗号化されたファイルシステムでVPSを実行している場合でも、RAM内のデータはすべて暗号化されず、VPSホストのシステム管理者は、復号化パスフレーズを含めてアクセスできます。この厳しいセキュリティ要件を本当にお持ちの場合は、物理的にセキュリティで保護された独自のシステムを実行するか、この種のことを専門とする専用サーバーホスティング会社を見つける必要があるようです。 ( ソース )
... VPSイメージにアクセスできる人は誰でも、コードにバグを追加して、使用するパスフレーズを検出できる可能性があることに留意してください。 ( ソース )
[暗号化]は、ハードウェアを制御できる場合に意味があります。他の誰かがハードウェアを制御する場合、ホストが実際にそれを見たくないと信じない限り、それはほとんど意味がありません...( source )
物理アクセスはルートアクセスであるため、サーバーがVMまたはベアメタルにあるかどうかに関係なく、サーバーに物理的にアクセスできる場合は、ルートアクセスが許可されます。 KVMの場合、ベアメタルホストの所有者はゲストにアクセスできます。データはいつでも暗号化できますが、アクセスするとデータが復号化されるため、制限された利点があります。
ネットワークと同じ。 VMの所有者は、ネットワークトラフィックを見ることができます。ここでも、一部のトラフィック(https、sshなど)を暗号化できます。 ( ソース )
VPSに機密データを保存するだけの場合の特定のソリューションを次に示します。
前提条件
パッケージ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 passphrase
とmount 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
をローカルフォルダー~/.Private
にsshfs
経由でマウントし、ファイルの所有権を偽装します(<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-private
(umount.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
をコマンドとして使用できます。
参照とさらなる読み物
機密データが隠れている暗号化されたアーカイブファイル(tar)を作成します。
暗号化されたディレクトリを作成します。
ユーザーのホームディレクトリの暗号化を使用します。