スクリプトでecryptfs Privateディレクトリを復号化できますか?
このタイプのアクティビティの私の基本的なユースケースは、リモートバックアップを実行することです。写真(またはその他の機密情報)を保存する暗号化されたプライベートディレクトリを持つマシン(privateboxと呼ばれる)があると想像してください。ログイン時にのみパスワードが復号されます。リモートコンピュータからprivateboxにログインし、ディレクトリを復号化して写真を追加し、再暗号化してログアウトするスクリプトを書くことができると想像してください。これらすべての操作にはユーザー対話ステップは必要ありません(クローンで実行することもできます)。個人ボックスのパスワードは、プレーンテキストやいかなる形でも個人ボックスに保存されません。そして暗号化されるので(アップデート中を除く)誰かがSDカードなどを入手しても保護されます。
これらのスクリプトは次のように動作します(私の考えでは):
- プライベートボックスでパスワードで暗号化されたプライベートディレクトリを設定する
- SSHを非対話式に使用できるように、ローカルコンピュータからprivateboxにSSHキーを設定します(cronはログイン可能)
- そして何?パスワードを知っている場合は、個人用フォルダを非対話式に復号化する方法は?
ecryptfsはこれを許可しないように特別に設計されているようです(SSHキースプーフィングを使用しても、個人用ディレクトリを手動でマウントする必要があります)。
基本的に私が探しているのは、「ecryptfs-mount-private」の非対話型バージョンまたはこれと似ています(誰かが解決策を知っている場合)。それは次のとおりです。
%ecryptfs-mount-private -p $PASSPHRASE
パスワードを入力しなくてもパスワードを渡すことができます。
ecryptfsがこれを実行できない場合、選択肢を知っている人はいますか?ありがとうございます!
答え1
わかりました、わかりました。 Xen2050のおかげでありがとう。まだあなたに投票するのに十分な評判を得ていません。
これは私に合ったbashスクリプトです。
#Set this variable to your mount passphrase. Ideally you'd get this from $1 input so that the actual value isn't stored in bash script. That would defeat the purpose.
mountphrase='YOURMOUNTPASSPHRASE'
#Add tokens into user session keyring
printf "%s" "${mountphrase}" | ecryptfs-add-passphrase > tmp.txt
#Now get the signature from the output of the above command
sig=`tail -1 tmp.txt | awk '{print $6}' | sed 's/\[//g' | sed 's/\]//g'`
rm -f tmp.txt #Remove temp file
#Now perform the mount
sudo mount -t ecryptfs -o key=passphrase:passphrase_passwd=${mountphrase},no_sig_cache=yes,verbose=no,ecryptfs_sig=${sig},ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=no /home/user/.Private /home/user/Private
これが機能するには、ファイル名の暗号化を無効にする必要がありました。ファイル名暗号化を使用しようとすると、インストール中にライブラリエラーが発生します。ファイル名の暗号化を実行したくない場合は、Private/ディレクトリを作成するときに以下を使用する必要があります。
ecryptfs-setup-private -n
これは今私にとって効果的です。
「なぜこのようなことをしますか?」と尋ねる一部の人に答えると、ログインするたびに私の個人データが常にインストールされることを望んでいません。実際のユーザーログインパスワードを使用せずにデータをインストールする簡単な方法があることを願っています。他の人とデータを共有したいと想像してください。彼らに私のパスワードを教えてください。マウントパスワードを使用すると、デフォルトでは、私のログインよりも安全性の低いマウントパスワードが得られます。これは、自動的にデータをマウントしてフレーズをどこかに保存したい場合にも役立ちます(おそらくデータロックを解除するためのキーとしてUSBスティックに保存します)。私はログインパスワードをプレーンテキストでどこにでも保存したくありません。ただし、これはデータが何であるかを知り、データ自体が自分のアカウントよりも非公開であることを知っている場合に最適なソリューションです。
答え2
まずecryptfs-add-passphrase
、パスワードをパイピングするのと同じように、カーネルキーリングにパスワードを入れることができます(パスワードをプレーンテキストファイルに保存せずに安全に保つことが問題です)。
printf "%s" "passphrase" | ecryptfs-add-passphrase [--fnek] -
次に、次を使用しますmount.ecryptfs_private
。
mount.ecryptfs_private は、非 root ユーザーがプライベートディレクトリ (デフォルトでは ~/Private) を暗号化方式でマウントできるマウントヘルパーユーティリティです。
プログラムはオプションでALIASパラメーターを使用できます。 ALIAS が省略された場合、プログラムはデフォルトで「Private」に設定されます。 - $HOME/.Private をソースとして - $HOME/Private をターゲットに - $HOME/.ecryptfs/Private.sig をキー署名として使用します。
ALIASが指定されている場合、プログラムは次にfstab(5)スタイルの構成を見つけます。 - $HOME/.ecryptfs/ALIAS.conf とキー署名: - $HOME/.ecryptfs/ALIAS.sig
次の場合にのみインストールが続行されます。 - 必要なパスワードがカーネルキーリングにあり、 - 現在のユーザーがSOURCEとDESTINATIONのマウントポイントの両方を所有しています。 - DESTINATIONはまだマウントされていません。
プログラムは次のことを行います。
- SOURCEをDESTINATIONにインストール
- ecryptfsファイルシステムへ
- AES暗号化の使用
- キーの長さは16バイトです。
- ~/.ecryptfs/Private.sig に署名されたパスワードを使用してください。
man ecryptfs
あるいは、キーファイルやファイル記述子または変数を使用して、mount
コマンドのパスワードを希望の方法で取得するなど、独自の行を読み取って設定します。次のオプションに注意してくださいmount
。mount -t ecryptfs [SRC DIR] [DST DIR] -o [OPTIONS]
passphrase_passwd=(passphrase)
The actual password is passphrase. Since the password is visible
to utilities (like ps under Unix) this form should only be used
where security is not important.
passphrase_passwd_file=(filename)
The password should be specified in a file with
passwd=(passphrase). It is highly recommended that the file be
stored on a secure medium such as a personal usb key.
passphrase_passwd_fd=(file descriptor)
The password is specified through the specified file descriptor.
openssl_keyfile=(filename)
The filename should be the filename of a file containing an RSA
SSL key.
etc...
しかし、ユーザーがログインするたびに暗号化されたディレクトリが復号化/マウントされたら、ログインするだけです。
答え3
これは sudo や一時ファイルを必要とせず、ファイル名の暗号化に適した方法です。 ecryptfs-mount-privateスクリプトに基づいて作成しました(シェルスクリプトなので、直接コピーして編集することもできます)。
WRAPPED_PASSPHRASE_FILE="$HOME/.ecryptfs/wrapped-passphrase"
LOGINPASS="YOUR PASSWORD"
# If not using filename encryption
# printf "%s\0" "$LOGINPASS" | ecryptfs-unwrap-passphrase "$WRAPPED_PASSPHRASE_FILE" - | ecryptfs-add-passphrase -
# If using filename encryption
printf "%s\0" "$LOGINPASS" | ecryptfs-insert-wrapped-passphrase-into-keyring "$WRAPPED_PASSPHRASE_FILE" -
# Try mounting
/sbin/mount.ecryptfs_private >/dev/null 2>&1