web-dev-qa-db-ja.com

コマンドラインまたはスクリプトを使用してディレクトリを最適に暗号化および復号化する方法は?

Bazaarバージョン管理下にテキストファイルのディレクトリがあり、各マシンにコピー(実際にはブランチ)を保持しています。コマンドラインからディレクトリを暗号化および暗号化解除したい。

理想的には、ログアウト時にスクリプトを実行して、ディレクトリが暗号化されているかどうかを確認し、暗号化されていない場合は暗号化することもできます。すべてユーザーの介入は必要ありません。ただし、ログイン時にdirを復号化する必要はありません。 (手動で暗号化するのを忘れないようにするためのガードとしてスクリプトが必要です。これはネットブックにとって特に重要です。)

私はubuntu 10.04.1と2つのバージョンのcrunchbanglinuxを実行しています。1つはubuntu 9.04の派生物で、DebianSqueezeリポジトリの6月下旬のスナップショットのいずれかです。

これを行うための最良の方法は何ですか?

encryptiondirectoriesでタグ付けしようとしましたが、タグを作成するための担当者が不足しています。)

8
vanden

マシンへの管理アクセス権はありますか?暗号化されたループバックデバイスを使用できます。例:

暗号化されたfsのコンテナファイルを作成します。

dd if=/dev/urandom of=container bs=1024k count=100 

コンテナファイルをループバックデバイス0にバインドします。

losetup container /dev/loop0

暗号化されたデバイスを作成します(-yはパスフレーズを2回要求し、行は\で分割されます):

cryptsetup -c serpent-xts-essiv:sha256 -b 512 \
   -y create container /dev/loop0 

暗号化されたデバイス上にext2ファイルシステムを作成します(実際には何でも使用できます):

mkfs.ext2 /dev/mapper/container

暗号化されたファイルシステムを暗号化ディレクトリにマウントします。

mount /dev/mapper/container crypt

参考のため:

man cryptsetup && man losetup

また、使用する暗号とキーの長さの選択などについては、暗号化のベストプラクティスを読んでください。

5
dsp

あなたが求めているのは、ディレクトリを暗号化および復号化する方法ではなく、暗号化されたストレージを透過的に操作する方法のようです。実際の大量の復号化と暗号化を使用して提案するスキームは、あまり安全ではないことに注意してください。正常にログアウトしないと、暗号化されないままになります(電源障害、システムクラッシュ、ラップトップの盗難など)。そして、それは決定された攻撃者が見つけることができるあなたの機密データの痕跡を残します(消去されたファイルからのデータはまだディスク上にあり、見つけるのは難しいです)。

現在のLinuxシステムは、透過的な暗号化を実現するためのいくつかの方法を提供しています。ボリューム全体をdm-cryptまたはその代替の1つで暗号化できます。特定のディレクトリツリーを暗号化するために利用できるツールがいくつかあります。たとえば、ecryptfs(カーネルレベルで機能します)やencfs(Fuseを介してユーザーランドで純粋に機能します)などです。 (私が言及した3つはDebian lennyで利用可能であり、すべてのディストリビューションで提供されるはずです。)

PAM(libpam-mountパッケージ; ecryptfsの推奨オプション)またはプロファイルスクリプト(encfsの推奨オプション)を介してログインするときにマウントされる暗号化ディレクトリを設定できます。暗号化されていない状態でディスクに書き込まれるものはないため、「手動で暗号化するのを忘れる」ことには問題がないことに注意してください。

最高の保護を得るには、機密ファイルだけでなく、プログラムによって機密データが保存される可能性のある他の場所も暗号化する必要があります。少なくとも、スワップパーティションを暗号化する必要があります。その他の注目すべき場所には、/tmptmpfsにすることで解決するのが最善)、機密文書を印刷する場合は/var/spool/cups、Webキャッシュ/履歴などのホームディレクトリ内のアプリケーションごとのファイルがあります(例:~/.mozilla)。

gpgdir を使用するのはどうですか?これは、ログインとログアウトのためにスクリプト化可能である必要があります。暗号化されるはずのサブディレクトリを選択することもできます(たとえば、.bash_rcなどのファイルを復号化したままにしておきたい場合があります)。

別の選択肢は Truecrypt かもしれません。データ用のcontainerを作成し、シェルスクリプトを介して暗号化/復号化できます。

3

Ubuntuとその派生ディストリビューションの標準であるecryptfsを使用することもできます。これは、インストールプロセスでホームディレクトリ(http://www.linuxjournal.com/article/9400)を暗号化するかどうかを尋ねられたときに使用されます。 ecryptfsの利点は、それを使用するために個別のパーティションやループバックマウントされたファイルが必要ないことです。

2
Luc Stepniewski