(如何)可以将tmpfs创建为普通(非root)用户?


39

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

我想要一个完全位于内存中的目录。没有root特权,这可能吗?

Answers:


49

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

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

这是RAM支持的设备,因此默认情况下内存中有什么。您可以在其中创建所需的任何目录/dev/shm

自然,放置在此处的文件将无法重新启动,并且如果您的计算机开始交换,/dev/shm将无济于事。

平行于所述的Solaris /dev/shm就是/tmp其为“交换”类型的分区,并且还基于记忆的。与一样/dev/shm,任意用户都可以/tmp在Solaris上创建文件。

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

我不确定其他* BSD。


1
一个符号链接可以解决where问题。
enzotib 2011年

D'oh ...忘了那些讨厌的小符号链接。
gabe。

@enzotib修复了!
gabe。

/dev/tmpfs系统上似乎没有(我自己的系统没有3.0.0内核)。您确定这不是您的发行版所创建的吗?
bitmask,

1
不知道这是否也适用于其他人,但是在我当前的ubuntu版本中,这似乎已经更改为/run,可能/run/shm需要在更新我的答案之前进行进一步调查。
gabe。

14

/ dev / shm不安全

...在具有主动交换功能的系统上!您的计算机启用它的可能性很高

有一个更好,安全,标准的替代方法ramfsramfs如果您打算使用RAM支持的空间来临时存储敏感数据,例如私钥,比特币或以太坊钱包等,则可能要使用。

ramfstmpfs安全性要好,因为ramfs数据永远不会被交换(保存到物理存储驱动器),而tmpfs 可能会被交换。然后,第三方可以检查交换空间提取敏感数据

解决方案

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

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

首先,您需要在中添加一行/etc/fstab。fstab中的行可能如下所示:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfs是一个挂载点,将在其中挂载ramfs文件系统。目录应该存在。
  • noauto 选项可防止此文件自动安装(例如,在系统启动时)。
  • user 使普通用户可以安装此文件。
  • size设置这个“虚拟盘的”大小(你可以使用MG这里)。
  • mode这是非常重要的,使用八进制代码,0770只有root和挂载此文件系统的用户才可以对其进行读写,而不能对其他八进制代码进行读写(您也可以使用选择的其他代码,但是请务必确定! )。

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

一旦某些用户安装了该ramfs文件,便会创建新的1024 MB 文件系统并将其安装在/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上运行。



5

通常,不可以,文件系统只能通过root挂载。如果允许用户任意放置文件系统,那实际上就是赋予它们根目录。(简单的方法:在/ etc上挂载一个,在其中放置自己的passwd和shadow,然后使用刚刚创建的新root密码su卸载)

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

如果用户需要任意的tmpfs,则有两种选择:

  • 使用一个tmpfs的子目录。可能是最好的方法。您实际上可能不需要多个tmpfs。
  • 创建一个脚本,该脚本将创建一个目录并将tmpfs挂载在该目录上,然后打印出放置该目录的位置。使用sudo允许用户运行它。请确保你不会让用户挑选任意路径。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.