![](/img/trans.png)
[英]Decrypt and mount an eCryptFS encrypted directory using an external C++ script in Linux
[英]Mounting ecryptfs using C++ mount function
我正在嘗試從 C++ 程序中掛載 ecryptfs。 通過在提示符下發出此命令,我絕對可以在不詢問問題的情況下安裝它:
sudo mount -t ecryptfs -o "rw,key=passphrase:passphrase_passwd=geoff,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=n,no_sig_cache" ~/source/ ~/target/
請注意,實際上,我正在通過完整的規范路徑以防萬一。
但是在程序中,在嘗試將mount()
function 與相同的 arguments 一起使用后,我遇到了errno=EINVAL
失敗:
mount("~/source/", "~/target/", "ecryptfs", MS_NODEV, "rw,key=passphrase:passphrase_passwd=geoff,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=n,no_sig_cache")
該程序確實以root
權限啟動,我已檢查我是否擁有 CAP_SYS_ADMIN。
mount()
function 返回-1
並將errno
為EINVAL
。
我得到的 arguments 正確嗎? 這可能是特權問題嗎?
編輯:我通過system()
在外部執行 mount 使其工作,但由於某些原因仍然想使用 function。
我相信這是因為mount -t ecryptfs
實際上是在調用助手可執行文件mount.ecryptfs
,並且它正在處理一些選項(特別是key=
)本身。 實際傳遞給 kernel 的內容是不同的(之后您可以通過查看 /proc/mounts 來了解這一點)。
如果您仔細查看https://manpages.ubuntu.com/manpages/k.netic/en/man7/ecryptfs.7.html ,key= 和 ecryptfs_enable_filename_crypto= 列在“MOUNT HELPER OPTIONS”下 - 實際的ecryptfs_sig=(fekek_sig)
選項是ecryptfs_sig=(fekek_sig)
和ecryptfs_fnek_sig=(fnek_sig)
。
因此,如果您想繞過助手並直接進行掛載,則需要使用https://man7.org/linux/man-pages/man2/keyctl.2.html將令牌加載到內核的密鑰環中並替換密鑰= 使用生成的令牌簽名,就像 mount.ecryptfs 所做的那樣。
看起來您確實有一個 libecrytpfs,它在 ecryptfs.h 中具有類似ecryptfs_add_passphrase_key_to_keyring的功能,您可以(大概未經測試)以匹配 mount.ecryptfs 的方式使用它來執行此操作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.