簡體   English   中英

使用 C++ 掛載 ecryptfs mount function

[英]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並將errnoEINVAL

我得到的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM