我如何通过 fstab 将 tmpfs 挂载到 /tmp,并且让任何人都可以写入?

我如何通过 fstab 将 tmpfs 挂载到 /tmp,并且让任何人都可以写入?

我想挂载一个 tmpfs/tmp并使其对用户(或特定用户)可写入。该机器是装有 Debian 8.0(Raspian)的 Raspberry Pi 3。无论我尝试什么,/tmp它始终只具有权限root

我尝试过以下fstab条目:

tmpfs           /tmp            tmpfs   nosuid,nodev,noatime   0       0
tmpfs           /tmp            tmpfs   nosuid,nodev,noatime,user,uid=1000,gid=1001,mode=1777   0       0

这总是会导致以下权限:

$ ls -alh /tmp
total 36K
drwxr-xr-x 14 root  root   500 Jul 19 10:17 .

但是如果我将 tmpfs 安装到除/tmp(例如/var/opt)之外的任何其他位置,则每个人都可以写入:

$ ls -alh /var/opt
total 4.0K
drwxrwxrwt  2 root root   40 Jul  3 12:18 .

我如何挂载 tmpfs/tmp以便每个人都可以写入?

输出mount

tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime)
tmpfs on /var/opt type tmpfs (rw,nosuid,nodev,relatime)

如果使用所有 uid、gid 和 mode 选项进行挂载:

tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,noatime,uid=1000,gid=1001)

编辑:是否有任何 Linux 服务在启动时将目录的权限设置为 755 /tmp?因为即使我只是符号链接/tmp/var/opt,也会设置这些权限,而这本身对任何人都是可写入的。使用从/tmp到 的符号链接启动后/var/opt, 上的权限/var/opt设置为 755。

答案1

您的原始/etc/fstab行是正确的:

tmpfs /tmp tmpfs nosuid,nodev,noatime 0 0

对于 的符号链接/tmp,例如/var/spool/var/tmp和可能/var/opt(不确定),删除符号链接,将其替换为空目录,然后添加新行以/etc/fstab创建另一个挂载,例如:

tmpfs /var/spool tmpfs  defaults,noatime,nosuid,nodev,noexec,mode=0755,size=64M 0 0

要查找所有此类符号链接:

sudo find / -lname '/tmp*' 2>/dev/null

这样做的原因是,在启动时,某些目录的权限/var/spool会发生改变,并且chmod符号链接会改变目标目录。

也可以看看为什么 fstab 有 1777 时 /tmp 以权限 0755 挂载?

答案2

我的 tmpfs 设置是:

tmpfs           /tmp            tmpfs   rw,mode=1777,size=12g

该大小适用于您可能拥有的具有更多内存和交换的系统。 noatime或者relatime不应该有关系,因为 inode 将是内存结构并且不太可能写入磁盘。 tmpfs如果需要,将被分页到交换区。

755 的权限/tmp很可能是挂载点的默认权限。传统的权限是 1777,允许任何人创建文件,但确保文件不被其他用户操纵。

相关内容