/dev/shm 不适合存储秘密

/dev/shm 不适合存储秘密

该发行版是运行 2.6.35-30 Linux 内核的 Ubuntu 服务器。

我想要一个完全位于内存中的目录。没有root权限可以实现吗?

答案1

Linux 提供了任何用户都可以使用的 tmpfs 设备/dev/shm。默认情况下,它不会安装到特定目录,但您仍然可以将其用作目录。

只需在其中创建一个目录/dev/shm,然后将其符号链接到您想要的任何位置。您可以向创建的目录授予您选择的任何权限,以便其他用户无法访问它。

这是一个支持 RAM 的设备,因此默认情况下内存中存在内容。里面可以创建任何你需要的目录/dev/shm

当然,放置在这里的文件在重新启动后将无法保存,并且如果您的计算机开始交换,对/dev/shm您也没有帮助。

与 Solaris 类似的/dev/shm/tmp“交换”类型分区,也是基于内存的。与 一样/dev/shm,任意用户都可以在/tmpSolaris 上创建文件。

OpenBSD 也能够使用基于内存的挂载,但默认情况下没有可用的挂载。 mount_mfs 命令可供超级用户使用。

我不确定其他 *BSD。

答案2

/dev/shm 不适合存储秘密

...在具有活动的系统上交换!机会是很高您的计算机已启用它。

有一个更好的,保证短暂的,标准替代方案 — ramfs.ramfs如果您打算使用 RAM 支持的空间来进行以下操作,则可能需要使用暂时的存储敏感数据,例如私钥、比特币或以太坊钱包等。

ramfstmpfs比数据需要保密时更好,因为ramfs数据绝不被交换(保存到物理存储驱动器),同时tmpfs 可能被交换。随后获得机器 root 或物理访问权限的第三方可以检查交换空间提取敏感数据

解决方案

您可以准备ramfs挂载,以便任何非特权用户都可以按需挂载/卸载它。

为此,您需要特权,一次。如果您缺乏 root 权限,请要求系统管理员为您进行设置。

首先,您需要在/etc/fstab.该行fstab可能如下所示:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=1777    0    0
  • /mnt/ramfs是一个挂载点,ramfs 文件系统将挂载于此。目录应该存在
  • noauto选项阻止自动安装(例如在系统启动时)。
  • user使得普通用户可以安装它。
  • size设置此“ramdisk”的大小(您可以在此处使用MG)。但它没有任何影响,因为 ramdisk 会根据需要增长。
  • mode很重要,使用八进制代码,1777任何用户都可以创建文件和目录,但只有这些文件和目录的所有者才能访问它们(您也可以使用您选择的不同代码,但要非常确定!)。

完成此操作后,任何用户都可以按需安装它。

一旦某个用户安装了它,ramfs就会创建新的文件系统并安装在/mnt/ramfs/。它将由 拥有root:user。一旦他/她卸载它,或者系统重新启动,这个基于 RAM 的文件系统将消失全部它的数据。这很酷。

此外,该文件系统可以由多个用户独立安装,但是不同时,即要准备好由下一个用户安装,前一个用户应该卸载该文件系统。或者您可以为每个用户创建单独的文件系统。

安装:

mount /mnt/ramfs/

卸载:

umount /mnt/ramfs/

PS 如果您尝试以rsync非 root 用户身份将文件写入新安装/创建的 ramfs 的根目录,您可能会遇到错误rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]。这完全没问题并且符合预期,因为您的用户不拥有 ram 文件系统的根。解决方案很简单,/mnt/ramfs/copied/例如,只需在那里创建一些目录,然后rsync放入其中即可。

PPS 在 Debian 9 上进行了测试。很确定它也可以在 Ubuntu 上运行。

PPPS 虽然安全得多,但基于 RAM 的存储仍然脆弱一些精心设计的攻击,例如冷启动攻击。因此,如果您真的很重视数据的安全性,请务必身体上的保护您的 PC/笔记本电脑,锁定机箱和内存条,或者更好的是,考虑使用将 RAM 直接焊接到主板上的计算机(大多数高端超便携式笔记本电脑都是这种情况)。如果您不打算在接下来的一个小时左右使用计算机,还可以考虑完全关闭计算机。甚至可能完全禁用睡眠/休眠功能。

答案3

您的系统可能已经有一个可用的;最近的Linux系统总是基于Glibc安装了 tmpfs/dev/shm

如果您的系统没有或太小,那么未由 root 挂载的文件系统几乎意味着保险丝。在 Ubuntu 上,您需要加入fuse组才能使用 FUSE。翻翻可用的 FUSE 文件系统,我只看到拉姆弗斯,不幸的是被遗弃在上游。

答案4

一般来说,不可以,文件系统只能由 root 挂载。如果您允许用户任意放置文件系统,那么本质上就是授予他们 root 权限。 (简单方法:在 /etc 上挂载一个,将您自己的密码和影子放在那里,使用您刚刚创建的新 root 密码进​​行 su,卸载)

如果您想要在特定位置有 tmpfs,您可以将其添加到/etc/fstab,带有 标志noauto,user,然后用户将能够安装它(但不是特别清楚为什么您不只是自动安装它)

如果用户需要任意 tmpfs,那么您有几个选择:

  • 使用一个 tmpfs 的子目录。也许是最好的方法。您确实可能不需要多个 tmpfs。
  • 创建一个脚本,该脚本将创建一个目录并在其上安装 tmpfs,然后打印出它放置的位置。用于sudo允许用户运行它。确保你这样做不是允许用户选择任意路径。

相关内容