jre*_*rel 2 encryption ecryptfs
我可以从脚本解密 ecryptfs 私有目录吗?
我对此类活动的基本用例是进行远程备份。想象一下,您有一台机器(称为 privatebox),其中有一个加密的私有目录,用于存储您的照片(或其他一些敏感信息)。它仅在登录时解密。假设您希望能够在远程机器上编写一个脚本,该脚本将登录到 privatebox,解密目录以添加照片,然后重新加密并注销。所有这些都不需要用户交互步骤(也许它从 cron 运行)。请注意,私人邮箱的密码不会以纯文本或任何形式存储在私人邮箱中。而且由于它会被加密(更新期间除外),如果有人获得了 SD 卡等,它将受到保护。
这样的脚本会像这样工作(在我看来):
似乎 ecryptfs 专门设计为不允许这样做(即使使用 SSH 密钥技巧,您仍然必须手动挂载您的私有目录)。
基本上,我正在寻找的是“ecryptfs-mount-private”的非交互式版本或类似的东西,如果有人知道解决方案的话。就像是:
% ecryptfs-mount-private -p $PASSPHRASE
在那里我可以传递密码,而不必输入它。
如果 ecryptfs 不能做到这一点,有人知道替代方案吗?谢谢!
好吧,我想通了。感谢您对 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
Run Code Online (Sandbox Code Playgroud)
请注意,我必须禁用文件名加密才能使其正常工作。当我尝试使用文件名加密时,我在挂载过程中遇到了库错误。为了不进行文件名加密,您必须在创建 Private/ 目录时使用以下内容:
ecryptfs-setup-private -n
Run Code Online (Sandbox Code Playgroud)
这现在对我有用。
为了回应一些人会说“为什么要这样做?”,好吧,我并不总是想在每次登录时都挂载我的私人数据。我想要一种不需要我使用实际用户登录密码的快速安装数据的方法。想象一下,我想与其他人共享数据?我必须给他们我的密码。使用挂载密码,我基本上可以拥有一个比我的登录更不安全的挂载密码。如果您想自动挂载数据并将短语存储在某处(可能在 U 盘上作为解锁数据的钥匙),这也很有用。我永远不想将我的登录密码以纯文本形式存储在任何地方。但是,如果您知道数据的内容,并且知道数据本身的私密性不如您自己的帐户,那么这是一个很好的解决方案。