mount / fstab 的默认挂载设置是什么?

mount / fstab 的默认挂载设置是什么?

非根分区的默认挂载选项是什么?

mount 的 man 条目显示......

defaults - use default options: rw, suid, dev, exec, auto, nouser, and async.

... 这可能是我们期望看到的。但是,除非我遗漏了什么,否则事实并非如此。

我有一个名为“NewHome20G”的 ext3 分区,系统将其视为 /dev/sdc6。我们可以从以下位置看到...

root@john-pc1204:~# blkid | grep NewHome20G
/dev/sdc6: LABEL="NewHome20G" UUID="d024bad5-906c-46c0-b7d4-812daf2c9628" TYPE="ext3" 

我在 fstab 中有一个如下条目...

root@john-pc1204:~# cat /etc/fstab | grep NewHome
LABEL=NewHome20G        /media/NewHome20G        ext3         rw,nosuid,nodev,exec,users     0  2

请注意该 fstab 行中指定的选项设置。

现在我看一下启动后分区实际上是如何安装的......

root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]

...因此,当文件系统被挂载时,我指定的执行和用户选项似乎被忽略了。

为了确保万无一失,我卸载了 sdc6,重新安装它,然后再次查看安装选项......

root@john-pc1204:~# umount /dev/sdc6
root@john-pc1204:~# mount /dev/sdc6
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]

....结果相同

现在我再次卸载该分区,指定 exec 选项重新挂载它并查看结果...

root@john-pc1204:~# umount /dev/sdc6
root@john-pc1204:~# mount /dev/sdc6 -o exec
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,nosuid,nodev) [NewHome20G]

...到这里 exec 选项终于生效了,而 noexec 设置消失了。

只是为了兴趣,我使用默认选项重新挂载了分区

root@john-pc1204:~# umount /dev/sdc6
root@john-pc1204:~# mount /dev/sdc6 -o defaults
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]

noexec 又回来了,所以看起来很像 rw、noexec、nosuid、nodev 是默认选项,这不是 man 所说的。

这为什么重要?

我有一个文件夹,里面装满了有用的脚本,存储在数据磁盘上。由于该磁盘以 noexec 方式挂载,因此这些脚本无法运行,即使它们都已使用 chmod 777 进行设置。我可以通过多种方式解决这个问题,但令人失望的是,man 条目似乎是错误的。

我是否遗漏了某些显而易见的东西,或者 Ubuntu 中的默认选项与几个版本之前的选项相比发生了变化?

答案1

手册是正确的。您的问题是也许您没有考虑到 3 个重要细节:

  • users(和user)暗示选项noexecnosuidnodev

  • 除非被覆盖随后的选项

  • 选项命令事 ;)

因此,当你rw,nosuid,nodev,exec,users使用文件系统,最后一个选项,,users设置noexec,nosuid,nodev,从而禁用你的exec(并且使你的nosuid,nodev变得多余)。

结果正如预期的那样rw,noexec,nosuid,nodev

不,users它并没有被忽略,只是通常不会显示在mount列表输出中。但任何用户都可以卸载它并重新安装。试试看!

rodrigo@desktop ~ $ mount /dev/sda6                # ordinary user
rodrigo@desktop ~ $ mount | grep /dev/sda6
/dev/sda6 on /mnt/mint10 type ext4 (rw,noexec,nosuid,nodev)
rodrigo@desktop ~ $ /mnt/mint10/bin/echo it works  # noexec will deny this
bash: /mnt/mint10/bin/echo: Permission denied

mountuser仅当()时才会显示与用户相关的内容不是 users) 被使用,并且普通的非 root 用户可以像这样挂载它:

rodrigo@desktop ~ $ mount /dev/sda6         # ordinary user
rodrigo@desktop ~ $ mount | grep /dev/sda6  # it will list current "owner"
/dev/sda6 on /mnt/mint10 type ext4 (rw,noexec,nosuid,nodev,user=rodrigo)
rodrigo@desktop ~ $ umount /dev/sda6
rodrigo@desktop ~ $ sudo mount /dev/sda6
rodrigo@desktop ~ $ mount | grep /dev/sda6  # since owner=root, it won't show
/dev/sda6 on /mnt/mint10 type ext4 (rw,noexec,nosuid,nodev)
rodrigo@desktop ~ $ umount /dev/sda6        # only mounter can unmount
umount: only root can unmount LABEL=MINT10 from /mnt/mint10

还要注意,使用userwithout时noauto,分区将在启动时自动挂载(由 root 挂载)。因此,在 root 卸载它之前,任何人都无法卸载或(重新)挂载它。

话虽如此,我想你已经找到解决方案了:只需改变选项的顺序一切都会正常进行:

LABEL=NewHome20G  /media/NewHome20G  ext3  users,exec  0  2

注意exec users并且也rw,nosuid,nodev没有必要。rw已经是默认的,其他的都自动开启了users

结果是:

rodrigo@desktop ~ $ mount /dev/sda6                  # user mount
rodrigo@desktop ~ $ mount | grep /dev/sda6
/dev/sda6 on /mnt/mint10 type ext4 (rw,nosuid,nodev)
rodrigo@desktop ~ $ /mnt/mint10/bin/echo it works    # exec works
it works
rodrigo@desktop ~ $ sudo umount /dev/sda6            # root unmount
rodrigo@desktop ~ $ sudo mount /dev/sda6             # root mount
rodrigo@desktop ~ $ mount | grep /dev/sda6
/dev/sda6 on /mnt/mint10 type ext4 (rw,nosuid,nodev)
rodrigo@desktop ~ $ umount /dev/sda6                 # user unmount
rodrigo@desktop ~ $

这意味着任何用户(root 或非 root)都可以挂载和卸载它,无论之前是谁挂载或卸载的。可执行文件也可以 :)

相关内容