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

Joh*_*ick 20 default fstab mount

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

mount 的 man 条目说...

defaults - use default options: rw, suid, dev, exec, auto, nouser, and async.
Run Code Online (Sandbox Code Playgroud)

......所以这可能是我们期望看到的。但是,除非我遗漏了什么,否则不会发生这种情况。

我有一个标记为“NewHome20G”的 ext3 分区,系统将其视为 /dev/sdc6。这我们可以从...

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

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

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

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

现在我看看分区是如何在启动后实际挂载的......

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

...因此,当文件系统被挂载时,我指定的 exec & users 选项似乎已被忽略。

可以肯定的是,我卸载了 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]
Run Code Online (Sandbox Code Playgroud)

....同样的结果

现在我再次卸载分区,指定 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]
Run Code Online (Sandbox Code Playgroud)

...这里 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]
Run Code Online (Sandbox Code Playgroud)

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

为什么这很重要?

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

我是否在这里遗漏了一些明显的东西,或者 Ubuntu 中的默认选项与几个版本前的版本相比发生了变化?

Mes*_*ion 20

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

  • users(and user) 暗示选项noexec, nosuid, 和 nodev

  • 除非被后续选项覆盖

  • 期权订单很重要;)

因此,当您rw,nosuid,nodev,exec,usersfstab中使用最后一个选项时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
Run Code Online (Sandbox Code Playgroud)

mount如果使用user( not 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
Run Code Online (Sandbox Code Playgroud)

还要注意,当使用userwithout 时noauto,分区将在启动时自动挂载(由 root 用户)。因此,在 root 卸载它之前,没有人能够卸载或(重新)挂载。

也就是说,我想您已经找到了解决方案:只需更改选项的顺序,一切都会正常进行:

LABEL=NewHome20G  /media/NewHome20G  ext3  users,exec  0  2
Run Code Online (Sandbox Code Playgroud)

请注意如何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 ~ $
Run Code Online (Sandbox Code Playgroud)

这意味着任何用户,无论是 root 用户还是非 root 用户,都可以挂载和卸载它,而不管之前是谁挂载或卸载了它。可执行文件也可以工作:)