我有一个进程想要访问加密的文件系统。使用EncFS 可以很容易地做到这一点,但这需要用户安装加密的文件系统,因此向任何有权访问安装用户的用户提供对数据的访问权限,例如root。
是否可以让进程挂载文件系统,以便只有它才能访问数据?如果没有,是否有其他方法可以防止那些不知道密码的人访问数据?
答案1
Gilles说的是正确的,你无法阻止root访问挂载点。它可能无法直接访问安装(没有熔丝allow_other
选项),但它始终可以切换到该用户。
然而,您可以做的是在进程将其当前工作目录更改为安装点后延迟卸载安装。一旦进程位于挂载点内,您就可以执行延迟卸载。这将阻止任何新进程访问安装点,但在其中运行的进程将继续具有访问权限。
例子
encfs /enc/source /enc/target
( cd /enc/target && some_long_running_process) &
fusermount -uz /enc/target
some_long_running_process
,并且它产生的任何子进程都将具有对挂载点的完全访问权限。但是,如果不是该进程的子进程的任何东西尝试访问挂载,它只会得到一个空目录。
请注意,有一个简短的窗口,其中安装点可用,其中其他内容可以将目录更改为该窗口,但如果编写脚本,则该窗口非常小。
另请注意,root 仍有几种方法可以访问挂载点,但它们并不简单,而且非常黑客式的。
答案2
只有挂载用户才能访问encfs文件系统。即使以 root 身份运行的进程也会出现“权限被拒绝”错误;当然,他们可以切换到挂载用户,然后访问数据。
不可能使 root 无法访问数据。根据定义,root 是全能的,可以访问一切。你无法阻止 root 访问文件,就像你无法阻止上帝/圣诞老人/你的父母/… 1 知道你昨天晚上做了什么一样。如果您不信任某个用户,请不要授予他们以 root 身份运行命令的权限。
¹选择适用的一项。
答案3
好吧,根据这个标题为的问答:encfs 预期访问被拒绝听起来如果特定用户进行了安装,即使 root 也无法访问 EncFS。
摘抄
但看起来您使用普通用户来挂载加密目录,然后您尝试使用 root 使用 sudo 查看挂载的文件。那是行不通的,而这正是 encfs 的全部意义所在。
在您的示例中,目录 cr 是 encfs 使用的存储。这里面的内容不是什么大秘密,都是加密数据。您正在将这些数据挂载到 mn 上,以便您可以以人类可读的方式查看其内容,即 mn 下的文件。
只有挂载 cr 的用户才能读取 mn 中的内容。连root都不能。
但对于更精明的用户来说,没有什么可以阻止 root 只需执行su - <user>
并成为该用户,以便他们可以访问已安装的 EncFS 共享。
正如本网站多次说过的那样,您无法阻止 root 访问系统本地的任何内容。这就是系统的工作原理。 Windows 系统上的管理员也是如此。